Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1513

 
frank2020:

Sono nuovo nella programmazione, non sono molto bravo, potete rifarlo e renderlo disponibile per il download?

questo è il download.
 
MakarFX:
Scaricalo.
Grazie per la risposta, l'ho scaricato, non è cambiato nulla. Volevo che il canale fosse su tutta la storia del grafico, non su un breve segmento????
 
frank2020:
Grazie per la risposta, l'ho scaricato, ma non ha cambiato nulla, volevo che il canale fosse su tutta la storia del grafico, non su un breve segmento????
Non capisco MQL5
 
Igor Makanu:

se volete ricordarvi, è meglio lanciare un evento personalizzato in OnChartEvent(), è più conveniente, imho

è così, eventi tra qualsiasi grafico all'interno del terminale

 
Ctrl+N
 

Salve. Non riesco a capire come codificare il calcolo delle bande di Accelerator Oscillator dopo aver attraversato due MA, ho bisogno di mettere una linea verticale sulla terza banda dopo aver chiuso la seconda (dopo aver attraversato la MA). Capisco che probabilmente mi manderete a studiare il libro di riferimento. Ma forse suggerirà almeno una soluzione. Sarei grato per l'aiuto.

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

Ho allegato uno screenshot del grafico per una rappresentazione visiva:

File:
 
DYM:

Salve. Non riesco a capire come codificare il calcolo delle bande di Accelerator Oscillator dopo aver attraversato due MA, ho bisogno di mettere una linea verticale sulla terza banda dopo aver chiuso la seconda (dopo aver attraversato la MA). Capisco che probabilmente mi manderete a studiare il libro di riferimento. Ma forse suggerirà almeno una soluzione. Sarei grato per l'aiuto.

Ho allegato uno screenshot del grafico per una rappresentazione visiva:

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

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

Salve. Non riesco a capire come codificare il calcolo delle bande di Accelerator Oscillator dopo aver attraversato due MA, ho bisogno di mettere una linea verticale sulla terza banda dopo aver chiuso la seconda (dopo aver attraversato la MA). Capisco che probabilmente mi manderete a studiare il libro di riferimento. Ma forse suggerirà almeno una soluzione. Sarei grato per l'aiuto.

Ho allegato uno screenshot del grafico per una rappresentazione visiva:

Controlla l'incrocio MA non su 1 e 2 barre, ma su 3 e 4. E se crossover, controlla i valori AO su 1 e 2 barre.

 

Grazie mille. È stato difficile, ma credo di aver risolto il problema. Ecco qui:

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

Ho fatto uno screenshot:

File:
 
DYM:

Grazie mille. È stato difficile, ma credo di aver risolto il problema. Ecco cosa ho ottenuto:

Ho fatto uno screenshot:

attendere l'errore 4200