Domande per principianti in MQL5. I professionisti non passano. - pagina 7

 
Artyom Trishkin:

DRAW_NONE == 0

DRAW_LINE == 1

Quindi hai qualcos'altro da qualche parte. Dovrebbe funzionare anche per te.

Non posso ancora dirvi qual è, ma non sempre funziona.
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
Artyom Trishkin:

No, non è necessario. Tutto viene fatto una volta al limite>1. Questa è la prima esecuzione e il caricamento della storia. E se avete smoothing period_sm=10, allora il limite in questo caso dovrebbe essere inferiore di 10. In modo corrispondente:

if(limit>1)
  {
   limit=rates_total-period_sm-1;
   ArrayInitialize(Buffer,InitValue);
  }

InitValue - valore per inizializzare il buffer - 0 o EMPTY_VALUE - come appropriato. O -100500 ...

come suggerisci nel tuo esempio - questo non è il modo giusto per farlo - o, se non ti capisci, dai una spiegazione dettagliata.

Decidere su come chiamare "Questa è la prima esecuzione e la storia di caricamento" -- è fatto da prev_calculated

limite (non è chiaro quale sia il limite nel vostro caso) - se è il numero di barre, da cui inizia il ricalcolo - allora il limite qui può essere più di 1, per esempio, 5 minuti di assenza di connessione - alla comparsa della connessione su M1 limite=5, e non c'è bisogno di ricalcolare l'indicatore dall'inizio

potete vedere negli esempi di terminale standard come usare tutto.

esempi dall'indicatore "Orsi":

MQL4 (numerazione delle barre dall'inizio alla fine):

   int limit=rates_total-prev_calculated;
//---
   if(rates_total<=InpBearsPeriod)
      return(0);
//---
   if(prev_calculated>0)
      limit++;
   for(int i=0; i<limit; i++)

MQL5 (numerazione delle barre dalla fine all'inizio):

   if(prev_calculated<InpBearsPeriod)
      limit=InpBearsPeriod;
   else limit=prev_calculated-1;
//--- the main loop of calculations
   for(i=limit;i<rates_total && !IsStopped();i++)
 

Ciao a tutti. Avevo un conto demo su MT-5. Ho perso la mia password di accesso all'MT-5 dopo aver reinstallato il mio Windows. Ora l'ho registrato nel terminale web

Il mio conto demo MT-5. Tutto ok. Ho messo un nuovo login e una nuova password al normale terminale di casa MT-5. Tutto funziona, solo all'apertura del nuovo ordine F9,

in una finestra di nuovo ordine - i pulsanti Compra e Vendi non sono attivi. Non posso fare un ordine. Per favore, cosa dovrei fare?

Mi dispiace, ma devo chiederlo.

Non ho ordini, grazie.

 
Shara1:

Ciao a tutti. Avevo un conto demo su MT-5. Ho perso la mia password di accesso all'MT-5 dopo aver reinstallato il mio Windows. Ora l'ho registrato nel terminale web

Il mio conto demo MT-5. Tutto ok. Ho messo un nuovo login e una nuova password al normale terminale di casa MT-5. Tutto funziona, solo all'apertura del nuovo ordine F9,

in una finestra di nuovo ordine - i pulsanti Compra e Vendi non sono attivi. Non posso fare un ordine. Per favore, cosa dovrei fare?

Mi dispiace, ma devo chiederlo.

Grazie.

Ho capito il problema. Avevo 0,00 nella finestra del nuovo ordine F9 e il volume era 0,00. Ho messo 0,01 e ha funzionato.

 

Ciao, per favore consigliatemi, ci sono queste stringhe in alcuni Expert Advisors.

  double highest=DBL_MIN,lowest=DBL_MAX;

Domanda - a cosa servono le variabili equiparate a queste costanti DBL_MIN, DBL_MAX?

 
refounder83:

Ciao, per favore consigliatemi, ci sono queste stringhe in alcuni Expert Advisors.

La mia domanda è: a cosa servono le variabili equiparate a queste costanti DBL_MIN e DBL_MAX?

Per confrontarli con i dati reali che sono ovviamente meno di DBL_MAX e ovviamente più di DBL_MIN.

Per esempio:

double x=DBL_MIN;
int total=ArraySize(array);
for(int i=0; i<total; i++)
  {
   double y=array[i];  
   if(y>x) x=y;
  }
Print("x=",DoubleToString(x,Digits()));
 
Grazie, capisco).
 

Questa procedura è fatta per convertire il tempo del server in secondi?

datetime time=TimeTradeServer()+60*60*24;
   
  
 
refounder83:

Questa procedura è fatta per convertire il tempo del server in secondi?

Questo è il "tempo del server" più un giorno (60 secondi * 60 minuti * 24 ore)

Potete usare PeriodSeconds()

Print("PeriodSeconds(PERIOD_D1)=",PeriodSeconds(PERIOD_D1),", PeriodSeconds(PERIOD_H1)*24=",PeriodSeconds(PERIOD_H1)*24,", 60*60*24=",60*60*24);
Motivazione: