改めて前回の内容をおさらいをしておくと、
- 待機注文の価格(指値価格やSL,TPなど)修正にはメンバ変数 .actionに設定する定数値をTRADE_ACTION_MODIFYに設定する。
- TRADE_ACTION_SLTPはすでに保有しているポジションに対してのSLTP変更をしたい時に使うのに対して、TRADE_ACTION_MODIFYは、注文は出したものの、まだ指値価格に到達しておらず、ポジション保有に至っていない待機注文の変更をしたい時に使うものなので違いに注意する。
- 待機注文の修正にあたり、待機注文の数のチェックにはOrdersTotal関数を使う。
- PositionsTotal関数であり、待機注文の数を把握するOrdersTotal関数との違いに注意する。
ということをお伝えしました。
今回は 待機注文の削除する記述 についてお話ししたいと思います。
待機注文を削除するには TRADE_ACTION_REMOVE を使う
待機注文を削除するには メンバ変数 .actionに設定する定数値をTRADE_ACTION_REMOVE にします。
待機注文の削除は非常に簡単で、.actionへの設定をTRADE_ACTION_REMOVEにしてしまえば、他に埋めるべきメンバ変数は、オーダー番号を格納する.orderだけです。
※くどいようですが、ポジションを識別するポジション番号との違いには注意しましょう。
※MqlTradeResult構造のメンバ変数 である.deal に格納されている 約定番号については→コチラをご覧ください。
今回は公式リファレンスにあるTRADE_ACTION_REMOVEのサンプルコードを特に加工せずに挙動を試します。公式リファレンスにあるTRADE_ACTION_REMOVEのサンプルコードは以下のようになっています。↓
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+------------------------------------------------------------------+
//| 未決注文の削除 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- リクエストと結果の宣言と初期化
MqlTradeRequest request={};
MqlTradeResult result={};
int total=OrdersTotal(); // 保有未決注文数
//--- 全ての保有未決注文を取捨
for(int i=total-1; i>=0; i--)
{
ulong order_ticket=OrderGetTicket(i); // 注文チケット
ulong magic=OrderGetInteger(ORDER_MAGIC); // 注文のMagicNumber
//--- MagicNumberが一致している場合
if(magic==EXPERT_MAGIC)
{
//--- リクエストと結果の値のゼロ化
ZeroMemory(request);
ZeroMemory(result);
//--- 操作パラメータの設定
request.action=TRADE_ACTION_REMOVE; // 取引操作タイプ
request.order = order_ticket; // 注文チケット
//--- リクエストの送信
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
//--- 操作情報
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
}
}
<サンプルコード内の各記述要素復習用リンク↓>
- #define命令
- マジックナンバー
- OnStart関数
- MqlTradeRequest構造体
- MqlTradeResult構造体
- for文
- OrdersTotal関数
- .order
- .action
- OrderSend関数
- OrderGetTicket関数
- OrderGetInteger関数
↓の動画は公式リファレンスにある上記のTRADE_ACTION_REMOVE用サンプルコードを待機注文がある状態のデモ口座に適用した様子です。
まとめ
今回は 待機注文の削除する記述 について解説しました。
今回の記事では以下のことを学びました。
- 待機注文の削除するには メンバ変数 .actionに設定する定数値をTRADE_ACTION_REMOVE にする。
- 待機注文の削除は、.actionへの設定をTRADE_ACTION_REMOVEにしてしまえば、他に埋めるべきメンバ変数は、オーダー番号を格納する.orderだけである。
今回は以上になります。
なお、待機注文に関しては、今後の講座でもオリジナル関数やクラスを作ったり、実際に待機注文用のEA(自動売買プログラム)を作ったりする記事を用意しておりますので、楽しみにMQL5の勉強を進めていただければと思います。待機注文に関する今後の講座記事は以下のようなものになります。↓
- MQL5 EA講座 第86回「待機注文関数を作る-その1-」
- MQL5 EA講座 第87回「待機注文関数を作る-その2-」
- MQL5 EA講座 第88回「待機注文情報取得用のクラスを追加する」
- MQL5 EA講座 第89回「待機注文情報取得用クラスにpublic関数を実装する」
- MQL5 EA講座 第90回「待機注文を修正する関数を実装する」
- MQL5 EA講座 第91回「待機注文を削除する関数を実装する」
- MQL5 EA講座 第92回「待機注文クラスを使ってEAを作る」
最後までお読みいただきありがとうございました<m(__)m>
【超入門】MQL5 EA講座 第66回「待機注文の注文修正」【EAの作り方】←
→【超入門】MQL5 EA講座 第68回「簡単な仕組みのEAを作るーその1ー」【EAの作り方】
待機注文を使ったコード記述については、講座記事とは別に以下のような記事もありますので、参考にしてください↓
コメント