Questions des débutants MQL5 MT5 MetaTrader 5 - page 1401

 
freemovpalm #:

Bonjour à tous, pouvez-vous s'il vous plaît m'aider à ajouter la martingale à l'EA, j'ai besoin après avoir déclenché le stoploss (obtenir la perte) et sur un nouveau signal (le hibou fonctionne par indicateur) d'entrer avec un lot augmenté (multiplié par le coefficient). Ai-je bien compris, je dois d'abord écrire l'événement - événement stoploop (je ne sais pas où et comment), et faire les maths avec beaucoup là (j'ai besoin de variables supplémentaires) ?

Par exemple, ajoutez une variable - compteur de transactions perdantes à la suite. A chaque transaction perdante - augmentée de 1, à chaque transaction profitable - remise à 0.

Et à partir de ce compteur, fixer le lot (par exemple - multiplier le lot minimum par 2 en proportion de ce compteur).

Mais la martingale ne rendra pas profitable une stratégie perdante.

 
JRandomTrader #:

Par exemple, ajoutez une variable - compteur de transactions perdantes à la suite. A chaque transaction perdante - il est augmenté de 1, à chaque transaction profitable - il est remis à 0.

Et à partir de ce compteur, fixez le lot (par exemple, multipliez le lot minimum par 2 dans la mesure de ce compteur).

Mais la martingale ne rendra pas profitable une stratégie perdante.

Merci, la stratégie a une moyenne de 2 et un maximum de 4 pertes d'affilée, c'est pourquoi je voulais une martin. A propos, quelqu'un a-t-il un exemple d'un tel compteur ou d'une telle chouette fonctionnant sur le même principe que celui que j'ai décrit ? Je pourrais simplement copier les lignes nécessaires à partir de là.

 
string Button_TP = "Panel.String1.Button3";

Print(ObjectGetInteger(0, "Panel.String1.Button3", OBJPROP_STATE));
Print(ObjectGetInteger(0, Button_TP, OBJPROP_STATE));

Pouvez-vous me dire pourquoi la première option fonctionne et pas la seconde ? Le nom du bouton ne peut-il pas être défini comme une variable ?

 

Comment le testeur peut-il automatiser le passage de plusieurs paires ?
Par exemple, je dois passer par 20 paires. Maintenant je redémarre le testeur pour chaque paire.
Je n'arrive pas à trouver comment faire une variable.

Y a-t-il des solutions ?

 
Evgeny Dyuka #:

Comment le testeur peut-il automatiser le passage de plusieurs paires ?
Par exemple, je dois passer par 20 paires. Maintenant je redémarre le testeur pour chaque paire.
Je n'arrive pas à trouver comment faire une variable.

Avez-vous une solution ?

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

Comment recevoir les paires sélectionnées pour la revue de marché dans Strategy Tester ?

Alexey Viktorov, 2022.04.14 17:11

Vous ne pouvez pas utiliser le terminal MarketWatch dans le Strategy Tester. Le testeur génère son propreMarketWatch à partir des symboles dont les propriétés ont été demandées au programme. Par conséquent, pour former uneMarketWatch, vous devez demander n'importe quelle propriété du symbole requis.

sinput  string  Symb  = "GBPUSD,GBPAUD,GBPCAD,GBPJPY,EURUSD,EURGBP,EURAUD,EURCAD,EURJPY,AUDUSD,AUDNZD,AUDCAD,AUDJPY,NZDUSD,NZDCAD,USDCAD,USDJPY"
string s_arr[];
int OnInit()
{
  int i = 0, symbPos = 0;
  if(StringSplit(Symb, ',', s_arr) <= 0)
   {
    Print(__FUNCTION__ + " Error converting !");
    return(INIT_FAILED);
   }
  while(symbPos >= 0  && !IsStopped())
   {
    if(!SymbolInfoInteger(s_arr[i], SYMBOL_SELECT) || !SymbolInfoInteger(s_arr[i], SYMBOL_VISIBLE))
      SymbolSelect(s_arr[i], true);
    double price = SymbolInfoDouble(s_arr[i], SYMBOL_ASK);
    i++;
   }
 return(INIT_SUCCEEDED);
}/*******************************************************************/

J'espère que je n'ai pas fait d'erreurs en tirant le code de mon programme...


 
Evgeny Dyuka #:

Comment le testeur peut-il automatiser le passage de plusieurs paires ?
Par exemple, je dois passer par 20 paires. Maintenant je redémarre le testeur pour chaque paire.
Je n'arrive pas à trouver comment faire une variable.

