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

 
azolotta:

Grazie, questo ha davvero risolto il problema!!!

Se non ti dispiace, puoi dirmi che tipo di costruzione dovrebbe essere aggiunta per far sì che non visualizzi due alti/bassi in fila, ma una variabilità (alto-basso-alto)? Capisco che ho bisogno di un controllo, come "se il precedente elemento dell'array era alto, non includere il secondo alto consecutivo nell'array, e aspettare il basso", ma come dovrei farlo?

Ve l'ho già spiegato.

 
DanilaMactep:

Buon pomeriggio a tutti. Ho il controllo, ma ho dimenticato di testarlo. Meno male che me ne sono ricordato oggi... Ecco questo controllo sul livello del mod stop

Quando testato questo controllo dà gli errori mostrati nello screenshot qui sotto

E la cosa interessante è che, come mi è stato consigliato, ho aggiunto a questo controllo il dominio di 1,5 come segue


Questa aggiunta non risolve il problema apparso test dà errori come nello screenshot qui sotto.

Se questo controllo sul livello di arresto del mod viene commentato, non ci sono errori. Qual è l'errore sul controllo, per favore avvisate? Senza di esso, non è possibile avviare il graal sul mondo reale - sarà bannato immediatamenteL O_o

Penso che l'errore non sia nel test, ma dove lo hai prescritto

e anche qui potete rimuovere "*1,5"

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5)
 
DanilaMactep:

Buon pomeriggio a tutti. Ho il controllo, ma ho dimenticato di testarlo. Meno male che me ne sono ricordato oggi... Ecco questo controllo del livello di arresto del mod

Quando testato questo controllo dà gli errori mostrati nello screenshot qui sotto

E la cosa interessante è che come mi è stato consigliato ho aggiunto a questo controllo il dominio di 1,5 come segue


Questa aggiunta non risolve il problema apparso test dà errori come nello screenshot qui sotto.

Se questo controllo sul livello di arresto del mod viene commentato, non ci sono errori. Qual è l'errore sul controllo, per favore avvisate? Senza di esso, non è possibile avviare il graal sul mondo reale - sarà bannato immediatamenteL O_o

Controllate che restituisca un livello di stop, spesso è 0.

   int    Stoplevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
   int    Spread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   if (Stoplevel == 0) Stoplevel = 2 * Spread;

   

Così come questo.

 
Alekseu Fedotov:

Controllate cosa restituisce il livello di stop, spesso è 0.

Come questo.

Non ne ha bisogno, è "se meno di stoplevel".

 
DanilaMactep:

Buon pomeriggio a tutti.

Errore grossolano... non l'ho visto subito.

if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
 {
  tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1,5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
 }

Dovrebbe essere DOTS.

 
azolotta:
Non per visualizzare due alti/bassi di fila, ma per essere variabile (alto-basso-alto)

Puoi farlo in modo semplice. Dichiarare una variabile globale e cambiarla a seconda degli eventi.

int direction=0;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {


   for(n=0; n<=limit; n++)
     {
      if(direction>=0 && ((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3])))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
         direction=-1;
        }
      else
         if(direction<=0 && ((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3])))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
            direction=1;
           }
      }
.......

Negli indicatori, usate la funzione OnCalculate e tutte le sue variabili.

E Start è già fuori moda:)

 
Aleksei Stepanenko:

Puoi farlo in modo semplice. Dichiarare una variabile globale e cambiarla a seconda degli eventi.

Negli indicatori, usate la funzione OnCalculate e tutte le sue variabili.

E Start è fuori moda:)

Grazie, è un modo figo).

l'ho preso suOnCalculate, ci sarò dentro))

 
Aleksei Stepanenko:

Puoi farlo in modo semplice. Dichiarare una variabile globale e cambiarla a seconda degli eventi.

Negli indicatori, usate la funzione OnCalculate e tutte le sue variabili.

E Start è già fuori moda:)

non funzionano, il nuovo alto/basso non li prenderà in considerazione
 

Buon pomeriggio. Quando chiamo l'indicatore nel mio Expert Advisor, c'è un errore indicato nella casella, perché si verifica? E non sempre. Funziona bene su

terminale, funziona bene.


 
Sergey Fionin:

Buon pomeriggio. Quando chiamo l'indicatore nel mio Expert Advisor, c'è un errore indicato nella casella, perché si verifica? E non sempre. Funziona bene su

terminale, funziona bene.


Questa è una violazione di scrittura, un divieto di scrittura del sistema.
Motivazione: