自動売買で保有ポジションを選択するにはどうしたらいいの?
OrderSelect関数とは
自動売買システムに保有ポジションを決済させたいですよね!
決済するためには、保有ポジションを選択する必要があります。
そこで OrderSelect関数を使いましょう。
OrderSelect関数は、保有ポジションを1つ選択する関数です。
選択することで、そのポジションの情報を取得することができます。
例えば、以下の情報を取得できます。
・注文種別
・ロット数
・チケット番号
・注文日時 etc…
ちなみに OrderSelect関数は、あくまで保有ポジションを選択するだけの関数です。
OrderSelect関数を使って、情報を取得することはできないので、ご注意ください。
またOrderSelect関数は、保有ポジションの情報を取得するだけでなく、決済するときにも必ず使用する関数です。
自動売買ではトレードの基本となる関数なので、基本的な書き方をマスターしましょう。
OrderSelect関数の書き方
OrderSelect関数の書き方は、関数の書き方と同じです。
もし関数の使い方をマスターしていない方は、こちらの記事が参考になります。
基本的な書き方
OrderSelect関数の基本的な書き方は以下の通りです。
分かりやすいように、引数は省略しています。
bool OrderSelect( ①, ②, ③);
返り値は bool型で、引数は3つあります。
まずは返り値から見ていきましょう。
返り値(戻り値)
OrderSelect関数の返り値は、bool型です。
「true」または「false」が返ってきます。
数値にすると「1」または「0」が返ってきます。
正常にポジションを選択できた場合は、「true」が返ってきます。
正常にポジションを選択できなかった場合は、「false」が返ってきます。
このように OrderSelect関数は、bool型が返り値となっています。
引数
OrderSelect関数の引数は3つです。
まずは一覧で見てみましょう。
番号 | データ型 | 引数名 | 内容 |
① | int | index | 以下のどちらかを設定 ・インデックス ・チケット番号 |
② | int | select | 以下から選択方法を設定(上記のindexに合わせる) ・インデックス ・チケット番号 |
③ | int | pool | 以下のどちらかを設定 ・現在保有しているポジション ・過去保有していたポジション |
1つ1つ見ていきながら、一緒に OrderSelect関数を作っていきましょう。
①index
indexは、ポジションを選択するために、ポジションの番号を設定します。
番号には以下の2種類があります。
・インデックス
・チケット番号
インデックスとは、注文するときに自動的に割り振られた識別番号です。
保有しているポジションが1つの場合、「0」が割り振られます。
その後、ポジションが増えるごとに 1、2、3・・・と順番に割り振られる番号になります。
チケット番号とは、現在・過去に関わらず、ポジションに自動的に割り振られた固有番号です。
チケット番号は、ポジションによって全て異なっているため、同じ番号のポジションはありません。
そのため桁数が多く、FX会社によって異なりますが、8桁くらいの番号になります。
たいていの自動売買システムは、インデックスを使用しています。
インデックスの方が分かりやすいので、インデックスを使用すると良いでしょう。
bool select = OrderSelect( 0, ②, ③);
②select
selectは OrderSelect関数がポジションを選択するときの、選択方法を設定します。
こちらも以下の2つから選びます。
・インデックス(SELECT_BY_POS)
・チケット番号(SELECT_BY_TICKET)
もし ①index の引数で、インデックス番号を設定している場合、「SELECT_BY_POS」を選択します。
チケット番号を設定している場合、「SELECT_BY_TICKET」を選択します。
このように ①index の設定内容によって決まるので、してほしい選択方法を設定しましょう。
ここでは、インデックス番号を設定しますので、以下のように書きます。
bool select = OrderSelect( 0, SELECT_BY_POS, ③);
③pool
poolは、どんな状態のポジションから選択したいのかを設定します。
設定値は以下の2つです。
・現在のポジションから選択(MODE_TRADES)
・過去のポジションから選択(MODE_HISTORY)
例えば、現在保有しているポジションまたは、予約しているポジションから選択したい場合は、「MODE_TRADES」を設定します。
過去に決済したポジションまたは、キャンセルしたポジションから選択したい場合は、「MODE_HISTORY」を設定します。
ここでは、保有ポジションから選択したいので、以下のように書きます。
bool select = OrderSelect( 0, SELECT_BY_POS, MODE_TRADES);
OrderSelect関数の具体的な使い方(サンプルあり)
OrderSelect関数の基本的な書き方を解説しましたが、ここからは具体的な使い方について解説していきます。
OrderSelect関数はポジションを1つだけ選択する関数なので、for文を使って全てのポジションを選択する方法がよく使われます。
そのとき、for分の条件式に保有ポジション数が必要となりますので、OrdersTotal関数と組み合わせて使う場合が多いです。
例えば以下のようなプログラムです。
//保有ポジションを一つずつチェックしていく
for( int i = OrdersTotal() - 1; i >= 0; i--)
{
//保有ポジションを一つ選択
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
{
//ここにポジションを操作するプログラムを書く
}
}
上記のように、for文で1つずつポジションを選択し、ポジションを決済させたり、情報を取得したりします。
この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。
OrdersTotal関数の詳しい使い方は、こちらの記事が参考になります。
まとめ
OrderSelect関数は、ポジションを1つ選択する関数です。
ポジションの識別番号(インデックス)または、固有番号(チケット番号)を設定することで、選択することができます。
ポジションを決済させたいときや、情報を取得したいときに必ず使う関数なので、しっかり覚えておきましょう。
また、OrdersTotal関数と組み合わせて使われることが多いので、サンプルプログラムの書き方をコピーしておくと、自動売買を作りやすいと思います。