Y a-t-il des solutions ?

Si nous définissons une paire par un paramètre de l'EA qui peut changer pendant l'optimisation, il suffit de lancer l'optimisation par ce paramètre pour commencer un passage par plusieurs paires.
Ce paramètre ne peut pas être de type "string", mais il peut être de type "int" ou "enum".
En utilisant ce paramètre, lors de l'initialisation de l'EA, nous assignons à une autre variable de type chaîne le nom du symbole souhaité qui correspond à la valeur du paramètre.
Dans le code EA, vous devrez remplacer Symbol() ou _Symbol par votre propre variable avec le nom de la paire.

Comprenez-vous le principe ou avez-vous besoin d'un exemple de code ?

 
Evgeny Dyuka #:

Comment le testeur peut-il automatiser le passage de plusieurs paires ?
Par exemple, je dois passer par 20 paires. Maintenant je redémarre le testeur pour chaque paire.
Je n'arrive pas à trouver comment faire une variable.

Y a-t-il des solutions ?

Sabermultitester est la solution, vous pouvez y configurer les passes par les outils et les paramètres.

Библиотеки: MultiTester
Библиотеки: MultiTester
  • 2019.07.19
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MultiTester
 
Yuriy Bykov #:

Si une paire est définie par un paramètre de l'EA qui peut être modifié pendant l'optimisation, alors pour exécuter une passe multi-paire, il suffit d'exécuter l'optimisation par ce paramètre.
Ce paramètre ne peut pas être de type "string", mais il peut être de type "int" ou "enum".
En utilisant ce paramètre, lors de l'initialisation de l'EA, nous assignons à une autre variable de type chaîne le nom du symbole souhaité qui correspond à la valeur du paramètre.
Dans le code EA, vous devrez remplacer Symbol() ou _Symbol par votre propre variable avec le nom de la paire.

Comprenez-vous le principe ou avez-vous besoin d'un exemple de code ?

Super ! Je n'ai pas pensé à passer par l'optimiseur.

 
Yuriy Bykov #:

Si une paire est définie par un paramètre de l'EA qui peut être modifié pendant l'optimisation, alors pour exécuter une passe multi-paire, il suffit d'exécuter l'optimisation par ce paramètre.
Ce paramètre ne peut pas être de type "string", mais il peut être de type "int" ou "enum".
En utilisant ce paramètre, lors de l'initialisation de l'EA, nous assignons à une autre variable de type chaîne le nom du symbole souhaité qui correspond à la valeur du paramètre.
Dans le code EA, partout où Symbol() ou _Symbol est utilisé, nous devrons le remplacer par notre propre variable avec le nom de la paire.

Le principe est-il clair, ou avez-vous besoin d'un exemple de code ?

Qu'en est-il de OnTick() ?
Je peux substituer mon propre symbole partout, maisOnTick() sera toujours pris dusymbole sur lequel le testeur fonctionne.
Extrait de l'aide : "
L'événement OnTick() est généré . lorsqu'un nouveau tick est reçu pour un symbole, au graphique duquel le conseiller expert est attaché".

Il ne peut y avoir de conflit ici ? Par exemple, le forex est arrêté pendant le week-end mais pas la crypto.

 
Oui, c'est un problème. Je n'ai pas travaillé avec les crypto-monnaies, donc je n'ai pas pensé à la différence entre les périodes d'échange autorisées. Mais il est possible de mettre une crypto-monnaie comme symbole de travail dans le testeur, et d'ajouter (ou non) la vérification que le trading est autorisé dans l'EA. Ensuite, le principal problème est l'incohérence des heures d'arrivée des ticks pour les différents instruments. Ici, nous pouvons essayer de choisir l'instrument avec plus de ticks pour réduire l'erreur des résultats de test. Dans les Expert Advisors multi-devises qui travaillent attachés à un graphique, la situation sera la même - OnTick() est déclenché uniquement pour le symbole principal. Pour suivre correctement l'événement de l'arrivée d'une nouvelle barre pour différents symboles, j'utilise dans ce cas ma bibliothèque New Bar Event.
New Bar Event
New Bar Event
  • www.mql5.com
Позволяет определить наступление события нового бара в мультивалютном советнике. В вызове OnTick() можно многократно проверять, наступило ли на этом тике событие для нужного инструмента (symbol) и периода графика (timeframe).
Raison: