はじめに
ここでは、MQL4でEAを作る際によく使われる「OrderSelect()関数」の役割と正しい使い方を、初心者向けに解説します。
OrderSelect()を何となく使っていませんか?
「とりあえず入れておけばいいけど、正直どこで使うのが正解か分からない」
そんな状態の方も多いと思います。
私もEAを作りだしてから半年間ぐらいまではOrderSelect()関数をそこら中にいれてEAをとにかく動かす・・・、みたいなことをやっていました。今回はそのOrderSelect()関数を、正確に、必要な場所にだけ入れられるようになる考え方をお伝えします。
OrderSelect()関数とは?
そもそも、OrderSelect()関数って何者?と思っている方もいるかもしれません。私もその一人でした。とりあえず変更注文や決済注文する前に入れておけばいいみたいな考え方でした。まぁ、この考えでほぼ大丈夫なんですが・・・。
ポジションが1つだけだったら上記の考えだけで大丈夫ですが、複数ポジションを持つようなEAを作り始めるとそうは言っていられなくなってきます。
実際の操作からイメージする
では、OrderSelect()関数って何をしている機能なのか?これ実はめちゃくちゃ簡単です。
MT4の実際の操作で答えられるので見ていきましょう。

MT4で取引タブを選んで・・・

ポジションを1つ選択する。
はい、これです。これだけ!
OrderSelect()関数は実際の操作でいうと、ポジションをクリック(選択)することなんです。どうですか?意外と簡単な事ではなかったでしょうか?
でもこんな選択するだけの機能なんているんでしょうか・・・?それは、次で答えます。
OrderSelect()関数を使う理由
OrderSelect()関数が『ポジションを選択すること』っていうのは分かったけど、じゃあ何故OrderSelect()関数を使うんでしょうか?
簡単です!これも実際の操作で考えます。実際ポジションをクリック(選択)する時って何をするためですか?

そう。特定のポジションを決済したい時とかには選択して決済ボタン押しますよね。
※ストップロス変更したりする変更注文も同じですよね
EAでポジションを決済したい時も、OrderSelect()関数を使って決済したいポジションを選択してあげないと、どのポジションを決済したらいいのかわかりません。ポジションが1つだけだといいですが、ポジションが2つ以上あった場合、決済したくない方を決済しちゃったら大変ですよね。
なので決済するポジションを選択してあげるためにOrderSelect()関数を使うわけですね。
という事で、OrderSelect()関数はポジションをクリック(選択)する事です。その名の通りですね!
ポジションが複数ある場合にEAで決済や変更注文する場合は必須の関数となります。
OrderSelect()関数の使い方
OrderSelect()関数の使い方ですが、引数が3つあり、戻り値はTrue かFalseです。とても簡単ですので全て理解しましょう。
OrderSelect(引数1,引数2,引数3)= [True or False] ; (例) OrderSelect(0,SELECT_BY_POS,MODE_TRADES)= True;
引数のパターンは大きく2パターンあります。今回はよく使う方の1パターン目を覚えましょう。
- 引数1・・・注文インデックスを指定します。最新のポジションは0、1つ前は1という感じです。
- 引数2・・・SELECT_BY_POSと指定します。
- 引数3・・・注文プールを選択します。MODE_TRADESとした場合はエントリー中の注文(保留中の注文も含まれる)で、MODE_HISTORY とした場合は過去の履歴注文を選択します。
続いて2パターン目。こちらはチケット番号で管理したい場合に使うので上級者向けです。引数のみの説明でとりあえず今回は説明から省きます。
- 引数1・・・チケット番号を指定します。ポジションについている固有の番号。
- 引数2・・・SELECT_BY_TICKETと指定します。
- 引数3・・・MODE_TRADESと指定します。 ※SELECT_BY_TICKETの場合、MODE_HISTORYは使えない
まずは、1パターン目の内容だけは覚えましょう。
引数1はそのままで0とすれば最初のポジション、1としたら次のポジションです。最新のポジションの方が大きい値になります。例えばポジションを2つ持っている場合、最新のポジションを持ったのを選択したい場合は1とします。最初に持ったものを選択したい場合は0とします。
引数2は、SELECT_BY_POSかSELECT_BY_TICKETを選択するだけですが、SELECT_BY_TICKETとしてしまうと引数1にチケット番号をセットしないといけなくなるので、SELECT_BY_POSが簡単です。
引数3は、MODE_TRADESかMODE_HISTORYを選択するだけです。現在のポジションはMODE_TRADESとし、過去の履歴を見たい場合はMODE_HISTORYとします。
ここで、過去の履歴というものが初めて出てきましたが説明していきます。
OrderSelect()関数で過去履歴を見る
OrderSelect()は大きく2つの用途で使います。
1つは冒頭から説明している現在保持しているポジションを選択するための用途です。
もう1つはこれから説明する過去のポジション(トレード履歴)を確認するための用途です。過去のポジションの確認はあまりしないかもしれないですが、今後使うかもしれないので覚えておきましょう。
こんな感じです。
過去履歴の活用方法を実際の操作からイメージする
過去の注文を選択する場合も実際の操作からイメージしてみましょう。

