Erreurs, bugs, questions - page 3163

 
user4321 #:

comment faire ?

GCP sur le graphique -> Modèles -> Enregistrer le modèle
Nom du fichier : default.tpl

 
Dans certains cas (je n'ai jamais trouvé de modèle), lors de la compilation de code avec unevariable déclarée inutilisée,MetaEditor5 n'avertit pas de la variable inutilisée.
 

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

Toutes les questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.

MrBrooklin, 2022.02.25 07:15

Bonjour, chers experts !

Aujourd'hui, j'ai été confronté à deux autres problèmes que je ne comprends pas, mais cette fois-ci, ils se trouvent dans le code tiré de la référence MQL5 dans son intégralité. Cette fois, je n'ai rien écrit moi-même, mais j'ai simplement pris un exemple tout fait.

J'ouvre MQL5 Reference / Constantes, énumérations et structures / Structures de données / Structure d'une demande commerciale. Je le trouve là :

Structure de la demande commerciale
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
    action
    order
    price
    sl
    tp
    type_time
    expiration
 Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:

C'est clair. Je suis suivi d'un exemple avec le code suivant :

#define  EXPERT_MAGIC 123456  // MagicNumber эксперта
//+------------------------------------------------------------------+
//| Модификация отложенных ордеров                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//-- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебор всех установленных отложенных ордеров
   for(int i=0; i<total; i++)
     {
      //--- параметры ордера
      ulong  order_ticket=OrderGetTicket(i);                             // тикет ордера
      string order_symbol=Symbol();                                      // символ
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // количество знаков после запятой
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // текущий объем ордера
      double sl=OrderGetDouble(ORDER_SL);                                // текущий Stop Loss ордера
      double tp=OrderGetDouble(ORDER_TP);                                // текущий Take Profit ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      int offset = 50;                                                   // отступ от текущей цены для установки ордера, в пунктах
      double price;                                                      // цена срабатывания ордера
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // размер пункта
      //--- вывод информации об ордере
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает, Stop Loss и Take Profit не заданы
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // тип торговой операции
         request.order = OrderGetTicket(i);                            // тикет ордера
         request.symbol   =Symbol();                                   // символ
         request.deviation=5;                                          // допустимое отклонение от цены
        //--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типа
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         //--- отправка запроса
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
         //--- информация об операции   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- обнуление значений запроса и результата
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

J'essaie de comprendre la ligne surlignée en jaune. Une question se pose immédiatement : quel est le rapport entre PositionGetDouble(POSITION_PRICE_OPEN) et cetexemple qui concerne les ordres en attente ? Peut-être, il devrait y avoir une ligne comme ça :

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
C'est le premier point. Le deuxième problème survient lorsque j'essaie d'exécuter ce script sur un graphique avec un ordre en attente BUY_STOP que j'ai défini (bien que tout ce qui est similaire se passe avec d'autres types d'ordres en attente). Alors, que se passe-t-il ? Rien ne se passe ! Je ne vois pas de modification d'un ordre en cours. Peut-être, je ne comprends pas quelque chose ?

Je ne le trouve que dans l'onglet Experts :
2022.02.25 08:41:38.491 4 (EURUSD,M1)   #4727791  EURUSD  ORDER_TYPE_BUY_STOP  0.10  0.00000  sl: 0.00000  tp: 0.00000  [0]
Chers experts, aidez-moi à comprendre cet exemple, pourquoi il est dans le répertoire, mais son code ne fonctionne pas ?

Salutations, Vladimir.

 
Bon après-midi. Pouvez-vous me dire comment retirer un dépôt sur une carte ?
 
801765632 #:
Bonjour. Pouvez-vous me dire comment retirer le dépôt sur la carte ?

Il s'agit du site web du développeur de la plate-forme de négociation. Ce n'est pas un courtier, ce n'est pas un DC, il n'y a pas de comptes de trading réels.

C 'est clairement indiqué au bas de la page :


Veuillez poser ces questions à votre courtier - qui a transféré l'argent sur votre compte de trading.

 
801765632 #:
Bon après-midi. Pouvez-vous me dire comment retirer le dépôt sur la carte ?
Veuillez contacter le courtier avec lequel vous avez ouvert un compte réel.
 

Chers développeurs ! Pourquoi dans les deuxième et troisième appels (T* const Ptr) est surchargé au lieu de (T* & Ptr) ?

Est-ce un bogue ou une fonctionnalité ? b3213.


template <typename T>
void f1(T* const Ptr) {Print(__FUNCSIG__);}

template <typename T>
void f1(T* & Ptr) {Print(__FUNCSIG__);}


class X {};

void OnStart()
  {
   const X* Ptr = new X;

   f1(Ptr);                                //void f1<const X>(const X*&)
   f1((X*)Ptr);                            //void f1<X>(X*const)
   f1((const X*) Ptr);                     //void func_902::f1<const X>(const X*const)

   delete Ptr;
  }
 
Roman #:

GCP sur le graphique -> Modèles -> Enregistrer le modèle
Nom du fichier : default.tpl

Il existe un tel modèle par défaut. Je l'ai remplacé. Ça n'a pas aidé, hélas. C'est toujours la même chose quand on passe de l'un à l'autre.

Savez-vous comment écrire aux développeurs ? Il est certain que cela leur a déjà été signalé quelques centaines de fois, eh bien, je vais écrire à nouveau.

 

Lors du défilement, l'en-tête des signaux se déplace.


 
mktr8591 #:

Chers développeurs ! Pourquoi dans les deuxième et troisième appels (T* const Ptr) est surchargé au lieu de (T* & Ptr) ?

Est-ce que c'est un bug ou une anomalie ?


C'est ainsi qu'il est conçu, le résultat d'une opération de cast ne peut pas être transmis par référence.