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

 
Vasiliy Pushkaryov #:

affiche des informations sur le bar 6201

Qu'est-ce que cela dit ?

printf((string)TerminalInfoInteger(TERMINAL_MAXBARS));
Il est probable que l'histoire soit plus destinée au testeur, afin que les indicateurs soient calculés correctement.
 
MrBrooklin #:

En tenant compte des conseils des membres du forum, pour ce qu'ils sont un grand MERCI, nous avons obtenu cette version du script :

Salutations, Vladimir.

J'ai complètement oublié un point très important dans le script. Il fallait normaliser le lot. Voici la version corrigée :

//+------------------------------------------------------------------+
//|                            Lot_Size_Depending_On_Risk_And_SL.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input uint Risk=6;         // Размер риска (> 0, но не более 100 %)
input uint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk_And_SL()
  {
//--- блок проверки входных параметров на корректность
   if(Risk==0 || Risk>100 || Stop_Loss==0)
     {
      Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
      return(0.0);
     }
//--- блок определения размера лота
   double trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
                              (Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможного
   double min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   if(lot<min_volume)
      lot=min_volume;
   if(lot>max_volume)
      lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделки
   double step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(lot/step_volume);
   if(MathAbs(ratio*step_volume-lot)>0.0000001)
      lot=ratio*step_volume;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
  }
//+------------------------------------------------------------------+

Salutations, Vladimir.

 
Bonjour !
Après avoir terminé les tests avancés durobot, j'ai rencontré un problème persistant : lors du démarrage d'un test unique avec le meilleur ensemble de paramètres, le testeur de stratégie commence à l'exécuter et semble l'exécuter jusqu'à la fin (à en juger par le moteur de l'indicateur de progression), mais il se bloque ensuite. Metatrader doit être redémarré et les résultats du test unique (et de l'ensemble des tests en cours en général) sont perdus.
Pourquoi le testeur se bloque-t-il et comment peut-on y remédier ?
Cordialement, Alexander
 
Experts, merci de me dire : comment paramétrer la plateforme pour qu'elle reflète l'historique des transactions non pas sur tous les timeframes, mais seulement sur certains d'entre eux ?
Et ce que nous avons maintenant : cliquez sur la case à cocher " show trading history " et tout l'historique (flèches vers le haut et vers le bas) sur le graphique hebdomadaire est déjà une clôture solide.
Et je voudrais un paramètre comme d'autres outils (lignes de tendance, flèches, etc.), dont l'affichage peut être paramétré non pas sur tous les timeframes.
 

Bonjour. Pouvez-vous me dire où voir l'exemple le plus simple d'un Expert Advisor basé sur l'intersection de deux MA (vous pouvez donner une leçon).
Je sais comment en ajouter un. Je ne veux pas faire un simple copier-coller et rallonger le code, je sais qu'il y a d'autres méthodes.
Si dans MQL4 je n'avais pas de questions, dans MQL5 je n'arrive pas à bien comprendre comment faire.

 
makssub exemple le plus simple d'un Expert Advisor basé sur l'intersection de deux MA (vous pouvez donner une leçon).
Je sais comment en ajouter un. Je ne veux pas faire un simple copier-coller et rallonger le code, je sais qu'il y a d'autres méthodes.
Si dans MQL4 je n'avais pas de questions, dans MQL5 je n'arrive pas à bien comprendre comment faire.

Bonjour, ouvrez MetaEDitor 5. Il dispose d'un Expert Advisor intégré (standard) basé sur l'intersection de deux MA. Ouvrez le code et étudiez-le. Ou cherchez-le dans CodeBase. Voici, par exemple, le premier EA basé sur l'intersection de deux MA.

Cordialement, Vladimir.


 
MrBrooklin #:

Bonjour, ouvrez MetaEDitor 5. Il dispose d'un Expert Advisor intégré (standard) basé sur l'intersection de deux MA. Ouvrez le code et étudiez-le. Ou cherchez dans CodeBase. Voici, par exemple, le premier EA construit sur l'intersection de deux MA.

Cordialement, Vladimir.


Merci, j'ai jeté un coup d'œil.

Je comprends ce qui se passe dans OnInit.

Comment faire pour que tout se passe correctement dans OnTick ?

 
makssub #:

Merci, j'ai vérifié.

Dans OnInit, je comprends à peu près ce qui se passe.

Comment faire pour tout mettre dans OnTick ?

Je ne montre qu'une variante d' écriture d'un Expert Advisor, mais il peut y en avoir un très grand nombre. Tout dépend de la qualification du programmeur. La structure d'un Expert Advisor peut ressembler à ceci :

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

Quelque chose comme ça. J'insiste à nouveau sur le fait qu'il ne s'agit pas d'un guide de rédaction des Expert Advisors, mais d'une structure approximative à laquelle j'adhère lorsque je rédige mes Expert Advisors.

Cordialement, Vladimir.

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

Je ne sais pas comment l'écrire

 
Лауреат #:

Je ne sais pas comment l'écrire

Qu'est-ce qui n'est pas clair pour vous ? Comment créer une fonction d'initialisation EA ? Alors essayez d'étudier cet article pour débutants.

Cordialement, Vladimir.