MT4で口座履歴タブを選んで・・・

決済した内容を選択する。
人間は一覧だけみたら決済内容を確認できるんですが、EAは一覧をざーっと1発で確認することができません。そのため、欲しい情報を1行選択してあげる必要があるんですね。こうやって、1つ前に決済したポジションはプラスだったのかとか、ショートだったのかロングだったのか、いくらで決済したのかをEAでも見る事ができます。
この情報を元に次のエントリーに生かしたりできるわけですね。
それを踏まえて、最新取引履歴の損益額を出力するサンプルはこんな感じです。
※EAのマジックナンバーが9999の想定
for(int cnt = OrdersHistoryTotal(); cnt > 0; cnt--){
if(OrderSelect(cnt-1,SELECT_BY_POS,MODE_HISTORY) == true){
if(OrderMagicNumber() == 9999){
Print(OrderProfit());
break;
}
}
}❓ OrderSelect()に関するよくある質問【MQL4初心者向けQ&A】
💬 OrderSelect()の役割や使いどころ、初心者がつまずきやすいポイントをQ&A形式でまとめました。
OrderSelect()は、EAが操作対象とする「特定のポジション(注文)」を選択するための関数です。
人間がMT4でポジションをクリックして選択する操作と同じ役割を持っています。
EAは複数のポジションを同時に保持することがあり、
OrderSelect()を使わないと「どのポジションを決済・変更するのか」を特定できません。
特に複数ポジションを扱うEAでは必須の関数です。
ポジションが1つだけの場合は動作することもありますが、
将来ポジションが複数になった際にバグの原因になります。
安定したEAを作るためには、必ずOrderSelect()を使うのが安全です。
SELECT_BY_POS は「注文の並び順(インデックス)」で選択する方法で、初心者向けです。
SELECT_BY_TICKET は「チケット番号」で選択する方法で、上級者向けの管理方法になります。
MODE_TRADES は現在保有しているポジションや未決済注文を対象にします。
MODE_HISTORY はすでに決済された過去のトレード履歴を対象にする場合に使います。
OrderSelect()は成功すると true、
選択に失敗すると false を返します。
必ず戻り値をチェックしてから処理を書くのが安全です。
OrderSelect()の戻り値を確認せず、
OrderProfit()やOrderType()などを直接使ってしまうことがよくあるミスです。
必ずOrderSelect()が成功した後に情報を取得しましょう。
ナンピンEA、複数ポジションを同時に持つEA、
マジックナンバーでポジション管理を行うEAでは、
OrderSelect()の理解が必須になります。
さいごに
以上が、『OrderSelect()を正しく使えるようになる考え方』です。
OrderSelect()関数って漠然と言われると、何してるんだろう?ってなるかもしれないですが実際の人間の動作で考えると簡単です。使う意味とかどこで使ったらいいのかがわかってきますよね。
OrderSelect()関数が正しく使えるようになれば、複数ポジションを扱うEAを作れたりマジックナンバーの意味が理解できてくるので、分からない方は頑張って理解していきましょう。
✅ 今回のロジックをベースにしたEAサンプルも多数公開中
今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。
ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。
📊 EA運用・検証フェーズに進みたい方へ
今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」、「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。
EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。










コメント