Comment savoir si le marché est fermé ? (mql4) - page 3

 

Quelle est la nécessité pratique de tous ces contrôles ?

Pourquoi vérifier, par exemple, si l'expert est autorisé à faire du commerce ? Qui est la cible ? Un utilisateur down ? Le drapeau de l'autorisation de commerce est défini une fois dans le terminal, c'est tout. Pourquoi devrions-nous le vérifier à chaque tique ? Ou le vérifier toutes les n secondes ? Le conseiller expert n'a-t-il rien d'autre à faire ?

Pourquoi vérifier si le marché est ouvert ? Le marché ouvre-t-il quand il le veut ? Ou bien un instrument se négocie à 16 heures aujourd'hui et à 14 heures demain et ce désordre se produit tout le temps ? Si le calendrier des opérations est connu et ne change jamais, pourquoi vérifier chaque tick ou chaque n-seconde si le marché est ouvert ?

Et ce conseil amusant sur l'envoi d'une demande de transaction pour savoir si le marché est ouvert ? Pour ceux qui aiment rire ? Ou pour un utilisateur satisfait ?

Pas de tique, pas de commerce.

 
abolk:

Quelle est la nécessité pratique de tous ces contrôles ?

Pourquoi vérifier, par exemple, si l'expert est autorisé à faire du commerce ? Qui est la cible ? Un utilisateur down ? Le drapeau de l'autorisation de commerce est défini une fois dans le terminal, c'est tout. Pourquoi devrions-nous le vérifier à chaque tique ? Ou le vérifier toutes les n secondes ? Le conseiller expert n'a-t-il rien d'autre à faire ?

Pourquoi vérifier si le marché est ouvert ? Le marché ouvre-t-il quand il le veut ? Ou bien un instrument se négocie à 16 heures aujourd'hui et à 14 heures demain et ce désordre se produit tout le temps ? Pourquoi, si le calendrier des opérations est connu et ne change jamais, devrions-nous vérifier chaque tick ou chaque n-seconde si le marché est ouvert ?

Et cette astuce consistant à envoyer une demande de transaction pour voir si le marché est ouvert ?

Pas de tique - pas de commerce.

Les tâches sont différentes. Je ne peux pas tout dire, mais ma tâche consistait à ouvrir des ordres pour différents symboles à partir d'un seul EA et certains d'entre eux avaient des sessions de négociation différentes (je veux dire la possibilité de travailler avec n'importe quel ensemble de symboles disponibles pour le compte).

Par conséquent, toutes les vérifications ont été effectuées non pas dans OnTick mais dans OnTimer. J'ai décrit ma version à la page précédente. Bien que, en principe, il s'agisse d'une sorte de contrôle "no tick - no trade".

 
abolk:

... Le marché ouvre-t-il quand il le veut ? Ou bien certains instruments se négocient à partir de 16 heures aujourd'hui et de 14 heures demain et c'est le désordre en permanence ?

...

Ça arrive... Il existe différentes fêtes... Différents pays. Le Forex a fonctionné, mais pas l'or et l'argent.

Et si vous avez la possibilité d'utiliser des contrats à terme en plus du Forex, la fermeture anticipée des sessions, les coupures pour dépassement de limite et autres astuces se produisent.

 
papaklass:

Voici une autre option pour les quatre :

bool flag;
//-----------------------------------------------------------------------------+

bool RealSymbol(string str)
{
   return(MarketInfo(str, MODE_BID) != 0);
}//----------------------------------------------------------------------------+
 
void init()
{
   flag = RealSymbol(Symbol());
         
   return;  
}//----------------------------------------------------------------------------+
 
void deinit()
{
   return;
}//----------------------------------------------------------------------------+
 
void start()
{
   if (!flag)
   {
      return;
   }
   
   //дальше Ваш рабочий код
     
   return;  
}//----------------------------------------------------------------------------+

excellente option -- l'essentiel est de lancer le conseiller avant l'ouverture des marchés -- et si vous ne le désactivez pas, ne le surchargez pas, ne modifiez pas l'horizon temporel -- alors le conseiller ne fonctionnera jamais, car le drapeau sera toujours dans l'état "non".

p.s. Fil de conseils amusants

p.s.2. Particulièrement étrange quand ils disent cela dans un marché fermé

MarketInfo(Symbol(), MODE_BID)

donne ZERO.

 

Vérifier le décalage entre les ticks et en déduire une transaction fermée sur cette base est une mauvaise décision.

 
avtomat:

Vérifier le décalage entre les ticks et en déduire une transaction fermée sur cette base est une mauvaise décision.

Cependant :
1) si la réponse n'est pas "les transactions sont-elles fermées", mais "est-il possible d'ouvrir une transaction à ce prix" (dans les conditions actuelles) ;
2) savoir à l'avance que si une cotation a plus de xx minutes, le serveur est assuré de renvoyer des cotations non conformes lors d'une tentative d'ouverture d'un ordre ;
alors ce serait acceptable. IMHO, bien sûr.
 

Cette questiona fait l'objet de discussions pour MT5.

L'option correcte pour moi est d'utiliser SymbolInfoSessionTrade() pour déterminer si des transactions sont disponibles.


//+------------------------------------------------------------------+
//|Открыта ли торговая сессия                                        |
//|                                                 Copyright,Sergeev|
//|                           https://login.mql5.com/ru/users/sergeev|                 
//+------------------------------------------------------------------+
bool IsTradeSessionOpen()
  {
   MqlDateTime _DateTime;
   datetime _TimeCurrent=TimeTradeServer(_DateTime);

// проверяем время торгов по инструменту
   datetime _TradeEnd=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME);
   if(_TimeCurrent>_TradeEnd && _TradeEnd>0) return(false);

   datetime _TradeStart=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_START_TIME);
   if(_TimeCurrent<_TradeStart && _TradeStart>0) return(false);

// проверяем сессии инструмента
   datetime _DayStart=_TimeCurrent/(60*60*24); _DayStart*=(60*60*24); // начало текущего дня
   datetime _sec=_TimeCurrent-_DayStart; // число секунд от начала дня

   for(int i=0; i<10; i++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
      datetime _from,_to;
      if(!SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)_DateTime.day_of_week,i,_from,_to)) break; // данные сессии
      if(_sec>=_from && _sec<=_to) return(true);
     }
   return(false);
  }
Как узнать, что по выходным нет торговли?
Как узнать, что по выходным нет торговли?
  • www.mql5.com
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :). - - Категория: общее обсуждение
 
Kino:

J'ai basculé le Conseiller Expert en mode OnTimer() et maintenant quand le marché est fermé il ne comprend pas cela et essaye de trader, en général il contacte le serveur et bien sûr reçoit des erreurs et bloque les logs. GetLastError() = Le marché est fermé. Quelles autres conditions peuvent être utilisées pour vérifier si le marché est fermé ou en week-end ?

Durée = (valeur définie en millisecondes. Par exemple, 6 heures = 1000*60*60*6)

si(GetLastError()==132(le marché est fermé) ) Sleep (Durée) ;

 

Une fois, j'ai expérimenté avecSymbolInfoSessionTrade() et Quote et il s'est avéré que les données de ces fonctions ne correspondent qu'approximativement à la réalité, et dans certains cas pas du tout.

Peut-être qu'une combinaison de plusieurs contrôles donnera une réponse sans ambiguïté à la question de savoir si l'échange est terminé ?

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4
 

Wow, c'est beaucoup de texte.

MarketInfo(Symbole(),MODE_TRADEALLOWED)