Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 27

 
fxsaber:
Je l'ai probablement manqué.

Ils ne l'ont pas manqué.

Le format actuel du fichier opt ne le permet pas. Il faut y réfléchir.

 
Slava:

Ils ne l'ont pas manqué.

Le format actuel de l'opt-file ne le permet pas. Il faut y réfléchir.

Il n'y a pas besoin de changer quoi que ce soit.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bugs, bugs, questions

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), буфер оптимизируемых параметров и генетический проход

Chaque entrée est définie par une structure avec les champs obligatoires.

 

Il est maintenant très facile de trouver

  • Tous les réglages du testeur et les paramètres d'entrée de l'EA.
  • Toutes les données statistiques de chaque passage de l'optimisation.


Mais nous ne pouvons pas connaître, par exemple, les données statistiques d'un seul passage. C'est clair, il y a un format tst. Mais il serait pratique d'utiliser CTRL+C dans le testeur de stratégie pour former un fichier d'ensemble avec des données statistiques dans l'onglet Backtest.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Bibliothèques : 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

Je ne sais pas ce qu'il en est pour les autres, mais je trouve pratique que le fichier de l'ensemble contienne toutes les informations. Il est très rapide de savoir ce que c'est, d'où ça vient et combien ça coûte.


Il s'agit de la sortie des champs de la structure ExpTradeSummary.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

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)          // среднее количество последовательных убыточных сделок
    );
 

Depuis l'apparition de caches puissants, il est intéressant de les améliorer quelque peu.

Maintenant, seul un paramètre utilisateur, OnTester, est placé dans le cache.


Il serait très pratique que ExpTradeSummary devienne trois ou cinq fois plus grand. Qui pourrait être rempli via

double OnTester( double &CustomDoubles[] );


Maintenant, vous analysez les caches et il vous manque évidemment la possibilité de voir non pas la valeur d'un utilisateur mais de plusieurs.

 

Il s'agit d'une demande à Metaquotes, j'espère qu'au moins un développeur de l'équipe peut répondre (désolé si la question a déjà été posée, mais en raison d'un problème de langue, je ne peux pas trouver la réponse sur le forum russe).

Est-il raisonnable de demander une amélioration du testeur de stratégie pour ajouter la possibilité de tester une situation de trading qui ne se produit jamais sur un compte de démonstration, mais uniquement sur un compte réel ? Il est en effet très difficile de créer un code robuste sans pouvoir le tester complètement.

Ceci est principalement dû au fait que le marché est centralisé (par opposition au Forex / CFD). Par exemple, l'exécution partielle d' un ordre, sur un compte de démonstration cela n'arrive jamais (pour autant que je sache), mais sur un compte réel sur des contrats à terme ou des actions, c'est une situation courante. Il serait très utile de disposer d'un outil permettant de simuler une telle situation.

Le remplissage partiel est juste un exemple, si Metaquotes pense que c'est une bonne idée de travailler avec de telles fonctionnalités, je suis prêt à centraliser les idées et à fournir une description détaillée de ces fonctionnalités. (Rien de spécifique pour mes propres besoins).

Merci de votre temps et de votre/vos réponse(s).

 
Alain Verleyen:

il est difficile de créer un code fiable sans être en mesure de le tester complètement.

Pour ce faire, tout développeur d'EA sérieux débogue ses bibliothèques de trading pendant des années sur des comptes réels.

Il n'y a aucun moyen de créer un code fiable sans elle.

 
fxsaber:

Pour ce faire, tout développeur d'EA sérieux débogue ses bibliothèques de trading pendant des années sur des comptes réels.

Il n'y a aucun moyen de créer un code fiable sans elle.

C'est vrai, mais cela permettrait d'éviter un grand nombre de tests fastidieux sur un compte réel.

 
Artyom Trishkin:

C'est vrai, mais cette fonctionnalité permettrait d'éviter de nombreux tests fastidieux sur un compte réel.

Il y a deux objectifs.

  1. Une biobioteque de trading adéquate qui sait juste comment montrer le statut actuel du trading, l'historique du trading et envoyer des ordres. Ici, le testeur n'est presque d'aucune aide. La démo peut être d'une grande aide si nous effectuons des tests de résistance. Nous ne pouvons pas les faire sur le compte réel - c'est coûteux. Par conséquent, il n'existe qu'une démo sur un très grand nombre de symboles/serveurs. Ces bibliothèques se comptent sur les doigts d'une main.
  2. Pratiquer la logique commerciale des exécutions partielles, des redirections, etc. Ce point est beaucoup plus facile que le premier. Et plusieurs fois résolu sur le même MT4 sans aucun testeur. C'est vraiment simple.

Un testeur ne peut aider que sur le deuxième point, le plus simple. Vous pouvez mettre en œuvre l'exécution partielle en mesurant le prétendu "plafond de liquidité" du TS. Mais il s'agirait d'une estimation extrêmement grossière.


Il faut comprendre que toutes les améliorations du Testeur constituent des freins supplémentaires, même si ces améliorations ne sont pas utilisées.

 
fxsaber :

Pour ce faire, tout développeur d'EA sérieux débogue ses bibliothèques de trading pendant des années sur des comptes réels.

Il n'y a aucun moyen de créer un code fiable sans elle.

Je vous conseille de m'oublier une fois pour toutes avec vos posts inutiles et arrogants.

Malheureusement, je n'ai aucun moyen de les filtrer.

Ne répondez jamais à mes messages, s'il vous plaît, vous me faites perdre mon temps à cause des notifications.

 
Alain Verleyen:

Je vous conseille de m'oublier une fois pour toutes avec vos posts inutiles et arrogants.

Je vous recommande de commencer à remettre en question l'adéquation des traducteurs automatiques russes que vous utilisez.


Malheureusement, je n'ai aucun moyen de les filtrer.

Ne répondez jamais à mes messages, s'il vous plaît, vous me faites perdre mon temps à cause des notifications.

OK.