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

 
Bonjour, pourriez-vous me dire comment faire ? Comment épeler correctement la condition : *s'il y a une nouvelle heure* ?
 
MrBrooklin:

Bonjour !

Aidez-moi. J'ai une question concernant le module de signal de trading "Time filter".

Le problème est que j'ai généré un EA à l'aide de ce module et que je l'ai configuré pour qu'il ne permette qu'une heure de trading par jour. En général, les transactions se font de cette manière, mais il y a des jours où mon conseiller expert ouvre des positions à l'heure qu'il veut. J'ai essayé le module de signal de trading "Time filter" dans diverses combinaisons avec d'autres modules de signal de trading (par exemple, Stochastic, WPR, etc.) mais la même chose se produit. De plus, si vous définissez 2 heures consécutives de travail autorisées, il n'y a aucun problème, cela fonctionne bien.

A quoi peut-il être lié ? Peut-être y a-t-il une erreur dans le code d'un module de signal de trading "Time filter" ? Comme je ne suis pas un expert en programmation, je vous demande de m'aider à résoudre ce problème ou de me donner un indice, peut-être que je fais quelque chose de mal.

Sincèrement, Vladimir.


Voici un exemple simple sur l'image. Un jour, il ouvre à 7 heures ; un autre jour, il ouvre à 5 heures ; le troisième jour, il ouvre à nouveau à 7 heures.


Pouvez-vous joindre un Expert Advisor mq5 à ce post et spécifier les paramètres du testeur (deux captures d'écran : onglets Paramètres et Paramètres) ?

 
Snajper007:
Bonjour, Pourriez-vous me dire. Comment épeler correctement la condition : *s'il y a une nouvelle heure* ?

Voulez-vous parler de l'heure (par exemple, l'horloge affichait 15-00) ou voulez-vous dire qu'une nouvelle barre est née sur l'échelle de temps H1 ?

 

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

FAQ des débutants MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 12:04

Pouvez-vous joindre un Expert Advisor mq5 à un message et spécifier les paramètres du testeur (deux captures d'écran : onglets Paramètres et Paramètres) ?


Ce n'est pas sans fondement, par exemple, en ce moment même, j'ai généré dans l'assistant MQL5 le premier module disponible de signaux de trading AMA et un filtre temporel.

//+------------------------------------------------------------------+
//|                                                          AMA.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalAMA.mqh>
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title            ="AMA";                  // Document name
ulong                    Expert_MagicNumber      =8503;                   //
bool                     Expert_EveryTick        =false;                  //
//--- inputs for main signal
input int                Signal_ThresholdOpen    =10;                     // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose   =10;                     // Signal threshold value to close [0...100]
input double             Signal_PriceLevel       =0;                      // Price level to execute a deal
input double             Signal_StopLevel        =50.0;                   // Stop Loss level (in points)
input double             Signal_TakeLevel        =50.0;                   // Take Profit level (in points)
input int                Signal_Expiration       =4;                      // Expiration of pending orders (in bars)
input int                Signal_AMA_PeriodMA     =10;                     // Adaptive Moving Average(1,1,...) Period of averaging
input int                Signal_AMA_PeriodFast   =2;                      // Adaptive Moving Average(1,1,...) Period of fast EMA
input int                Signal_AMA_PeriodSlow   =30;                     // Adaptive Moving Average(1,1,...) Period of slow EMA
input int                Signal_AMA_Shift        =0;                      // Adaptive Moving Average(1,1,...) Time shift
input ENUM_APPLIED_PRICE Signal_AMA_Applied      =PRICE_CLOSE;            // Adaptive Moving Average(1,1,...) Prices series
input double             Signal_AMA_Weight       =1.0;                    // Adaptive Moving Average(1,1,...) Weight [0...1.0]
input int                Signal_ITF_GoodHourOfDay=-1;                     // IntradayTimeFilter(-1,...) Good hour
input int                Signal_ITF_BadHoursOfDay=16777087;               // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int                Signal_ITF_GoodDayOfWeek=-1;                     // IntradayTimeFilter(-1,...) Good day of week
input int                Signal_ITF_BadDaysOfWeek=0;                      // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double             Signal_ITF_Weight       =1.0;                    // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixRisk_Percent   =10.0;                   // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalAMA
   CSignalAMA *filter0=new CSignalAMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_AMA_PeriodMA);
   filter0.PeriodFast(Signal_AMA_PeriodFast);
   filter0.PeriodSlow(Signal_AMA_PeriodSlow);
   filter0.Shift(Signal_AMA_Shift);
   filter0.Applied(Signal_AMA_Applied);
   filter0.Weight(Signal_AMA_Weight);
