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

 
Vladimir Karputov:

Et voilà :


Un autre élément important est la manière dont vous actualisez les prix (et les actualisez-vous tout court ?). Le spread - comment l'obtenir ?

    double point, price, ask, bid;
    ulong digits;

    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, ask)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_ASK, bid)) return(true);
    if(!SymbolInfoInteger(symbol, SYMBOL_DIGITS, digits)) return(true);
    if(!SymbolInfoDouble(symbol, SYMBOL_POINT, point)) return(true);
SymbolInfoInteger(symbol, SYMBOL_SPREAD);
 
Mikhail Sergeev:

Donc, pour une référence future :

1.SymbolInfoDouble

Si cette fonction est utilisée pour obtenir des informations sur le dernier tick, il est préférable d'utiliserSymbolInfoTick(). Il est tout à fait possible qu'il n'y ait pas eu de cotation pour ce symbole depuis le moment où le terminal s'est connecté au compte de trading. Dans ce cas, la valeur demandée sera indéfinie.

2. Il est préférable de considérer l'écart comme la différence entre l'offre et la demande.

3. Niveau de gel : recherchez la valeur maximalesur trois (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL et spread calculé) et multipliez-la par trois et vous serez satisfait.

Le point 3 a été déduit en pratique en travaillant avec KodoBase (et le validateur est le même dans KodoBase et Market).
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Vladimir Karputov:

Donc, pour une référence future :

1.SymbolInfoDouble

Si cette fonction est utilisée pour obtenir des informations sur le dernier tick, il est préférable d'utiliserSymbolInfoTick(). Il est tout à fait possible qu'il n'y ait pas eu de cotation pour ce symbole depuis le moment où le terminal s'est connecté au compte de trading. Dans ce cas, la valeur demandée sera indéfinie.

2. Il est préférable de considérer l'écart comme la différence entre l'offre et la demande.

3. Niveau de gel : recherchez la valeur maximalesur trois (SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_STOPS_LEVEL et spread calculé) et multipliez-la par trois et vous serez satisfait.

Le point 3 a été déduit en pratique en travaillant avec KodoBase (et le validateur est le même dans KodoBase et Market).

Merci beaucoup ! Je vais faire quelques changements maintenant et l'essayer.

 
Mikhail Sergeev:

Merci beaucoup ! Je vais faire les changements maintenant et faire un essai.

Oui, le résultat sera intéressant.

 
Vladimir Karputov:

Oui, le résultat sera intéressant.

Problème résolu ! Cela s'est avéré très simple, pour supprimer un ordre, il faut remplir le formulairerequest.symbol.

Je n'ai pas trouvé d'informations structurées sur les données à transmettre à la requête en fonction du type de transaction. Et j'ai utilisé l'exemplehttps://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

Il n'est pas là.


J'ai vérifié de nombreuses variantes avec le gel. Dans mon cas, la taille unique était suffisante.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Торговля осуществляется посредством отправки с помощью функции OrderSend() приказов на открытие позиций, а также приказов на установку, модификацию и удаление отложенных ордеров. Каждый торговый приказ содержит указание на тип запрашиваемой торговой операции. Торговые операции описаны в перечислении ENUM_TRADE_REQUEST_ACTIONS...
 
Mikhail Sergeev:

Problème résolu ! Cela s'est avéré très simple, pour supprimer un ordre, il faut remplir le formulairerequest.symbol.

Je n'ai pas trouvé d'informations structurées sur les données à transmettre à la requête en fonction du type d'opération commerciale. Et j'ai utilisé l'exemple https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions.

Il n'est pas là.


J'ai vérifié de nombreuses variantes avec le gel. Dans mon cas, la taille unique était suffisante.

Pourquoi avez-vous besoin de telles complications ? Utilisez la classe de commerce CTrade.

 
Vladimir Karputov:

Pourquoi se donner tant de mal ? Utilisez la classe de trading CTrade.

Malheureusement, ce problème existe depuis MT4. Il était plus facile de l'adapter.


Je ne sais pas ce qu'il en est de CTrade, mais il semble que partout où vous devez spécifier un symbole, celui-ci est présent dans les paramètres transmis à la méthode. Et il n'est pas présent dans la méthode OrderDelete(const ulong ticket), donc il ne fonctionnera pas. Nous devrions remplir le request.symbol quelque part à l'avance.

 
Mikhail Sergeev:

Malheureusement, cela existe depuis MT4. Il était plus facile de s'adapter.


À propos de CTrade - Je n'ai pas compris, mais il semble que partout où vous devez spécifier un symbole, il se trouve dans les paramètres transmis à la méthode. Et il n'est pas présent dans la méthode OrderDelete(const ulong ticket), donc il ne fonctionnera pas. Nous devons remplir le request.symbol quelque part.

Qu'est-ce qui ne marchera pas ? Il s'agit d'une classe de commerce : elle établit, modifie et supprime les ORDRES À DISTANCE, et ouvre, modifie et ferme les POISONS.

Absolument tout fonctionne. Et tout est écrit en une seule ligne par n'importe quelle commande commerciale.


CTrade

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Qu'est-ce qui ne marchera pas alors ? Il s'agit d'une classe de négociation : elle établit, modifie et supprime les ORDRES À DISTANCE, ouvre, modifie et ferme les POISONS.

Absolument tout fonctionne. Et tout est écrit en une seule ligne par n'importe quelle commande commerciale.


CTrade

//+------------------------------------------------------------------+
//| Delete specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(const ulong ticket)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.magic     =m_magic;
   m_request.order     =ticket;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Donc je ne comprends pas à quel moment m_request.symbol est rempli.

Bref, problème résolu. Merci encore beaucoup pour votre aide !

 
Mikhail Sergeev:

Donc je ne comprends pas à quel moment m_request.symbol est rempli.

Bref, problème résolu. Merci encore pour votre aide !

Prenez un débogueur à traversCTrade et vous verrez où le symbole est allé :)

Raison: