Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
action
order
price
sl
tp
type_time
expiration
Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:
これは明らかです。このコードで例題に続いています。
#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);
}
}
}
//+------------------------------------------------------------------+
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
セルゲイさん、ご回答ありがとうございました。お返事をいただいて、さらに戸惑いました。どうしてだろう?スクリプトを実行すると、設定されたすべての保留中の注文が照会されます。画像で見る限り、チャート上に2枚あり、同時に1枚は選択され、もう1枚は選択されないのですね。よくわからないのです。
もう少し詳しく説明していただけますか?
単なる好奇心ではなく、自習を続けるために質問しています。
ウラジミールさん、ありがとうございます。
つまり、イテレータiを最大インデックスから0に変更するループがあるわけですが、その内部はどうなっているのでしょうか。さて、どうなるかというと、最初のコマンドでORDER_SYMBOLパラメータを取得しようとすると、こうなります。しかし、どの順番で取得しようとしているかというと、3行下の順番が選択されるからです
セルゲイさん、とても丁寧でわかりやすい解説をありがとうございましたサイクルスタート直後に保留中のオーダーチケットのある行を入れれば、すべてうまくいきました。
はい ...注意して見てください。それが、私に本当に欠けているものなのです。いつもありがとうございます。
敬具 ウラジミール
尊敬する専門家の皆さん、おはようございます。
今日もまた、MQL5 Referenceから引用したコードで、理解できない問題に2つ直面しました。今回は自分で何も書かず、既成の例題を取り入れただけです。
MQL5 Reference / 定数・列挙・構造体 / データ構造 /取引要求の構造 を開いています。そこで見つける。
取引要求の構成これは明らかです。このコードで例題に続いています。
黄色でハイライトされている行を理解しようとしています。すぐに疑問が浮かびます。この例が保留中の注文に 関連しているのであれば、 PositionGetDouble(POSITION_PRICE_OPEN)はどう関係するのでしょうか?たぶん、こんなセリフがあるはずです。
エキスパート]タブにしか表示されません。 親愛なる専門家、この例を理解するために私を助けてください、なぜそれはディレクトリにありますが、そのコードは動作しませんか?
ウラジミールさん、ありがとうございます。
専門家の皆様、この例を理解するために私を助けてください、なぜそれが参考書にありますが、そのコードは動作しないのですか?
敬具 ウラジミール
数ページ前にも書きましたね。
トレーディング、自動売買システム、ストラテジーテストのためのフォーラムです。
MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
アレクセイ・ヴィクトロフ, 2022.02.20 10:24
サーシャドキュメントにある例や tumblrの例を使うより、もっと悪い ことは考えられないん ですね。また、whileループの強制終了のフラグもどこかに消えてしまっていますね。すべてにおいて......言葉がない。数ページ前にも書きましたが
アレクセイさん、こんにちは。
こんなに真面目な会社が、ハンドブックに対する姿勢が悪いのは、とても悲しいことです。
敬具 ウラジミール
アレクセイさん、こんにちは。
こんなに真面目な会社が、ハンドブックに対してこんなにも不真面目な態度をとっているのはとても悲しいことです。
敬具 ウラジミール
この例にはもう一つ間違いがあります。あるいは、完全に盲目になっているか。
必須項目の中に有効期限がありますが、例のコードでは有効期限がどこに割り当てられているのかがわかりません。その代わり、価格からの許容乖離幅を割り当てています。
この例には、まだ間違いがあります。それとも私が完全に盲目になってしまったのか...。
必須項目の中にexpirationがありますが、サンプルコードではexpirationが割り当てられていません。その代わり、価格からの許容偏差が規定されています。
賞味 期限切れだけでなく、そこそこあるはずです。
敬具 ウラジミール
それだけでなく、有効 期限を設けることも必要です。
敬具 ウラジミール
このブランチのモデレーター兼オーガナイザーのArtem Trishkinに宛てたものです!
あなたとしては、「MQL5 Guide to MQL」に関連する問題はすべて合格できる可能性があるのでしょうか?
もしご迷惑でなければ、せめてこのページを 更新していただけないでしょうか?
敬具 ウラジミールこのスレッドの司会者であり主催者であるArtem Trishkin氏に向かって言っているのです!
あなたとしては、MQL5ガイドに関連するすべての質問をMQL5に伝える可能性がありますか?
もしよろしければ、せめてこのページだけでも 更新していただけないでしょうか?
ウラジミールさん、謹んで申し上げます。また、このスレッドで 報告することもできます。
このスレッドでも 報告することができます。
Alexeyさん、ありがとうございます!まずはこのスレッドで回答を待ちますが、何もなければErrors, Bugs, Questions トピックで報告させていただきます。
敬具 ウラジミール