//--- Creating filter CSignalITF
   CSignalITF *filter1=new CSignalITF;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   filter1.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter1.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter1.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter1.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter1.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+

Capture d'écran de "Settings" (paramètres)


Capture d'écran de "Paramètres".

Capture d'écran del'incorrect du filtre de temps (les positions sont ouvertes sur différents jours à 7, 12 et 7 heures)


 
MrBrooklin:

Pour ne pas être infondé, par exemple, en ce moment, j'ai généré dans l'assistant MQL5 le premier module disponible de signaux de trading AMA et un filtre temporel.

Capture d'écran de "Settings" (paramètres)


Capture d'écran de "Paramètres".

Capture d'écran du fonctionnement incorrect du filtre horaire (positions d'ouverture sur des jours différents à 7, 12 et 7 heures)


1. Image avec un graphique - lorsque vous faites une capture d'écran, faites-la avec l'outil "Crosshair" - il n'est pas clair de quelle année il s'agit.

2. Lorsque vous travaillez avec les ordres en suspens, n'oubliez pas que l'ordre en suspens peut se déclencher à un moment complètement différent (heure et minutes) par rapport au moment du réglage.

3. Lorsque vous utilisez des modules de signaux, réinitialisez les paramètres aux valeurs par défaut et vérifiez le travail sur le marché - sans aucun ordre en attente (si le point 2 n'est pas clair).

 

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

FAQ des débutants MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.10.14 13:28

1. Image du graphique - lorsque vous faites une capture d'écran, faites-la en même temps que l'outil "Crosshair" - sinon on ne peut pas savoir quelle année.

2. Lorsque vous travaillez avec des ordres en attente, n'oubliez pas qu'un ordre en attente peut se déclencher à un moment complètement différent (heure et minutes) par rapport au moment où il a été placé.

3. Lorsque vous utilisez des modules de signaux, réinitialisez les paramètres aux valeurs par défaut et vérifiez le travail sur le marché - sans les ordres en attente (si le point 2 n'est pas clair).


1. A propos du réticule - compréhensible. Dans la capture d'écran, l'année est 2019 et le mois est octobre.

2. Je ne comprends pas bien l'ordre en attente. Comment savez-vous que l'EA a un ordre en attente et n'ouvre pas une position au début de l'heure ? Pouvez-vous être plus précis ?

3. Le conseiller expert fonctionne bien avec les valeurs par défaut des modules de signaux. Peut-on modifier les valeurs des paramètres ?

Sincèrement, Vladimir.

 

***

1. En ce qui concerne le réticule, il est clair. Dans la capture d'écran, l'année est 2019 et le mois est octobre.

***

Merci pour cette précision.

***

2. Je ne comprends pas bien l'ordre en attente. Comment avez-vous déterminé que l'EA a défini un ordre en attente et n'a pas ouvert une position immédiatement au début de l'heure ? Pouvez-vous être plus précis ?

***

Dans le testeur visuel, il suffit de regarder l'onglet "Historique".

Onglet "Histoire

***

3. Avec les valeurs par défaut des modules de signaux, le conseiller expert fonctionne bien. N'est-il pas possible de modifier les valeurs des paramètres ?

***

Bien sûr que vous pouvez, mais seulement si vous comprenez ce que vous faites et si vous comprenez quel paramètre est responsable de quoi.

 
Vladimir Karputov:

Voulez-vous parler de l'heure (par exemple, l'horloge affichait 15-00) ou voulez-vous dire qu'une nouvelle barre est née sur l'échelle de temps H1 ?

Je veux dire que l'horloge indiquait 15h00.
 
Snajper007:
Je veux dire, l'horloge indiquait 15-00.

Et avec quel degré de certitude voulez-vous le résultat ?

Juste un exemple : Vous voulez voir l'heure sur l'horloge comme étant 3pm. Et vous l'attendez. Mais à ce moment-là, il n'y avait pas de tic ou il n'y avait pas de connexion au serveur. Et puis tu as les tics, mais le temps est de 15 heures 00 minutes et 36 secondes. Que vas-tu faire ?

 
Vladimir Karputov:

Et avec quel degré de certitude voulez-vous le résultat ?

Juste un exemple : Vous voulez voir l'heure sur l'horloge comme étant 3pm. Et vous l'attendez. Mais à ce moment-là, il n'y avait pas de tique ou il n'y avait pas de connexion au serveur. Et puis tu as les tics, mais le temps est de 15 heures 00 minutes et 36 secondes. Qu'allez-vous faire ?

Pouvez-vous faire en sorte qu'il soit possible de vérifier non pas exactement 15-00, mais le début de l'heure ? En d'autres termes, la première minute indiquerait déjà que l'heure précédente s'est terminée et que la nouvelle heure a commencé.