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

 
fxsaber:
Se queste sono le formule corrette


Il Tester calcola queste cifre in modo molto diverso. Ho delle differenze sorprendenti nei risultati tra queste formule e quello che mostra il Tester (a parte il profitto).

Suggerisco di andare a fondo della questione. L'intoppo è esattamente quello che MT5 considera un trade redditizio.

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Rimuoverne uno, o entrambi in una volta sola, e confrontare.

Oppure qui (se il precedente non aiuta) rimuovete "="

if (Profit >= 0)
 
Slava:

Di cosa stiamo discutendo ora? Disabilitare gli agenti o permettere ai personaggi di essere usati in test/ottimizzazione?

Se ci sono due problemi, probabilmente dovremmo discutere e risolverli entrambi. O è impossibile?

1. Perché c'è una disabilitazione degli agenti dopo l'ottimizzazione.

2. Qual è la ragione per cui l'aggiunta automatica di caratteri al tester è interrotta?

 
Artyom Trishkin:

Rimuoverne uno, o entrambi in una volta sola, e confrontare.

O qui (se sopra non aiuta) rimuovete "="

Ecco come funziona MT5

double ProfitPlus = 0;  // Профит неотрицательных закрытых позиций.
double ProfitMinus = 0; // Профит отрицательных закрытых позиций.

int AmountPlus = 0;  // Количество неотрицательных закрытых позиций.
int AmountMinus = 0; // Количество отрицательных закрытых позиций.

for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
  {
    const double Profit = OrderProfit()+ (OrderCommission() / 2) + OrderSwap();
    
    if (Profit >= 0)
    {
      ProfitPlus += Profit;
      AmountPlus++;
    }
    else
    {
      ProfitMinus += Profit;
      AmountMinus++;
    }      

    ProfitMinus += OrderCommission() / 2;
  }

const double PF = ProfitMinus ? -ProfitPlus / ProfitMinus : DBL_MAX; // Профит-фактор.
const double Profit = ProfitPlus + ProfitMinus;                      // Профит

Cioè in MT5 si può chiudere una posizione e ottenere una perdita (il saldo prima dell'apertura è inferiore al saldo dopo la chiusura). Ma in questo caso il MT5-Tester (il terminale non ha controllato) considererà questo trade come redditizio.


Per esempio, MT5_PF = 1,89 e MT4_PF = 2,01.

 
fxsaber:
Se queste sono le formule giuste


Il Tester calcola queste cifre in modo molto diverso. Ho delle differenze sorprendenti nei risultati tra queste formule e quello che mostra il Tester (a parte il profitto).

Propongo di fare chiarezza. L'intoppo è quello che MT5 considera un trade redditizio.

Perché c'è un modificatore const qui?

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Quando questa variabile lascia lo scope, sarà probabilmente reinizializzata... imho, const non è necessario


Se rimuoviamo OrderCommission() + OrderSwap() ? - stiamo parlando di profitti sulle transazioni, non di commissioni?

SZZ: come opzione, il tester può lavorare con il saldo, se l'ordine è chiuso, il saldo è cambiato, confrontarlo con il vecchio saldo, in generale, non posso indovinare.... , non ho trovato la fonte, ma c'è un articolohttps://www.mql5.com/ru/articles/4226 con lo stesso calcolo del profitto, ma non l'ho letto.

Пользовательский тестер стратегий на основе быстрых математических вычислений
Пользовательский тестер стратегий на основе быстрых математических вычислений
  • www.mql5.com
Тестер стратегий, предоставляемый MetaTrader 5, имеет мощный функционал для решения разнообразных задач. С его помощью можно тестировать как сложные стратегии торговли корзинами инструментов, так и одиночные стратегии с простыми правилами входов и выходов. Однако такой обширный функционал нам пригождается далеко не всегда. Часто нам просто...
 
Igor Makanu:

Perché c'è un modificatore const qui?

È necessario calcolare la variabile Profit in tutte le iterazioni del ciclo , anche se è possibile che quando questa variabile lascia l'ambito, venga reinizializzata... imho, non avete bisogno di const.

Sarà ricreato. Tutto è corretto lì.

Cosa succede se rimuovo OrderCommission() + OrderSwap()? - stiamo parlando di profitto da scambi, non da commissioni?

Formula MT5 di cui sopra. Questo crea gravi distorsioni quando si calcola il PF dei TS di scalping. E come può essere che PF dipenda dalla piattaforma? Deve essere inequivocabile.

 
zevs1980:
Questo problema è già stato sollevato da me nei rami delle build precedenti. Non è mai stato riparato. Ho trovato la mia stampella. Disabilito alcuni degli agenti (3 su 10 nel mio caso) e li abilito dopo 0 iterazioni, e tutto va bene. A volte, però, alcuni agenti si fermano nel processo, ma raramente l'algoritmo di soluzione è lo stesso.

È un peccato, ma lo sterzo manuale non è un'opzione. Ho l'ottimizzazione automatica.

 
KENT3004:

Se ci sono due problemi, forse entrambi dovrebbero essere discussi e risolti. O è impossibile?

1. Perché gli agenti si disconnettono dopo l'ottimizzazione.

2. Qual è la ragione per cui l'aggiunta automatica di caratteri al tester è interrotta?

1. Guardate i log dei tester, è tutto lì.

2. è già fissato. Ma fino a quando non avrete una build con le correzioni, potete usare il drag-drop (non abbiamo discusso del perché l'aggiunta dei caratteri si sia fermata, abbiamo discusso di come potete ancora testare in queste condizioni)

 
fxsaber:

Eseguo corse singole alternativamente su ogni simbolo personalizzato. Da un certo punto è impossibile vedere il loro percorso nel Tester, ma sono ancora selezionabili via drag and drop dal Market Watch. Poi dopo un po' non funziona neanche questo: si può selezionare o un simbolo normale, o solo un simbolo personalizzato. Gli altri non sono possibili. L'animazione qui sotto mostra questa situazione.


Riprodotto e corretto. Grazie.
 
Slava:

1. Guardate i log dei tester, è tutto lì.

2. è già fissato. Ma fino a quando non avrete una build con le correzioni, potete usare il drag-drop (non abbiamo discusso del perché l'aggiunta dei caratteri si sia fermata, abbiamo discusso di come potete ancora testare in queste condizioni)

Grazie per la vostra prontezza e i vostri utili consigli. Mi permetto di "segnalare" un dettaglio minore ma scomodo. Il pulsante start/stop copre il pulsante strumenti/tester, il che ti costringe a fare cose extra. Non molto conveniente però.
 
Edgar:
Durante l'ottimizzazione genetica uso molti parametri. Non appena il numero di varianti diventa così grande da apparire in notazione scientifica (6,8768769e+21), l'ottimizzazione continua con la metà degli agenti (4 su 8) dopo la generazione 0. Nessuna menzione di questo nei registri. L'ottimizzazione stessa funziona bene, ma con metà carico, il doppio del tempo.

Il comportamento non viene sempre riprodotto, il che può essere il motivo per cui non viene corretto. Ieri ce l'avevo, oggi no. Forse dipende anche dall'EA. Ce l'ho con le cornici. La dimensione di ex5 è di circa 0,5 Mb. Ho 8 Gb di memoria. Intel i7, 4 core, 8 threads. Divorziato. Senza supervisione.