Discussão do artigo "O poder do ZigZag (parte I). Desenvolvimento da classe base do indicador"

 

Novo artigo O poder do ZigZag (parte I). Desenvolvimento da classe base do indicador foi publicado:

Muitos pesquisadores não prestam atenção o suficiente para determinar o comportamento dos preços. Ao mesmo tempo, são usados métodos complexos, que muitas vezes são “caixas pretas”, como aprendizado de máquina ou redes neurais. A questão mais importante que surge nesse caso é quais dados enviar para o treinamento de um determinado modelo.

Geralmente, os indicadores do tipo ZigZag são construídos com base nas máximas e mínimas das barras, sem considerar o spread. Este artigo apresenta uma versão modificada, na qual um spread é considerado na construção dos segmentos para os pontos extremos do ZigZag inferior. Supõe-se que os negócios devem ser realizados dentro do canal de preços no sistema de negociação. Isso é importante, pois muitas vezes acontece do preço de compra (ask) ser significativamente maior do que o de venda (bid). Por exemplo, isso pode acontecer durante a noite. Por isso, seria errado construir um indicador apenas com base nos preços de venda (bid). Afinal de contas, não faz sentido construir os pontos extremos inferiores do indicador baseados na mínima das barras se não houver a possibilidade de comprar a esses preços. É claro que o spread pode ser levado em conta nas condições de negociação, mas é melhor quando tudo é imediatamente visível no gráfico. Isso simplifica o desenvolvimento da estratégia de negociação, já que tudo é inicialmente mais plausível.

Além disso, você também pode querer ver todos os pontos em que os valores extremos do ZigZag foram atualizados. Neste caso, a imagem fica ainda mais completa. Agora vamos considerar o código do indicador. Nós vamos nos deter apenas nos recursos e funções básicas.

 Fig. 6. Recebendo os dados dentro dos três segmentos especificados

Autor: Anatoli Kazharski

[Excluído]  
Mas não vamos manchar o sagrado (MO), incluindo a econometria, com todos os tipos de zigágulas :). Isso não é sério. Há um nível completamente diferente de abstrações aqui.
 

Os trabalhos anteriores do autor sobre visualização são conhecidos e interessantes.

A ideia de levar em conta o spread ao criar indicadores está absolutamente correta, pois é um parâmetro de preço importante que, por algum motivo, não é levado em conta nos indicadores clássicos.

Quanto ao indicador ZigZag, mesmo em sua versão, é possível ver claramente nas imagens (visualização) que a tendência (se entendi corretamente - a linha verde) às vezes tem um atraso crítico.

O motivo é que, se usarmos a tendência como um critério de negociação (caso contrário, por que usar o indicador ZigZag), devemos levar em conta não apenas o spread, mas também os fatores dinâmicos e, em primeiro lugar, a amplitude das emissões para trás (a ser levada em conta ao construir uma tendência). Entretanto, esse é um erro da análise tradicional na determinação de tendências em geral.

É interessante ver os resultados do teste de seu Expert Advisor (provavelmente os veremos nas sequências do artigo).

O artigo é útil, e a visualização é clara como sempre. Obrigado ao autor por seu trabalho.

 

O ZigZag permite que você encontre abstrações de qualquer nível de complexidade.

O próximo artigo mostrará exemplos de como isso pode ser usado.

 

O artigo precisa substituir o arquivo de arquivos. Foram feitas algumas correções críticas.

Arquivos anexados:
Files.zip  19 kb
 
Receio que isso não esteja correto
low_ask_buffer[i]  =low[i]+(spread[i]*_Point);


Execute-o em ticks reais para comparação.

 

fxsaber:
Боюсь, это неверно

low_ask_buffer[i]  =low[i]+(spread[i]*_Point);

Execute-o em carrapatos reais para comparação.

Eu concordo. Não é fato que o spread mínimo tenha sido exatamente quando o preço da oferta atingiu seu nível mínimo.

E os dados históricos (em barras) contêm exatamente o spread mínimo.

Portanto, precisamos obter ticks reais - CopyTicks(), e determinar a diferença mínima (ask-bid) no mínimo bid mínimo ask (Low Ask).

É isso que você queria dizer?

 
Anatoli Kazharski:

De acordo. Não é fato que o spread mínimo foi exatamente quando o preço da oferta atingiu seu nível mínimo.

E os dados históricos (em barras) contêm exatamente o spread mínimo.

Portanto, precisamos obter ticks reais - CopyTicks(), e determinar a diferença mínima (ask-bid) no mínimo bid mínimo ask (Low Ask).

É isso que você queria dizer?

Provavelmente, o CopyTicks é um pouco caro para isso. É mais fácil simplesmente perseguir os ticks reais e construir um ZigZag por ticks. Falando francamente, não entendo por que você decidiu se envolver na execução do indicador ZZ.... De qualquer forma, você não precisa de visualização ao escrever um TS.

Uma vez postei exatamente o mesmo ZZ diretamente em um Expert Advisor. Ele funciona rapidamente e provavelmente não é necessário mais nada.

 

Se você quiser ter um Low Ask real, adicione esse código ao indicador.

Parâmetro externo para ativar o modo:

input bool  RealTicksMode  =false;   // Modo de ticks reais

Método para obter a venda mínima a partir de dados de ticks reais:

//+------------------------------------------------------------------+
//| Retorna o preço mínimo de venda a partir de dados de ticks.
//+------------------------------------------------------------------+
double GetLowAsk(const int i,const datetime &time[])
  {
//--- Sair se o modo de ticks reais estiver desativado
   if(!RealTicksMode)
      return(0.0);
//--- Excluir a última barra (atual)
   if(i>=g_rates_total)
      return(0.0);
//---
   MqlTick  ticks[];
   double   low_ask  =0.0;
   datetime end_time =time[i]+PeriodSeconds();
//--- Obter ticks no intervalo especificado
   int copied_total=CopyTicksRange(_Symbol,ticks,COPY_TICKS_ALL,(ulong)time[i]*1000,(ulong)end_time*1000);
   if(copied_total>0)
     {
      low_ask=ticks[0].ask;
      for(int k=1; k<copied_total; k++)
        {
         if(ticks[k].ask<low_ask)
            low_ask=ticks[k].ask;
        }
     }
//---
   return(low_ask);
  }

//---

Se não for obtida a venda mínima, será usado o spread mínimo.

//+------------------------------------------------------------------+
//| Preenche os buffers dos indicadores High Bid e Low Ask
//+------------------------------------------------------------------+
void FillAskBidBuffers(const int i,const datetime &time[],const double &high[],const double &low[],const int &spread[])
  {
//--- Saia se você não tiver alcançado a data de início
   if(time[i]<first_date)
      return;
//--- Obtenha a solicitação mínima a partir dos dados de ticks
   double low_ask=GetLowAsk(i,time);
//--- Salvar os valores
   high_bid_buffer[i] =high[i];
   low_ask_buffer[i]  =(low_ask>0)? low_ask : low[i]+(spread[i]*_Point);
  }
 

Resultado:


 
fxsaber:

Sinceramente, não entendo por que você decidiu se apegar ao design do indicador do ZZ.....

Para estudo e pesquisa.