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.
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 эксперта//+------------------------------------------------------------------+//| Модификация отложенных ордеров |//+------------------------------------------------------------------+voidOnStart()
{
//-- объявление и инициализация запроса и результата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); // нормализованная цена открытия
}
elseif(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); // нормализованная цена открытия
}
elseif(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); // нормализованная цена открытия
}
elseif(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 entrePositionGetDouble(POSITION_PRICE_OPEN) et cetexemple qui concerne les ordres en attente ? Peut-être, il devrait y avoir une ligne comme ça :
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 ?
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.
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.
comment faire ?
GCP sur le graphique -> Modèles -> Enregistrer le modèle
Nom du fichier : default.tpl
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 commercialeC'est clair. Je suis suivi d'un exemple avec le code suivant :
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 :
Je ne le trouve que dans l'onglet Experts : Chers experts, aidez-moi à comprendre cet exemple, pourquoi il est dans le répertoire, mais son code ne fonctionne pas ?
Salutations, Vladimir.
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.
Bon après-midi. Pouvez-vous me dire comment retirer le dépôt sur la carte ?
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.
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.
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.