Librerie: SingoloTesterCache - pagina 7

fxsaber #:

Registrerei il valore massimo. Il tempo di creazione del successivo record TesterTradeState dipende probabilmente dalla frequenza scelta dagli sviluppatori e da altre condizioni.

Se avessi l'incarico di creare un file tst molto simile a quello originale, non otterrei TesterTradeState[] identici .

Ottenuto

Dopo l'esecuzione dello script SingleTesterCache_Example.ex5, il risultato del file Test.tst non viene aperto nel tester di strategie cliccando sul pulsante "Risultati precedenti".

Allego il file contenente il risultato dell'esecuzione dello script e la cronologia del conto su cui ho eseguito lo script.

Ho aggiornato la libreria oggi.

Build MT5 6230.

File:
Files.zip  315 kb
Ivan Titov tester delle strategie tramite il pulsante "Risultati precedenti".

Non utilizzo il metodo Save da quando ho creato la libreria (presto saranno sette anni). In questo periodo, molto probabilmente, sono state apportate modifiche da parte di MQ.


Bisogna prendere il file tst originale, leggerlo e poi salvarlo. Dopodiché occorre verificare quali sono le differenze.

Per ora non sono pronto ad occuparmene. Non utilizzo questa funzionalità.

Cioè, per quanto riguardala "scrittura dei file tst" , è meglio non utilizzarequesta libreria. Solo per la "lettura". Ho capito bene?
Ivan Titov #:
Cioè, per quanto riguardala "scrittura dei file tst" , è meglio non utilizzarequesta libreria. Solo per la "lettura". Ho capito bene?
Se si scrive per la lettura con il Tester, è necessario un intervento esplicito. Di che tipo? Bisogna vedere.
fxsaber #:
Se si scrive per la lettura da parte di Tester, è necessario un ulteriore adattamento. Di che tipo? Bisogna vedere.
Sostituire questo numero
      this.Header.version = ::MathMax(this.Header.version, 502);

con 505.


Se si desidera discutere i risultati di un backtest senza pubblicità (ad esempio, un expert advisor del Market), è possibile rendere anonimo il file tst e pubblicarlo tranquillamente sul forum.

Ecco come procedere.

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/it/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/it/code/26132

template <typename T>
void ChangeComments( T &Array[], const string NewComment = NULL )
{
  for (uint i = ArraySize(Array); (bool)i--;)
    Array[i].comment = NewComment;
    
  return;
}

void ChangeName( SINGLETESTERCACHE &SingleTesterCache, const string Name = "Deleted", const bool Comments = false )
{
  SingleTesterCache.Header.expert_name = Name;            // nome dell'esperto
  SingleTesterCache.Header.expert_path = Name;            // nome dell'esperto con percorso da MQL5

  if (!Comments)
  {  
    ChangeComments(SingleTesterCache.Deals);
    
    ChangeComments(SingleTesterCache.Orders);
  }
  
  return;
}

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Se è stato possibile leggere l'ultima voce della cache relativa a un'esecuzione singola
  {
    SINGLETESTERCACHE SingleTesterCache(Bytes2); // La inseriamo nell'oggetto corrispondente.

    ChangeName(SingleTesterCache);
    
    SingleTesterCache.Save("ForumBacktest.tst");
  }
}


Per prima cosa esegui il backtest, poi avvia questo script nel Terminale. Otterrai così il tuo backtest privo di dati identificativi. Di conseguenza, verranno conservate tutte le statistiche del backtest, che potrai pubblicare sul forum senza timori.

Qui, nel codice sorgente, è possibile vedere come organizzare il funzionamento in parallelo con un numero qualsiasi di cache a passaggio singolo.


In particolare, è così che vengono selezionate le transazioni.

struct DEAL_SIGN2 : public DEAL_SIGN
{
  bool operator =( const TradeDeal &Deal )
  {
    const bool Res = (Deal.action <= DEAL_TYPE_SELL);

    if (Res)
    {
      const double ContactSize = Deal.contract_size ? Deal.contract_size * 1000 : 1e8;

      this.Volume = (1.0 - (Deal.action << 1)) * Deal.volume / ContactSize;
      this.Time = Deal.time_create;
    }

    return(Res);
  }
};

int GetDeals( const string FileName, DEAL_SIGN &Deals[] )
{
  const SINGLETESTERCACHE SingleTesterCache(FileName);

  int Amount = 0;
  DEAL_SIGN2 Deal;

  for (int i = 0, const Size = ArrayResize(Deals, ArraySize(SingleTesterCache.Deals)); i < Size; i++)
    if (Deal = SingleTesterCache.Deals[i])
      Deals[Amount++] = Deal;

  return(ArrayResize(Deals, Amount));
}
Коэффициент НЕкорреляции.
Коэффициент НЕкорреляции.
  • www.mql5.com
При составлении портфеля ТС стараются опираться на статистику. Например, пробуют составлять таблицу корреляции на основе вычислений соответствующих коэффициента (КК). Основная причина такого подхода -