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

 
Alexey Viktorov:
Il tempo attuale di 17:08 mostra 33. Quindi il numero della barra con un tempo di 01:00 sarà 32.
datetime t=StringToTime("01:00");

Questa non è la soluzione corretta. Se si inizia il test alle 00:00, questa variante dà 0 barre, e ci dovrebbero essere 46 barre M30 prima dell'ora 01:00 più vicina.

 
Nauris Zukas:

Decisione sbagliata. Se si inizia il test alle 00.00, questa variante produce 0 barre, e ci dovrebbero essere 46 barre M30 prima delle ore 01.00 più vicine.

Vi ho dato un modo di pensare, e dovreste sapere come fare la barra 01:00 più vicina alle 00:59 dei minuti. Non c'è niente di difficile.

 
Alexey Viktorov:

Ti ho dato una linea di pensiero, e come fare la barra più vicina alle 01:00 alle 00:59 dei minuti dipende da te. Non c'è niente di difficile.

In ogni caso dovrete usare il ciclo e cercare il tempo più vicino, non vedo altro modo.

 
Alexey Viktorov:
L'unico problema è che non riempio mai la mia cella di memoria con roba inutile come quello che il valore ottenuto sarà uguale, data una barra con un tempo specificato o meno di 1. Controllo ogni volta.


Non ho idea di come trovare il tempo specificato più vicino per le barre senza un ciclo. Se non c'è niente di complicato, puoi mostrarmi la funzione?

 

Cari esperti, potreste per favore consigliarmi come estrarre i risultati dei test in un file in mt-4?

per un ulteriore trattamento come descritto qui https://www.mql5.com/ru/articles/1467?

Автоматическая оптимизация торгового робота в процессе реальной торговли
Автоматическая оптимизация торгового робота в процессе реальной торговли
  • 2007.04.16
  • Igor Malcev
  • www.mql5.com
В статье описана и представлена библиотека функций, позволяющая проводить оптимизацию входных параметров советника, запуская оптимизацию непосредственно из советника.
 
Nauris Zukas:


Non ho idea di come trovare il tempo specificato più vicino per le barre senza un ciclo. Se non c'è niente di complicato, puoi mostrarmi la funzione?

..... solo senza parole....

Quanto è difficile indovinare che se il tempo è inferiore a quello che stai cercando, allora devi sottrarre il tempo che stai cercando di 24 ore.

 string st = "1:00";// можно и так писать "01:00"
 datetime t = StringToTime(st);

 if(TimeCurrent() < t)
  {
   MqlDateTime mqlDateTime; 
   TimeToStruct(t, mqlDateTime);
   mqlDateTime.day -= 1;
   t = StructToTime(mqlDateTime);
  }
 int b = Bars(_Symbol, PERIOD_M30, t, TimeCurrent());

Fatto senza tener conto delle uscite e dei controlli per eventuali errori di esecuzione. Altre esecuzioni sono possibili, ed è per questo che cerco di non scrivere codici di esempio. Oggi ho deciso di farlo, domani potrei trovare un'altra variante più conveniente.

 
Alexey Viktorov:

Quanto è difficile indovinare che se il tempo è inferiore a quello che stai cercando, allora devi sottrarre il tempo che stai cercando di 24 ore.

È difficile da indovinare per questo motivo:

Alexey Viktorov:

Fatto senza tener conto dei fine settimana e dei controlli per possibili errori di esecuzione.

Quanto deve essere più difficile il codice per ottenere un risultato desiderabile senza errori alla fine! Nel codice ci sono i fine settimana e i giorni festivi. Grazie per i consigli e gli esempi, ho imparato qualcosa di nuovo, mi tornerà utile da qualche parte, ma finora credo che la mia versione sia la più semplice e affidabile.

 
Nauris Zukas:

È difficile indovinare solo per questo:

Quanto più complicato deve essere il codice per ottenere il risultato desiderato senza errori alla fine! Ci sono fine settimana e giorni festivi in cui il mercato apre ad un orario diverso. Grazie per i consigli e gli esempi, ho imparato qualcosa di nuovo, sarà sicuramente utile, ma finora vedo che la mia versione è la più semplice e affidabile.

Perché no? E quell'opzione ha diritto alla vita. E mi ha anche interessato. Con alcune correzioni, abbiamo ottenuto la funzione che restituisce il numero di barra di un tempo e periodo specificato.

int findBar(string strTime, ENUM_TIMEFRAMES period = PERIOD_CURRENT)
 {
  MqlDateTime mqlTime, mqlFindTime;
  TimeToStruct(StringToTime(strTime), mqlFindTime);
  datetime arrTime[];
  int copy = PeriodSeconds(PERIOD_D1)/PeriodSeconds(period);
  CopyTime(_Symbol, period, 0, copy, arrTime);
  ArraySetAsSeries(arrTime, true);
   for(int i = 0; i < copy; i++)
    {
     TimeToStruct(arrTime[i], mqlTime);
      if(mqlTime.hour == mqlFindTime.hour && mqlTime.min <= mqlFindTime.min)
      return(i);
    }
  return(-1);
}/********************************************************************/

.

 
Alexey Viktorov:

Perché no? E quell'opzione ha diritto alla vita. E mi ha anche interessato. Con alcune correzioni, la funzione restituisce il numero di barra del tempo e del periodo specificato.

.

Grazie mille!
Lei ha menzionato la "cellula di memoria", la mia conoscenza su questo argomento è finora limitata. Per quanto ho capito, influisce sulla velocità dei test dell'Expert Advisor? È in qualche modo misurato o è solo determinato dalla velocità dei test?

 
Nauris Zukas:

Grazie mille!
Hai parlato di "cellula di memoria", la mia conoscenza è limitata al momento. Per quanto ho capito, influisce sulla velocità dei test di Expert Advisor? È in qualche modo misurato o è solo determinato dalla velocità dei test?

Stavo parlando del mio chip di memoria. :)))

Di non ricordarsi di queste sciocchezze, che possono essere facilmente ricontrollate, chiarite, fatte come necessario e dimenticate di nuovo quando si scrive il codice.

Motivazione: