Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

leaf leftleaf right
Notifications
Clear all

Indicador SHARK FLOW

3 Posts
3 Usuários
0 Reactions
527 Visualizações
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
Iniciador do tópico  

Objetivo do código: Detectar o fluxo da movimentação dos tubarões (Big players/Investidores Institucionais), conciliando informações de volatilidade atípica e direcional, agressão acumulada no sentido da movimentação de preço e volume de negociação relevante.

Motivação: Indicador para compor um conjunto de ferramentas base para que traders possam elaborar estratégias e robôs

Observações importantes: O Indicador está disponível GRATUITAMENTE COM CÓDIGO FONTE ABERTO no Profit Char. Este ambiente destina-se a coletar sugestões e aperfeiçoarmos o indicador de maneira colaborativa.

Link Youtube com explicação do indicador

// #######################################################################
// #######################################################################
// #######################################################################
// ######                            O                             #######
// ######                        ____|____                         #######
// ######                      _|         |_                       #######
// ######                     (_|  O   O  |_)                      #######
// ######                       |_________|                        #######
// ######                                                          #######
// ###### ____        __        ____________           ________    #######
// ###### | | \       | |       | |_________|         /  ____  \   #######
// ###### | |\ \      | |       | |                  /  /    \  \  #######
// ###### | | \ \     | |       | |____             |  |      |  | #######
// ###### | |  \ \    | |       | |____|            |  |      |  | #######
// ###### | |   \ \   | |       | |____|            |  |      |  | #######
// ###### | |    \ \  | |       | |                 |  |      |  | #######
// ###### | |     \ \ | |       | |_________         \  \____/  /  #######
// ###### |_|      \_\|_|       |_|_________|         \________/   #######
// ######                                                          #######
// ###### _______  __          __   ____  __   ___    __  _______  #######
// ######    |    |  \   /\   |  \ |     |  \ |   \  /  \    |     #######
// ######    |    |__/  /__\  |   ||__   |__/ |___/ |    |   |     #######
// ######    |    |\   /    \ |   ||     |\   |   \ |    |   |     #######
// ######    |    | \ /      \|__/ |____ | \  |___/  \__/    |     #######
// ######                                                          #######
// ######  Comunidade aberta de automatização de estratégias para  #######
// ######                    negociação de ativos                  #######
// ######                                                          #######
// ######                    www.NeoTraderBot.com                  #######
// #######################################################################
// #######################################################################
// #######################################################################
//
// -----------------------------------------------------------------------
// ---------------------- DADOS DA ESTRATÉGIA ----------------------------
// -----------------------------------------------------------------------
//
// NOME DA ESTRATÉGIA: _NeoTraderBot_SharkFlow
//   DESENVOLVIDA POR: Johnathas Carvalho
//    DATA DE CRIAÇÃO: 22/12/2022
//             VERSÃO: 1.0
//      ATUALIZADA EM: 22/12/2022
// TIPO DE ESTRATÉGIA: ( ) Indicador  (X) Coloração ( ) Execução
//                     ( ) Screening  ( ) Texto     ( ) Alarme
//
// DESCRIÇÃO DA ESTRATÉGIA:
//    Esta estratégia, inicialmente implementada como coloração, visa indicar
// o fluxo dos tubarões (Big players, Institucionais). O SHARKFLOW concilia 3 
// dimensões importantes de trading: movimentação de preço acima da média, 
// volume relevante e agressão acumulada na direção de movimentação do preço.
// Embarque no fluxo dos tubarões e aumente a taxa de acerto e lucro de suas
// estratégias e robôs! 
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
//
// ######################### FIM DO CABEÇALHO ############################

// ---------------------------------------------------------------------
// -------------------------- Parâmetros -------------------------------
// OBS: Segue abaixo a descriação de cada parâmetro
// 1) pGatilhoVolatilidade -> Qtde de desvio padrão em relação à média 
// de volatilidade de preço para considerar uma movimentação direcional
// 2) pQtdePeriodosVolat -> Qtde de períodos para tomar a média da volatilidade
// de preço dos ativos
// 3) pQtdePeriodosMediaVolume -> Qtde de períodos para se calcular
// o volume médio negociado
// 4) pQtdeDesvioVolume -> Qtde de desvio padrão do volume negociado para
// se considerar o volume negociado RELEVANTE
// 5) pQtdeBarrasRecentesParaCalculo -> Caso haja problemas de lentidão
// em seu Profit, pode-se configurar esta estratégia para ser calculada
// apenas nos últimos X candles. Caso deseje calcular para toda série
// histórica mantenha o valor igual a 0.
// ---------------------------------------------------------------------
input
  pGatilhoVolatilidade(1.5);
  pQtdePeriodosVolat(180);
  pQtdePeriodosMediaVolume(180);
  pQtdePeriodosAcumAgressao(3);
  pQtdeDesvioVolume(1.5);
  pQtdeBarrasRecentesParaCalculo(0);

var
  // Variáveis para indicador de Volume Relevante
  fMedia, fStdDev: float;
  fVolumeRelevante: float;
  // --------------------------------------------

  // Variáveis para indicador de Volatilidade Média
  fMediaMax, fMediaMin: float;
  // --------------------------------------------

  // Variáveis para indicador de Agressão Acumulada
  bSentidoAgressao, bSentidoAgressaoAnt : boolean; // True -> agressão de compra, False -> agressão de venda
  fSaldoVolumeAgressao: float;
  fSaldoAcumuladoAgressao: float;
  iUltimaReversaoSaldo: integer;
  // --------------------------------------------


  fVolatilidadeMediaEmTicks: float;
  fRangeAtualEmTicks: float;
  fStdVolatilidade: float;
  iQtdeConfirmacoes: integer;
  cCorCandleGatilho: integer;
