Merci, Sergey, pour votre réponse ! Votre réponse m'a laissé encore plus perplexe. Comment est-ce possible ? Lorsque je lance le script, tous les ordres en attente sont interrogés. Comme on peut le voir sur l'image, il y en a deux sur le graphique, et en même temps, un ticket est sélectionné et l'autre non ? Ce n'est pas très clair.
Pouvez-vous l'expliquer plus en détail ?
Je ne pose pas cette question par pure curiosité, mais dans le but de poursuivre l'auto-apprentissage.
Salutations, Vladimir.
Ici, vous avez une boucle où vous changez l'itérateur i de l'indice maximum à 0. Que se passe-t-il à l'intérieur ? Eh bien, voici ce qui se passe : la première commande que vous essayez d'obtenir le paramètre ORDER_SYMBOL. Mais de quel ordre essayez-vous de l'obtenir, car l'ordre sera sélectionné trois lignes plus bas !
Sergey Gridnev #: Vous avez donc une boucle dans laquelle vous faites passer l'itérateur i de l'indice maximal à 0. Que se passe-t-il à l'intérieur ? Eh bien, voici ce qui se passe : la première commande que vous essayez d'obtenir le paramètre ORDER_SYMBOL. Mais, de quel ordre essayez-vous de l'obtenir, car l'ordre sera sélectionné trois lignes plus bas !
Merci, Sergey, pour cette explication très détaillée et compréhensible ! J'ai mis la ligne avec le ticket d'ordre en attente juste après le début du cycle et tout a bien fonctionné.
Oui ... Faites attention et faites attention encore une fois. C'est ce qui me manque vraiment. Merci encore !
Aujourd'hui, j'ai été confronté à deux autres problèmes que je ne comprends pas, mais dans un code entièrement tiré de la référence MQL5. 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 la première chose. 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 ?
Sasha, il n'y a rien depire que d'utiliser des exemples tirés de la documentation ou des exemples de tumblr. Et vous avez également perdu le drapeau de terminaison forcée de la boucle while quelque part. En tout et pour tout... pas de mots.
Je doute que les exemples écrits dans la documentation et même dans la bibliothèque standard soient vérifiés de manière approfondie. Ces erreurs sont légion. Les exemples, à mon avis, ne peuvent être utilisés que comme des échantillons... .
Je doute que les exemples écrits dans la documentation et même dans la bibliothèque standard soient soigneusement vérifiés. Il y a beaucoup d'erreurs de ce type. Les exemples, à mon avis, ne peuvent être utilisés qu'à titre d'exemples... .
Bonjour Alexey !
Il est très triste qu'une entreprise aussi sérieuse ait une attitude aussi peu respectueuse des manuels.
Il est très triste qu'une entreprise aussi sérieuse ait une attitude aussi peu sérieuse à l'égard du manuel.
Sincèrement, Vladimir.
Il y a une autre erreur dans cet exemple. Ou complètement aveugle.
Parmi les champs obligatoires énumérés, il y a une expiration, mais dans le code de l'exemple, je ne vois pas où l'expiration est attribuée. Au lieu de cela, l'écart admissible par rapport au prix est attribué.
Il y a encore une erreur dans cet exemple. Ou suis-je devenu complètement aveugle...
Parmi les champs obligatoires énumérés, il y a l'expiration, mais dans l'exemple de code, je ne vois pas où l'expiration est affectée. Au lieu de cela, l'écart autorisé par rapport au prix est spécifié.
Non seulement le temps d'expiration, mais il devrait être là aussi :
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Merci, Sergey, pour votre réponse ! Votre réponse m'a laissé encore plus perplexe. Comment est-ce possible ? Lorsque je lance le script, tous les ordres en attente sont interrogés. Comme on peut le voir sur l'image, il y en a deux sur le graphique, et en même temps, un ticket est sélectionné et l'autre non ? Ce n'est pas très clair.
Pouvez-vous l'expliquer plus en détail ?
Je ne pose pas cette question par pure curiosité, mais dans le but de poursuivre l'auto-apprentissage.
Salutations, Vladimir.
Vous avez donc une boucle dans laquelle vous faites passer l'itérateur i de l'indice maximal à 0. Que se passe-t-il à l'intérieur ? Eh bien, voici ce qui se passe : la première commande que vous essayez d'obtenir le paramètre ORDER_SYMBOL. Mais, de quel ordre essayez-vous de l'obtenir, car l'ordre sera sélectionné trois lignes plus bas !
Merci, Sergey, pour cette explication très détaillée et compréhensible ! J'ai mis la ligne avec le ticket d'ordre en attente juste après le début du cycle et tout a bien fonctionné.
Oui ... Faites attention et faites attention encore une fois. C'est ce qui me manque vraiment. Merci encore !
Sincèrement, Vladimir.
Bonjour, chers experts !
Aujourd'hui, j'ai été confronté à deux autres problèmes que je ne comprends pas, mais dans un code entièrement tiré de la référence MQL5. 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.
Chers experts, veuillez m'aider à comprendre cet exemple, pourquoi est-il dans le livre de référence, mais son code ne fonctionne pas ?
Sincèrement, Vladimir.
J'ai écrit à ce sujet il y a quelques pages.
C'est le forum pour le trading, les systèmes de trading automatisés et les tests de stratégies.
Toutes questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.
Alexey Viktorov, 2022.02.20 10:24
Sasha, il n'y a rien de pire que d'utiliser des exemples tirés de la documentation ou des exemples de tumblr. Et vous avez également perdu le drapeau de terminaison forcée de la boucle while quelque part. En tout et pour tout... pas de mots..
J'ai écrit à ce sujet il y a quelques pages
.
Bonjour Alexey !
Il est très triste qu'une entreprise aussi sérieuse ait une attitude aussi peu respectueuse des manuels.
Sincèrement, Vladimir.
Bonjour Alexey !
Il est très triste qu'une entreprise aussi sérieuse ait une attitude aussi peu sérieuse à l'égard du manuel.
Sincèrement, Vladimir.
Il y a une autre erreur dans cet exemple. Ou complètement aveugle.
Parmi les champs obligatoires énumérés, il y a une expiration, mais dans le code de l'exemple, je ne vois pas où l'expiration est attribuée. Au lieu de cela, l'écart admissible par rapport au prix est attribué.
Il y a encore une erreur dans cet exemple. Ou suis-je devenu complètement aveugle...
Parmi les champs obligatoires énumérés, il y a l'expiration, mais dans l'exemple de code, je ne vois pas où l'expiration est affectée. Au lieu de cela, l'écart autorisé par rapport au prix est spécifié.
Non seulement le temps d'expiration, mais il devrait être là aussi :
Sincèrement, Vladimir.
Non seulement cela, mais il devrait également y avoir un délai d'expiration:
Sincèrement, Vladimir.
Je m'adresse à Artem Trishkin, le modérateur et organisateur de cette branche !
Pour votre part, avez-vous la possibilité de passer toutes les questions relatives au Guide MQL5 ?
Si cela ne vous dérange pas trop, pouvez-vous au moins mettre à jour cette page?
Sincèrement, Vladimir.Je m'adresse à Artem Trishkin, le modérateur et l'organisateur de ce fil de discussion !
Avez-vous, de votre côté, la possibilité de transmettre à MQL5 toutes les questions relatives au Guide MQL5 ?
Si cela ne vous dérange pas, cette page pourra au moins être mise à jour ?
Respectueusement, Vladimir.Vous pouvez également le signaler dans ce fil.
Vous pouvez également le signaler dans ce fil.
Je vais d'abord attendre la réponse dans ce fil, mais si rien ne se passe, je le signalerai dans le sujet Erreurs, bogues, questions.
Sincèrement, Vladimir.