Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 37

 

HistorySelect è una funzione molto costosa. Ma HistorySelectByPosition è ancora più costoso.

Per esempio, se abbiamo bisogno di trovare il primo affare della posizione chiusa, possiamo farlo in due modi

  1. Fate HistorySelectByPosition e poi trovate l'affare necessario dalla piccola lista ottenuta. Ma questa lista si forma come segue Prima di tutto si forma TUTTA la storia (equivalente alla chiamata dell'"infinito" HistorySelect). Poi c'è un ciclo COMPLETO per questa lista e vengono selezionate solo le offerte che hanno un POSITION_IDENTIFIER appropriato.
  2. Fate HistorySelect (potete "infinito", ma è meglio usare un intervallo, se noto), poi nel ciclo for fate una pausa, quando raggiungete il DEAL_ENTRY corrispondente.

Il secondo elemento potrebbe essere molto più economico. Ma certamente non più costoso.

Chiamare le funzioni HistorySelect* nel tester è quasi uno spreco di risorse computazionali. Pertanto si dovrebbe sempre cercare di ridurre al minimo il loro numero. Soprattutto HistorySelectByPosition.

 
Per i conti Hedge nel tester
Controllo dell'attivazione dei limitatori regolari al prossimo tick.
Questo significa che il risultato del tester dipende molto dal tipo di account.
 
fxsaber:
Per i conti Hedge nel testerQuesto significa che il risultato del tester dipende molto dal tipo di conto.


Come si è scoperto in uno dei thread vicini, il risultato del tester dipende anche dal fatto che il test sia fatto su un agente locale o su uno degli agenti della rete distribuita.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
Yury Kirillov:


Come si è scoperto in uno dei thread vicini, il risultato del tester dipende persino dal fatto che il test avvenga sull'agente locale o su uno degli agenti della rete distribuita.

https://www.mql5.com/ru/forum/1111/page1880#comment_4904481

Hai descritto una BORSA, che non è nel contesto di questo thread. Limitare la varianza di esecuzione è la posizione ufficiale.
 
fxsaber:
Hai descritto BAG, che non è nel contesto di questo thread. La diversa esecuzione dei limitatori è la posizione ufficiale.

Sono d'accordo, volevo solo sottolineare che il tester sta diventando uno strumento sempre più imprevedibile.
 
Yury Kirillov:

Sono d'accordo, volevo solo sottolineare che il tester sta diventando uno strumento sempre più imprevedibile.
Non è mai stato prevedibile, purtroppo.
 
fxsaber:
Questo significa che il risultato del tester dipende molto dal tipo di account.
Questo si applica solo agli strumenti scambiati in borsa.
 
Tutti i tipi standard sono abbinati tra loro
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Risultato

1
1.23
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2017.04.10 16:53

Cari sviluppatori, come sbarazzarsi degli avvisi in questa situazione?
template <typename T>
T GetValue()
{
  T Res; // possible use of uninitialized variable 'Res'
  
  return(Res);
}

void OnStart()
{
  MqlTick Tick = GetValue<MqlTick>();
  int i = GetValue<int>();
}
Lifehack
template <typename T>
const T GetDefaultValue( void )
{
  struct STRUCT_TYPE
  {
    const T Value;
  };
  
  const STRUCT_TYPE Res = {0};
  
  return(Res.Value);
}

void OnStart()
{
  int i = GetDefaultValue<int>();
  MqlTick Tick = GetDefaultValue<MqlTick>();
  string Str = GetDefaultValue<string>();
}
 

Funzioni di rudimento (non richieste)

  • StringToDouble
  • StringToInteger
  • StringToTime
  • StringToColor
  • StringAdd
  • StringConcatenate
  • GetPointer

Motivazione: