質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

2回答

456閲覧

オーダーデリートによる2重の処理

nisei2

総合スコア19

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2020/09/13 13:09

前提・実現したいこと

現在、FXトレーダー実践プログラミング 現代の錬金術シリーズという本で勉強しておりその中でちょっとわからない処理があり教えてほしい。

発生している問題・エラーメッセージ

下記のコードは本からそのまま書いたものです。 僕の中では、for文でオーダーの選択を行いその後オーダーデリート関数とチケット番号を取得する関数で待機注文をキャンセル。 そのあとif文で成行買いでも成行売りでもなければ再びオーダーデリート関数とチケット番号を取得する関数で待機注文をキャンセル するという解釈になっているのですがどうして2回のデリート処理が必要なのでしょうか?

該当のソースコード

MQL4

1for(int i=0;i<OrdersTotal();i++) 2{ 3if(OrderSelect(i,SELECT_BY_POS)==false)break; 4if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic)continue; 5OrderDelete(OrderTicket());   ←ここ 6if(OrderType()!=OP_BUY&&OrderType()!=OP_SELL) 7} 8OrderDelete(OrderTicket());   ←ここ 9break; 10} 11}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

mahさんの言うとおり誤植だと思います、1つ目のOrderDeleteは不要ですね。
ちなみに、このfor文の記述では正常に動作しないケースがあるので、
OrderSelect()に関係するfor文は昇順ではなく降順にした方が良いと思います。
http://metatradermania.blog24.fc2.com/blog-entry-56.html

投稿2020/09/13 22:20

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisei2

2020/09/13 22:27

for文は昇順、降順を気にした方がいいんですね、ありがとうございます!
guest

0

ベストアンサー

Google booksでプレビューが見れたので確認してみましたが、誤植ではないでしょうか。
直前の説明に書いてあるとおり、OP_BUYとOP_SELL以外でOrderDeleteしたかったのだと思います。

投稿2020/09/13 17:26

mah

総合スコア591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisei2

2020/09/13 22:27

そうだったのですか、これですっきりしました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問