MetaTrader 5 Strategy Tester: bug, errori, suggerimenti per il miglioramento - pagina 27

 
fxsaber:
Probabilmente l'ha mancato.

Non ne hanno sentito la mancanza.

Il formato attuale del file opt non lo permette. Dovete pensarci.

 
Slava:

Non ne hanno sentito la mancanza.

Il formato attuale di opt-file non permette. Dovete pensarci.

Non sembra che ci sia bisogno di cambiare qualcosa.

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

Bug, bug, domande

Slava, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| входные параметры тестирования                                   |
//+------------------------------------------------------------------+
struct TestCacheInput
  {
   wchar_t           name[64];
   int               flag;                    // оптимизируемый параметр
   int               type;                    // тип TYPE_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход

Ogni input è definito da una struttura con i campi richiesti.

 

Ora è molto facile scoprire

  • Tutte le impostazioni del tester e i parametri di ingresso EA.
  • Tutti i dati statistici di ogni passaggio di ottimizzazione.


Ma non possiamo scoprire, per esempio, i dati statistici di un singolo passaggio. È chiaro, c'è un formato tst. Ma sarebbe conveniente usare CTRL+C nello Strategy Tester per formare un file di set con dati statistici nella scheda Backtest.

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

Biblioteche: TesterCache

fxsaber, 2019.11.11 04:45

; saved on 2019.11.13 19:40:01
; Experts\Examples\MACD\MACD Sample LImitTP.ex5
; EURUSD
; 2019.09.01 - 2019.11.13
;
InpLots=0.1
InpTakeProfit=200||10||5||500||Y
InpTrailingStop=290||30||10||300||Y
InpMACDOpenLevel=5||5||5||200||Y
InpMACDCloseLevel=180||5||5||200||Y
InpMATrendPeriod=8||1||1||200||Y
;
; initial_deposit = 10000.0
; withdrawal = 0.0
; profit = 479.15
; grossprofit = 479.15
; grossloss = 0.0
; maxprofit = 99.8
; minprofit = 0.0
; conprofitmax = 479.15
; maxconprofit = 479.15
; conlossmax = 0.0
; maxconloss = 0.0
; balance_min = 10000.0
; maxdrawdown = 0.0
; drawdownpercent = 0.0
; reldrawdown = 0.0
; reldrawdownpercent = 0.0
; equity_min = 9997.700000000001
; maxdrawdown_e = 253.6000000000004
; drawdownpercent_e = 2.457388152985982
; reldrawdown_e = 253.6000000000004
; reldrawdownpercnt_e = 2.457388152985982
; expected_payoff = 47.91500000000001
; profit_factor = 1.797693134862316 e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316 e+308
; custom_fitness = 0.0
; deals = 15
; trades = 10
; profittrades = 10
; losstrades = 0
; shorttrades = 6
; longtrades = 4
; winshorttrades = 6
; winlongtrades = 4
; conprofitmax_trades = 10
; maxconprofit_trades = 10
; conlossmax_trades = 0
; maxconloss_trades = 0
; avgconwinners = 10
; avgconloosers = 0

Non so gli altri, ma io trovo comodo quando il file del set contiene tutte le informazioni. Si fa presto a capire cos'è, da dove viene e quanto.


Questo è l'output dei campi della struttura ExpTradeSummary.

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

Bug, bug, domande

Slava, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| Структура для статистики торговли                                |
//+------------------------------------------------------------------+
struct ExpTradeSummary;

#define  TOSTRING(A) #A + " = " + (string)(A) + "\n"

  string ToString( void ) const
  {
    return(
      TOSTRING(initial_deposit) +      // начальный депозит
      TOSTRING(withdrawal) +           // снято средств
      TOSTRING(profit) +               // общая прибыль (+)
      TOSTRING(grossprofit) +          // общий плюс
      TOSTRING(grossloss) +            // общий минус
      TOSTRING(maxprofit) +            // максимально прибыльная сделка
      TOSTRING(minprofit) +            // максимально убыточная сделка
      TOSTRING(conprofitmax) +         // прибыль максимальной последовательности прибыльных сделок
      TOSTRING(maxconprofit) +         // максимальная прибыль среди последовательностей
      TOSTRING(conlossmax) +           // убыток максимальной последовательности убыточных сделок
      TOSTRING(maxconloss) +           // максимальный убыток среди последовательностей
      TOSTRING(balance_min) +          // минимальное значение баланса (для расчёта абсолютной просадки)
      TOSTRING(maxdrawdown) +          // максимальная просадка по балансу
      TOSTRING(drawdownpercent) +      // отношение максимальной просадки по балансу к её пику
      TOSTRING(reldrawdown) +          // максимальная относительная просадка по балансу в деньгах
      TOSTRING(reldrawdownpercent) +   // максимальная относительная просадка по балансу в процентах
      TOSTRING(equity_min) +           // минимальное значение equity (для расчёта абсолютной просадки по equity)
      TOSTRING(maxdrawdown_e) +        // максимальная просадка по equity
      TOSTRING(drawdownpercent_e) +    // отношение максимальной просадки по equity к её пику (+)
      TOSTRING(reldrawdown_e) +        // максимальная относительная просадка по equity в деньгах
      TOSTRING(reldrawdownpercnt_e) +  // максимальная относительная просадка по equity в процентах
      TOSTRING(expected_payoff) +      // матожидание выигрыша (+)
      TOSTRING(profit_factor) +        // показатель прибыльности (+)
      TOSTRING(recovery_factor) +      // фактор восстановления (+)
      TOSTRING(sharpe_ratio) +         // коэффициент Шарпа (+)
      TOSTRING(margin_level) +         // минимальный уровень маржи
      TOSTRING(custom_fitness) +       // пользовательский фитнесс - результат OnTester (+)
      TOSTRING(deals) +                // общее количество сделок
      TOSTRING(trades) +               // количество сделок out/inout
      TOSTRING(profittrades) +         // количество прибыльных
      TOSTRING(losstrades) +           // количество убыточных
      TOSTRING(shorttrades) +          // количество шортов
      TOSTRING(longtrades) +           // количество лонгов
      TOSTRING(winshorttrades) +       // количество прибыльных шортов
      TOSTRING(winlongtrades) +        // количество прибыльных лонгов
      TOSTRING(conprofitmax_trades) +  // максимальная последовательность прибыльных сделок
      TOSTRING(maxconprofit_trades) +  // последовательность максимальной прибыли
      TOSTRING(conlossmax_trades) +    // максимальная последовательность убыточных сделок
      TOSTRING(maxconloss_trades) +    // последовательность максимального убытка
      TOSTRING(avgconwinners) +        // среднее количество последовательных прибыльных сделок
      TOSTRING(avgconloosers)          // среднее количество последовательных убыточных сделок
    );
 

Dato che sono apparse delle cache potenti, vale la pena di migliorarle un po'.

Ora solo un parametro utente, OnTester, entra nella cache.


Sarebbe molto comodo se ExpTradeSummary diventasse tre o cinque volte più grande. Che potrebbe essere compilato tramite

double OnTester( double &CustomDoubles[] );


Ora si analizzano le cache e ovviamente manca la possibilità di vedere non il valore di un utente, ma diversi.

 

Questa è una richiesta a Metaquotes, spero che almeno uno sviluppatore del team possa rispondere (scusate se è già stato chiesto, ma a causa di problemi di lingua non riesco a trovare la risposta sul forum russo).

È ragionevole chiedere un miglioramento dello Strategy Tester per aggiungere la possibilità di testare una situazione di trading che non accade mai su un conto demo, ma solo su un conto reale? Poiché è davvero difficile creare un codice robusto senza essere in grado di testarlo completamente.

Questo è principalmente dovuto al mercato centralizzato (al contrario del Forex / CFD). Per esempio, il riempimento parziale degli ordini, su un conto demo questo non succede mai (per quanto ne so), ma su un conto reale su futures o azioni è una situazione comune. Sarebbe molto utile avere uno strumento per simulare una tale situazione.

Il riempimento parziale è solo un esempio, se Metaquotes pensa che sia una buona idea lavorare con tali caratteristiche, sono disposto a centralizzare le idee e fornire una descrizione dettagliata di tali caratteristiche. (Niente di specifico per le mie esigenze).

Grazie per il vostro tempo e le vostre risposte.

 
Alain Verleyen:

è difficile creare un codice affidabile senza poterlo testare completamente.

Per fare questo, ogni serio sviluppatore di EA esegue il debug delle proprie librerie di trading per anni su conti reali.

Non c'è modo di creare codice affidabile senza di esso.

 
fxsaber:

Per fare questo, ogni serio sviluppatore di EA esegue il debug delle proprie librerie di trading per anni su conti reali.

Non c'è modo di creare codice affidabile senza di esso.

Questo è vero, ma aiuterebbe ad evitare un sacco di test che richiedono tempo su un conto reale.

 
Artyom Trishkin:

Quindi è vero, ma questa funzionalità aiuterebbe ad evitare molti test dispendiosi in termini di tempo su un conto reale.

Ci sono due obiettivi.

  1. Una biobioteca di trading adeguata che sa solo come mostrare lo stato attuale del trading, la storia del trading e inviare ordini. Qui il Tester non è quasi d'aiuto. La demo può aiutare molto se conduciamo degli stress test. Non possiamo farli sul conto reale - sono costosi. Pertanto, c'è solo una demo su un enorme numero di simboli/server. Queste biblioteche si contano sulle dita di una mano.
  2. Praticare la logica di trading delle esecuzioni parziali, reindirizzamenti, ecc. Questo punto è molto più facile del primo. E ripetutamente risolto sullo stesso MT4 senza alcun tester. È davvero semplice.

Un tester può aiutare solo per il secondo punto, quello semplice. È possibile implementare l'esecuzione parziale misurando il presunto "tetto di liquidità" del TS. Ma questa sarebbe una stima estremamente grossolana.


Dovrebbe essere compreso che qualsiasi miglioramento nel Tester è un freno aggiuntivo anche se questi miglioramenti non vengono utilizzati.

 
fxsaber :

Per fare questo, ogni serio sviluppatore di EA esegue il debug delle proprie librerie di trading per anni su conti reali.

Non c'è modo di creare codice affidabile senza di esso.

Vi consiglio di dimenticarmi una volta per tutte con i vostri post inutili e arroganti.

Purtroppo non ho modo di filtrarli.

Non rispondete mai ai miei post, per favore, mi fate perdere tempo a causa delle notifiche.

 
Alain Verleyen:

Vi consiglio di dimenticarmi una volta per tutte con i vostri post inutili e arroganti.

Ti consiglio di iniziare a mettere in discussione l'adeguatezza dei traduttori automatici di russo che usi.


Purtroppo non ho modo di filtrarli.

Non rispondete mai ai miei post, per favore, mi fate perdere tempo a causa delle notifiche.

OK.

Motivazione: