Indicadores: Fractal_TL

 

Fractal_TL:

Indicador para desenho automático de linhas de tendência em fractais num determinado período.


Autor: Almat Kaldybay

 

Olá.

Estou interessado em seu indicador. Mas preciso que as linhas "TL_Support" e "TL_Resistance" sejam construídas não pelos dois últimos fractais, mas pelo último e pelo próximo mais alto/baixo.

Fiz alterações no código. Ele funciona bem on-line, mas no testador ele se recusa a funcionar. Ele faz a primeira construção e congela. Você poderia me dizer como fazer para que o indicador com as alterações funcione no testador do MT5?

Citarei o código abaixo, as alterações feitas serão destacadas em amarelo.

//+------------------------------------------------------------------+
//| Busca de valores fractais|
//+------------------------------------------------------------------+
// --- Procurar o primeiro fractal superior
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- se for um valor não vazio, encerre o loop
      if(FractalUp_base[n]!=EMPTY_VALUE)
         break;
     }
   UpFractal_1_base=FractalUp_base[n];// --- escrever o valor do preço do primeiro fractal na variável
   UpperFractal_1_base=n;// --- escrever o índice do primeiro fractal na variável
                         // --- 
// --- Pesquisar o segundo fractal superior
   for(n=UpperFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- se for um valor não vazio, encerre o loop
      if(
         FractalUp_base[n]!=EMPTY_VALUE
         &&
         FractalUp_base[n]>UpFractal_1_base
         )
          break;
     }
   UpFractal_2_base=FractalUp_base[n]; // --- escreva o valor do preço do segundo fractal na variável
   UpperFractal_2_base=n;// --- escrever o índice do segundo fractal na variável
                         // ---
// --- Procure o primeiro fractal inferior
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- se for um valor não vazio, encerre o loop
      if(FractalDown_base[n]!=EMPTY_VALUE)
         break;
     }
   LowFractal_1_base=FractalDown_base[n];// --- escrever o valor do preço do primeiro fractal na variável
   LowerFractal_1_base=n;// --- escrever o índice do primeiro fractal na variável
                         // --- 
// --- Pesquisar o segundo fractal inferior
   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- se for um valor não vazio, encerre o loop
      if(
         FractalDown_base[n]!=EMPTY_VALUE
         && 
         FractalDown_base[n]<LowFractal_1_base
         )
          break;
     }
   LowFractal_2_base=FractalDown_base[n];// --- escreva o valor do preço do segundo fractal na variável
   LowerFractal_2_base=n;// --- escrever o índice do segundo fractal na variável
//--- 
 

Não verifiquei isso pessoalmente, mas tente adicionar uma condição melhor para desenhar as próprias linhas, onde os objetos são criados. Por exemplo, para uma linha de suporte:

//--- Criar linha de suporte
if (LowFractal_1_base<LowFractal_2_base)//se o preço do primeiro fractal encontrado for menor que o preço do segundo fractal encontrado, desenhe uma linha
{
   ObjectCreate(0,"TL_Support",OBJ_TREND,0,LowFractalTime_2_base[0],LowFractal_2_base,LowFractalTime_1_base[0],LowFractal_1_base);
   ObjectSetInteger(0,"TL_Support",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"TL_Support",OBJPROP_COLOR,Support_Color);
   ObjectSetInteger(0,"TL_Support",OBJPROP_STYLE,Support_Style);
   ObjectSetInteger(0,"TL_Support",OBJPROP_WIDTH,Support_Width);
}
 
Almat Kaldybay:

Não verifiquei isso pessoalmente, mas tente adicionar uma condição melhor para desenhar as próprias linhas, onde os objetos são criados. Por exemplo, para uma linha de suporte:

Boa tarde, obrigado por seu comentário. A ideia é boa, mas para linhas de suporte a condição deve ser (de acordo com a lógica que estou tentando implementar) o oposto, a mínima do segundo fractal encontrado deve ser menor do que a do primeiro, todos os candidatos ao segundo fractal cuja mínima seja maior do que a do primeiro devem ser ignorados

Além disso, se você seguir esse caminho, terá que reprojetar o bloco de desenho, na verdade, e tudo o mais depois disso também. O belo código perderá sua elegância, na minha opinião.

Há mais um fator pelo qual escrevi um comentário nesta postagem: o programa funciona perfeitamente bem, tudo é desenhado perfeitamente em cotações reais, dentro do prazo, sem bugs, mas no testador ele não quer fazer isso. E quando algo não está claro, isso me alarma e me estressa, por isso quero descobrir o que é.