begin

fSaldoVolumeAgressao := AgressionVolBalance;
bSentidoAgressao := AgressionVolBalance > 0;

if (MaxBarsForward <= pQtdeBarrasRecentesParaCalculo) or (pQtdeBarrasRecentesParaCalculo = 0)  then
begin

// -----------------------------------------------------------------------
// ------------- REPLICAÇÃO DO CÓDIGO DE VOLUME RELEVANTE ----------------
// -----------------------------------------------------------------------
// Devido à ineficiencias do Profit e visando otimizar o presente indicador,
// tornou-se necessário trazer o código fonte do indicador de Volume Relevante
// para dentro desse indicador
  fMedia := Media(pQtdePeriodosMediaVolume, Volume);
  fStdDev := StdDevs(Volume, pQtdePeriodosMediaVolume);
  if (fMedia + pQtdeDesvioVolume*fStdDev) <> 0  then
    fVolumeRelevante := Volume/(fMedia + pQtdeDesvioVolume*fStdDev);
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// ------------ REPLICAÇÃO DO CÓDIGO DE VOLATILIDADE MÉDIA ---------------
// -----------------------------------------------------------------------
// Devido à ineficiencias do Profit e visando otimizar o presente indicador,
// tornou-se necessário trazer o código fonte do indicador de Volatilidade 
// Média para dentro desse indicador
  fMediaMax := Summation(High,pQtdePeriodosVolat);
  fMediaMin := Summation(Low,pQtdePeriodosVolat);
  fVolatilidadeMediaEmTicks := Ceiling((fMediaMax - fMediaMin)/pQtdePeriodosVolat/MinPriceIncrement);
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------


// -----------------------------------------------------------------------
// ------------ REPLICAÇÃO DO CÓDIGO DE AGRESSÃO ACUMULADA ---------------
// -----------------------------------------------------------------------
// Devido à ineficiencias do Profit e visando otimizar o presente indicador,
// tornou-se necessário trazer o código fonte do indicador de Volatilidade 
// Média para dentro desse indicador
  if (pQtdePeriodosAcumAgressao = 0) then
  begin
    fSaldoAcumuladoAgressao := fSaldoVolumeAgressao;

    iUltimaReversaoSaldo := 1;
    bSentidoAgressaoAnt := fSaldoVolumeAgressao[iUltimaReversaoSaldo] > 0; 

    while (bSentidoAgressaoAnt = bSentidoAgressao) and ((CurrentBar - iUltimaReversaoSaldo) >= 1) do
    begin
      fSaldoAcumuladoAgressao := fSaldoAcumuladoAgressao + fSaldoVolumeAgressao[iUltimaReversaoSaldo];
      iUltimaReversaoSaldo := iUltimaReversaoSaldo + 1;
      bSentidoAgressaoAnt := fSaldoVolumeAgressao[iUltimaReversaoSaldo] > 0; 
    end;

  end
  else fSaldoAcumuladoAgressao := Summation(fSaldoVolumeAgressao, pQtdePeriodosAcumAgressao);   
           
              
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------    

  iQtdeConfirmacoes := 0;
  cCorCandleGatilho := clYellow;

  fRangeAtualEmTicks := Ceiling((High - Low)/MinPriceIncrement);
  fStdVolatilidade := StdDevs(fVolatilidadeMediaEmTicks, pQtdePeriodosVolat);

  // Tem volume relevante
  if fVolumeRelevante >= 1 then iQtdeConfirmacoes := iQtdeConfirmacoes + 1;

  // Tem volatilidade considerável
  if (fRangeAtualEmTicks >= (fVolatilidadeMediaEmTicks + pGatilhoVolatilidade*fStdVolatilidade)) 
  then iQtdeConfirmacoes := iQtdeConfirmacoes + 1;

  // Volatilidade é direcionada no mesmo sentido da agressão
  if ((fSaldoAcumuladoAgressao > 0) and (Close > Open)) then
  begin
    cCorCandleGatilho := clGreen; 
    iQtdeConfirmacoes := iQtdeConfirmacoes + 1;
  end;
  if ((fSaldoAcumuladoAgressao < 0) and (Close < Open)) then 
  begin
    cCorCandleGatilho := clRed;
    iQtdeConfirmacoes := iQtdeConfirmacoes + 1;
  end;


  if iQtdeConfirmacoes = 3 then PaintBar(cCorCandleGatilho);
  

end;

end;

   
Citar
(@yamilucas)
Novo membro
Registrou: 12 meses atrás
Posts: 4
 

aqui esta dano esse erro no codigo

 

Parser[108,25]: Nome inválido: AgressionVolBalance
Parser[109,21]: Nome inválido: AgressionVolBalance
Erro de Sintaxe


   
ReplyCitar
(@eliphas)
Novo membro
Registrou: 12 meses atrás
Posts: 1
 

Oi, tudo bem?

Estou testando o indicador SharkFlow no Mini Dólar. Utilizo a Leitura de Fluxo como guia principal para operar, e percebo forte potencial nesse indicador de se tornar uma estratégia gráfica do fluxo.

Gostaria de saber se é possível determinar a volatilidade média através dos ticks primordialmente, e não por tempo. Vejo que quando utilizo gráfico atemporal como 3 pontos ou 4 renkos, o indicador Volatilidade Média não funciona. 

Att.

Eliphas


   
ReplyCitar