OrderSelect()関数は、注文を選択するために使用します。
OrderSelect()関数は、以下のように定義されています。
bool OrderSelect(
int index,
int select,
int pool=MODE_TRADES
);
各引数の意味は、以下のとおりです。
- int index
選択したい注文の「インデックス」か「チケット番号」を指定します。
「インデックス」とは、各注文に振られた「0」から始まる整数値です。具体的には、MetaTradr4(MT4)で「A」、「B」、「C」という順にポジションを保有した場合、「A」には「0」、「B」には「1」、「C」には「2」という番号(インデックス)が振られます。
したがって、注文「A」を選択したい場合には「0」を、注文「B」を選択したい場合には「1」を、注文「C」を選択したい場合には「2」を記述します。 - int select
注文の選択方法を指定します。具体的には、以下のように記述します。
「SELECT_BY_POS」
インデックスを使用して注文を選択する。
「SELECT_BY_TICKET」
チケット番号を使用して注文を選択する。 - int pool=MODE_TRADES
注文を、「現在保有しているもの、又は待機注文の中から」選択するか、「既に決済したもの、又は取り消したものの中から」選択するかを指定します。具体的には、以下のように記述します。
「MODE_TRADES」
現在保有しているもの、又は待機注文の中から選択します。
「MODE_HISTORY」
既に決済したもの、又は取り消したものの中から選択します。
なお、この引数は、第二引数で「SELECT_BY_POS」を指定した場合に記述します。
戻り値
注文が正常に選択された場合には「true」が、正常に選択されなかった場合には「false」が返されます。
詳しいエラー情報を取得したい場合には、GetLastError()関数を使用します。
- GetLastError()関数の詳細については「こちら」を参照してください。
注意点
第二引数(int select)を「SELECT_BY_TICKET」とした場合には、チケット番号は、待機注文・未決済注文(=保有ポジション)・既決済注文を通じて重複しないので、第三引数(int pool)の指定は無視されます。したがって、記述する必要はありません。
選択した注文が未決済か既決済かを区別するためには、その注文の決済時刻を確認します(決済時刻の確認には、OrderCloseTime()関数を使用します。)。
- 決済時刻が「0」の場合
選択した注文は待機注文か未決済注文です。 - 決済時刻が「0」でない場合
選択した注文は既決済注文か取り消された待機注文です。
選択した注文が待機注文か未決済注文(=保有ポジション)かは、その注文の種別(成行き、指値等)によって区別することができます(注文の種別の確認は、OrderType()関数を使用します。)。
OrderSelect()関数は、以下の関数を使用する前に実行する必要があります。
- OrderClosePrice()関数
- OrderCloseTime()関数
- OrderComment()関数
- OrderCommission()関数
- OrderExpiration()関数
- OrderLots()関数
- OrderMagicNumber()関数
- OrderOpenPrice()関数
- OrderOpenTime()関数
- OrderPrint()関数
- OrderProfit()関数
- OrderStopLoss()関数
- OrderSwap()関数
- OrderSymbol()関数
- OrderTakeProfit()関数
- OrderTicket()関数
- OrderType()関数
具体例
マジックナンバーが等しい注文(=同一のEAによって取得されたポジション)に対してのみ決済処理を行う場合には、以下のように記述します。
int Magic = 1212;
int Ticket = 0;
……
if(OrderSelect(Ticket,SELECT_BY_TICKET) == true)
{
if(OrderMagicNumber() == Magic)
{
決済処理
……