O arquivo do código editado está anexado. Ficarei extremamente grato se colegas mais competentes apontarem o motivo desse comportamento do testador.

Arquivos anexados:
Fractal_TL.mq5  21 kb
 
Sergey Voytsekhovsky:

Boa tarde, obrigado por seu comentário. A ideia é boa, mas para linhas de suporte a condição deve ser (de acordo com a lógica que estou tentando implementar) o oposto, a mínima do segundo fractal encontrado deve ser menor que a do primeiro, todos os candidatos ao segundo fractal, cuja mínima é maior que a do primeiro, devem ser ignorados

Além disso, se você seguir esse caminho, terá que redesenhar o bloco de desenho, na verdade, e tudo o mais depois disso também. Na minha opinião, o código perderá sua elegância.

Há mais um fator pelo qual escrevi um comentário nesta postagem: o programa funciona perfeitamente bem, tudo é desenhado perfeitamente em cotações reais, dentro do prazo, sem bugs, mas no testador ele não quer. E quando algo não está claro, isso me deixa alarmado e estressado, por isso quero resolver o problema.

O arquivo do código editado está anexado. Ficarei extremamente grato se colegas mais competentes apontarem o motivo desse comportamento do testador.

Aparentemente, há um conflito com o array FractalDown_base[]. É estranho que isso não ocorra com os fractais superiores. De qualquer forma, modifiquei um pouco sua comparação:

   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- se for um valor não vazio, encerre o loop
      if(FractalDown_base[n]!=EMPTY_VALUE 
      && FractalDown_base[n]<Low_base_tf[LowerFractal_1_base]
      )
      break;
     }

Ou seja, adicionei a definição de High e Low e já comparei com eles. Dessa forma, tudo funciona bem no testador. O arquivo modificado está anexado.

Arquivos anexados:
 
Almat Kaldybay:

Aparentemente, há um conflito com a matriz FractalDown_base[]. Estranhamente, isso não ocorre com os fractais superiores. De qualquer forma, alterei um pouco sua comparação:

Ou seja, adicionei a definição de High e Low e já comparei com eles. Dessa forma, tudo funciona bem no testador. O arquivo modificado está anexado.

Boa tarde, obrigado por seu tempo e atenção. Fiz o upload do arquivo anexado. Infelizmente, o testador ainda funciona incorretamente, o indicador faz a primeira construção e não reconstrói mais as linhas de resistência e suporte, não exibe fractais. Para testá-lo, eu produzi High_base_tf[UpperFractal_1_base] e Low_base_tf[LowerFractal_1_base] no comentário. Ele conta corretamente, tudo está bem com a lógica. Aparentemente, a falha está em algum lugar do desenho.

A varredura da tela, que mostra que novos fractais são formados, mas as linhas não são reconstruídas, está anexada no link.

***

Lá você também pode ver as linhas Low_base_tf[LowerFractal_1_base] e seus valores, que podem ser comparados com os valores de LowFractal_1_base (para valores baixos, para valores altos de forma semelhante). Tudo conta corretamente, mas NÃO há novas construções.

 
Sergey Voytsekhovsky:


A varredura da tela, que mostra que novos fractais foram formados, mas as linhas não foram reorganizadas, está anexada no link.

***


Infelizmente, o link foi removido.

 
Sergey Voytsekhovsky:

Infelizmente, o link foi removido.

Os links para sites de terceiros são proibidos.

 
Vladimir Karputov:

Não são permitidos links para sites de terceiros.

Como posso publicar uma digitalização da tela do testador? Só consigo enviá-la em PDF, e sei que esse formato não é aceito no fórum.

 
Sergey Voytsekhovsky:

Como posso publicar uma digitalização da tela do testador? Só consigo enviá-la em PDF, e sei que esse formato não é aceito no fórum.

Uma captura de tela é uma imagem. O que o PDF tem a ver com isso? Salve a captura de tela como uma imagem png e cole a imagem em sua postagem.

 
Vladimir Karputov:

Os links para sites de terceiros são proibidos.

Vladimir, boa noite. Você é um programador experiente, a julgar por suas publicações e trabalhos. Poderia me orientar sobre a essência deste tópico - o programa não funciona no testador, mas funciona corretamente nos gráficos on-line. O autor não responde, aparentemente está ocupado.