Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1513

 
frank2020:

Sou novo em programação, não sou muito bom, você pode refazê-la e torná-la disponível para download ???

este é o download.
 
MakarFX:
Faça o download.
Obrigado pela resposta, eu baixei, nada mudou. Eu queria que o canal estivesse em toda a história do gráfico, não em um pequeno segmento????
 
frank2020:
Obrigado pela resposta, fiz o download, mas nada mudou. Eu queria que o canal estivesse em toda a história do gráfico, não em um pequeno segmento????
Eu não entendo a MQL5
 
Igor Makanu:

se você quiser se lembrar, é melhor lançar um evento personalizado no OnChartEvent(), é mais conveniente, imho

é assim, eventos entre quaisquer gráficos dentro do terminal

 
Ctrl+N
 

Olá. Não consigo descobrir como codificar o cálculo das faixas do oscilador do acelerador após atravessar dois MA, preciso colocar uma linha vertical na 3ª faixa após fechar a 2ª (após atravessar o MA). Entendo que provavelmente você me enviará para estudar o livro de referência. Mas talvez você sugira pelo menos uma solução. Eu ficaria grato pela ajuda.

void OnTick()
  {
      //обновлять данные всех индикаторов раз в период
   if(Update_Time != iTime(NULL,0,0))
     {
      Update_Time = iTime(NULL,0,0); //перезаписываем значение переменной для хранения времени текущей свечи

      //импорт данных индикатора Moving Averages.
      double FastMA_1 = iMA(NULL,0,FastMA,0,FastMA_method,PRICE_CLOSE,1);
      double FastMA_2 = iMA(NULL,0,FastMA,0,FastMA_method,PRICE_CLOSE,2);
      double SlowMA_1 = iMA(NULL,0,SlowMA,0,SlowMA_method,PRICE_CLOSE,1);
      double SlowMA_2 = iMA(NULL,0,SlowMA,0,SlowMA_method,PRICE_CLOSE,2);
      double   ac     = iAC(NULL,0,1);
      
         //---FastMA_1 выше SlowMA_1, т.е. произошло пересечение снизу вверх
                 
      if(FastMA_1 > SlowMA_1 && FastMA_2 <= SlowMA_2)
        {

//---Не пойму как сделать подсчет полос в iAC после пересечения МА...         
         if((ac[2]>0.0) && (ac[1]>ac[2]))
           {
             VLineCreate(0,"VLine",0,0,clrRed,STYLE_SOLID,1,false,true,true,0); 
           }
        }
     }
  }

Anexei uma captura de tela do gráfico para representação visual:

Arquivos anexados:
 
DYM:

Olá. Não consigo descobrir como codificar o cálculo das faixas do oscilador do acelerador após atravessar dois MA, preciso colocar uma linha vertical na 3ª faixa após fechar a 2ª (após atravessar o MA). Entendo que provavelmente você me enviará para estudar o livro de referência. Mas talvez você sugira pelo menos uma solução. Eu ficaria grato pela ajuda.

Anexei uma captura de tela do gráfico para representação visual:

double   ac1     = iAC(NULL,0,1);

double   ac2     = iAC(NULL,0,2);
 
DYM:

Olá. Não consigo descobrir como codificar o cálculo das faixas do oscilador do acelerador após atravessar dois MA, preciso colocar uma linha vertical na 3ª faixa após fechar a 2ª (após atravessar o MA). Entendo que provavelmente você me enviará para estudar o livro de referência. Mas talvez você sugira pelo menos uma solução. Eu ficaria grato pela ajuda.

Anexei uma captura de tela do gráfico para representação visual:

Verifique a passagem de MA não em 1 e 2 barras, mas em 3 e 4. E se houver cruzamento, verifique os valores AO em 1 e 2 barras.

 

Muito obrigado. Foi difícil, mas acho que consegui resolver isso. Aqui está o que eu tenho:

void OnTick()
  {


      //импорт данных индикатора Moving Averages.
      double FastMA_1 = iMA(NULL,0,FastMA,0,0,PRICE_CLOSE,1);
      double FastMA_2 = iMA(NULL,0,FastMA,0,0,PRICE_CLOSE,2);
      double SlowMA_1 = iMA(NULL,0,SlowMA,0,0,PRICE_CLOSE,1);
      double SlowMA_2 = iMA(NULL,0,SlowMA,0,0,PRICE_CLOSE,2);
      double   ac     = iAC(NULL,0,0);
      double   ac1     = iAC(NULL,0,1);
      double   ac2     = iAC(NULL,0,2);
      
      
      
         //---Быстрая скользящая средняя (меньше периода) на первой свече выше медленной, т.е. произошло пересечение снизу вверх
      if(FastMA_1 > SlowMA_1 && FastMA_2 <= SlowMA_2)
        {
         
         if((ac>0.0) && (ac>ac1) && (ac1>ac2))
           {
             VLineCreate(0,"VLine",0,0,clrLimeGreen,STYLE_SOLID,1,false,true,true,0);
           }
        }
        
        //---Быстрая скользящая средняя (меньше периода) на первой свече ниже медленной, т.е. произошло пересечение cверху вниз
      if(FastMA_1 < SlowMA_1 && FastMA_2 >= SlowMA_2)
        {
         
         if((ac<0.0) && (ac<ac1) && (ac1<ac2))
           {
             VLineCreate(0,"VLine",0,0,clrOrangeRed,STYLE_SOLID,1,false,true,true,0);
           }
        }
  }

Tirei uma foto de tela:

Arquivos anexados:
 
DYM:

Muito obrigado. Foi difícil, mas acho que consegui resolver isso. Aqui está:

Tirei uma foto de tela:

esperar pelo erro 4200
Razão: