Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1513

 
frank2020:

Soy nuevo en la programación, no soy muy bueno, ¿puedes rehacerlo y ponerlo a disposición para su descarga?

esta es la descarga.
 
MakarFX:
Descárgalo.
Gracias por la respuesta, lo he descargado, no ha cambiado nada. Quería que el canal estuviera en toda la historia del gráfico, no en un segmento corto????
 
frank2020:
Gracias por la respuesta, lo he descargado, pero no ha cambiado nada. Quería que el canal estuviera en toda la historia del gráfico, no en un segmento corto????
No entiendo MQL5
 
Igor Makanu:

si quieres recordarte, es mejor lanzar un evento personalizado en OnChartEvent(), es más conveniente, imho

así es, los eventos entre cualquier carta dentro de la terminal

 
Ctrl+N
 

Hola. No consigo averiguar cómo codificar el cálculo de las bandas del Accelerator Oscillator después de cruzar dos MAs, necesito poner una línea vertical en la 3ª banda después de cerrar la 2ª (después de cruzar la MA). Entiendo que probablemente me enviarán a estudiar el libro de referencia. Pero tal vez sugiera al menos una solución. Le agradecería que me ayudara.

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); 
           }
        }
     }
  }

Adjunto una captura de pantalla del gráfico para su representación visual:

Archivos adjuntos:
 
DYM:

Hola. No consigo averiguar cómo codificar el cálculo de las bandas del Accelerator Oscillator después de cruzar dos MAs, necesito poner una línea vertical en la 3ª banda después de cerrar la 2ª (después de cruzar la MA). Entiendo que probablemente me enviarán a estudiar el libro de referencia. Pero tal vez sugiera al menos una solución. Le agradecería que me ayudara.

Adjunto una captura de pantalla del gráfico para su representación visual:

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

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

Hola. No consigo averiguar cómo codificar el cálculo de las bandas del Accelerator Oscillator después de cruzar dos MAs, necesito poner una línea vertical en la 3ª banda después de cerrar la 2ª (después de cruzar la MA). Entiendo que probablemente me enviarán a estudiar el libro de referencia. Pero tal vez sugiera al menos una solución. Le agradecería que me ayudara.

Adjunto una captura de pantalla del gráfico para su representación visual:

Compruebe el cruce de MA no en 1 y 2 barras, sino en 3 y 4. Y si se cruza, comprueba los valores de AO en 1 y 2 barras.

 

Muchas gracias. Fue difícil, pero creo que lo solucioné. Aquí está:

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);
           }
        }
  }

Hice una captura de pantalla:

Archivos adjuntos:
 
DYM:

Muchas gracias. Ha sido difícil, pero creo que lo he solucionado. Aquí está:

Hice una captura de pantalla:

esperar al error 4200
Razón de la queja: