HistoryOrderGetTicketの働き・役割
HistoryOrderGetTicket関数は、取引履歴内の注文に対応するチケットを取得するために使用されます。この関数を使用することで、履歴内の特定の注文にアクセスすることが可能です。
HistoryOrderGetTicket関数を呼び出す前に、HistorySelect関数またはHistorySelectByPosition関数を使用して、取引と注文の履歴を選択する必要があります。これにより、指定した期間内の取引履歴が取得され、その後で特定の注文にアクセスすることができます。
HistoryOrderGetTicket関数の引数について
HistoryOrderGetTicket関数の引数は以下の通りです。
ulong HistoryOrderGetTicket(
int index // 注文リスト内の番号
);
第1引数: index
HistoryOrderGetTicket関数の戻り値について
HistoryOrderGetTicket関数の戻り値は、ulong型の値です。指定されたindexに対応する注文のチケット番号を返します。
- 正常時: 注文のチケット番号を返します。
- 失敗時: 0を返します。これは、指定されたindexが範囲外である場合や、履歴が選択されていない場合などに発生します。
HistoryOrderGetTicket関数を使う際の注意点
取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される待機注文と混同しないよう注意が必要です。取り消された注文やトランザクションにつながった注文のリストは、クライアント端末の「ツールボックス」バーの「履歴」タブで確認できます。
HistoryOrderGetTicket関数を使ったサンプルコード
以下は、HistoryOrderGetTicket関数を使用して取引履歴内の注文情報を取得し、表示するサンプルコードです。
void OnStart()
{
// 履歴の開始日時と終了日時を設定します。
datetime from = 0; // すべての履歴を選択するために開始日時を0に設定します。
datetime to = TimeCurrent(); // 終了日時を現在のサーバー時刻に設定します。
// 履歴全体を選択します。
HistorySelect(from, to);
// 注文プロパティから値を取得するための変数を宣言します。
ulong ticket; // 注文のチケット番号を格納する変数
double open_price; // 注文の開始価格を格納する変数
double initial_volume; // 注文の初期ボリュームを格納する変数
datetime time_setup; // 注文が設定された日時を格納する変数
datetime time_done; // 注文が完了した日時を格納する変数
string symbol; // 注文の通貨ペアを格納する変数
string type; // 注文の種類を格納する変数
long order_magic; // 注文のマジックナンバーを格納する変数
long positionID; // 注文のポジションIDを格納する変数
// 現在の取引履歴内の注文数を取得します。
uint total = HistoryOrdersTotal(); // 履歴内の注文総数を格納する変数
// ループを使って取引履歴内の各注文を処理します。
for (uint i = 0; i < total; i++)
{
// 指定されたインデックスの注文チケット番号を取得します。
if ((ticket = HistoryOrderGetTicket(i)) > 0)
{
// 各注文プロパティの値を取得します。
open_price = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN); // 開始価格
time_setup = (datetime)HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP); // 設定日時
time_done = (datetime)HistoryOrderGetInteger(ticket, ORDER_TIME_DONE); // 完了日時
symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL); // 通貨ペア
order_magic = HistoryOrderGetInteger(ticket, ORDER_MAGIC); // マジックナンバー
positionID = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID); // ポジションID
initial_volume = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL); // 初期ボリューム
type = GetOrderType(HistoryOrderGetInteger(ticket, ORDER_TYPE)); // 注文の種類
// 注文についての情報を表示します。
printf("#ticket %d %s %G %s at %G was set up at %s => done at %s, pos ID=%d",
ticket, // 注文チケット番号
type, // 注文の種類
initial_volume, // 初期ボリューム
symbol, // 通貨ペア
open_price, // 開始価格
TimeToString(time_setup), // 設定日時
TimeToString(time_done), // 完了日時
positionID // ポジションID
);
}
}
}
// 注文の種類を文字列として返す関数
string GetOrderType(long type)
{
string str_type = "unknown operation"; // 不明な操作を表すデフォルトの文字列
switch (type)
{
case (ORDER_TYPE_BUY): return ("buy"); // 買い注文
case (ORDER_TYPE_SELL): return ("sell"); // 売り注文
case (ORDER_TYPE_BUY_LIMIT): return ("buy limit"); // 買いリミット注文
case (ORDER_TYPE_SELL_LIMIT): return ("sell limit"); // 売りリミット注文
case (ORDER_TYPE_BUY_STOP): return ("buy stop"); // 買いストップ注文
case (ORDER_TYPE_SELL_STOP): return ("sell stop"); // 売りストップ注文
case (ORDER_TYPE_BUY_STOP_LIMIT): return ("buy stop limit"); // 買いストップリミット注文
case (ORDER_TYPE_SELL_STOP_LIMIT): return ("sell stop limit"); // 売りストップリミット注文
}
return (str_type); // 不明な操作を返す
}
サンプルコード解説1: OnStart関数の中1
以下のコードは、OnStart関数の一部であり、取引履歴の開始日時と終了日時を設定し、履歴全体を選択する部分です。
void OnStart()
{
// 履歴の開始日時と終了日時を設定します。
datetime from = 0; // すべての履歴を選択するために開始日時を0に設定します。
datetime to = TimeCurrent(); // 終了日時を現在のサーバー時刻に設定します。
// 履歴全体を選択します。
HistorySelect(from, to);
OnStart関数について
OnStart関数は、スクリプトが実行されたときに自動的に呼び出される関数です。この関数内で、取引履歴を選択し、その履歴内の注文情報を取得する準備を行います。
datetime型の変数 from と to
- from:
- 変数 from は、履歴の開始日時を表します。このコードでは、from に0を設定することで、すべての履歴を選択することを意味します。
- すべての履歴を取得するために、開始日時を0に設定しています。
- to:
- 変数to は、履歴の終了日時を表します。このコードでは、to に TimeCurrent関数 を設定することで、サーバーの現在時刻を終了日時として設定しています。
- TimeCurrent関数 はサーバーの現在時刻を取得する関数です。
HistorySelect関数
- HistorySelect関数(from, to):
- HistorySelect関数 は、指定された期間内の取引履歴を選択するために使用されます。
- この関数により、from から to までの取引履歴が選択され、その後で特定の注文にアクセスできるようになります。
この部分のコードは、取引履歴の選択範囲を設定し、その範囲内の履歴を選択する準備を整えています。これにより、後続のコードで特定の注文にアクセスし、必要な情報を取得することが可能になります。
サンプルコード解説2: OnStart関数の中2
以下のコードは、OnStart関数の一部であり、注文プロパティから値を取得するための変数を宣言し、現在の取引履歴内の注文数を取得する部分です。
// 注文プロパティから値を取得するための変数を宣言します。
ulong ticket; // 注文のチケット番号を格納する変数
double open_price; // 注文の開始価格を格納する変数
double initial_volume; // 注文の初期ボリュームを格納する変数
datetime time_setup; // 注文が設定された日時を格納する変数
datetime time_done; // 注文が完了した日時を格納する変数
string symbol; // 注文の通貨ペアを格納する変数
string type; // 注文の種類を格納する変数
long order_magic; // 注文のマジックナンバーを格納する変数
long positionID; // 注文のポジションIDを格納する変数
// 現在の取引履歴内の注文数を取得します。
uint total = HistoryOrdersTotal(); // 履歴内の注文総数を格納する変数
注文プロパティから値を取得するための変数の宣言
- ticket:
- 種類: ulong
- 説明: 注文のチケット番号を格納する変数です。チケット番号は注文を一意(1つしか存在しない)に識別するために使用されます。
- open_price:
- 種類: double
- 説明: 注文の開始価格を格納する変数です。これは注文が実行された価格を示します。
- initial_volume:
- 種類: double
- 説明: 注文の初期ボリュームを格納する変数です。これは注文の最初の取引量を示します。
- time_setup:
- 種類: dateTime
- 説明: 注文が設定された日時を格納する変数です。これは注文が発行された時間を示します。
- time_done:
- 種類: dateTime
- 説明: 注文が完了した日時を格納する変数です。これは注文が実行されたまたは取り消された時間を示します。
- symbol:
- 種類: string
- 説明: 注文の通貨ペアを格納する変数です。例えば、EURUSDなどの通貨ペアが含まれます。
- type:
- 種類: string
- 説明: 注文の種類を格納する変数です。買い注文、売り注文などの種類が含まれます。
- order_magic:
- 種類: long
- 説明: 注文のマジックナンバーを格納する変数です。マジックナンバーは特定のエキスパートアドバイザーが発行した注文を識別するために使用されます。
- positionID:
- 種類: long
- 説明: 注文のポジションIDを格納する変数です。これは注文が関連付けられているポジションの識別子です。
現在の取引履歴内の注文数を取得
- total:
- 種類: uint
- 説明: 現在の取引履歴内の注文総数を格納する変数です。これは履歴内の全注文の数を示します。
- この変数には HistoryOrdersTotal関数の戻り値が格納されます。この関数は、現在の取引履歴内の注文総数を返します。
この部分のコードは、注文プロパティを格納するための変数を準備し、その後の処理で使用するために現在の取引履歴内の注文数を取得します。これにより、後続のコードで各注文の詳細を取得し、操作することが可能になります。
サンプルコード解説3: OnStart関数の中3
以下のコードは、OnStart関数の一部であり、ループを使って取引履歴内の各注文を処理し、それぞれの注文プロパティの値を取得する部分です。
// ループを使って取引履歴内の各注文を処理します。
for (uint i = 0; i < total; i++)
{
// 指定されたインデックスの注文チケット番号を取得します。
if ((ticket = HistoryOrderGetTicket(i)) > 0)
{
// 各注文プロパティの値を取得します。
open_price = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN); // 開始価格
time_setup = (datetime)HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP); // 設定日時
time_done = (datetime)HistoryOrderGetInteger(ticket, ORDER_TIME_DONE); // 完了日時
symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL); // 通貨ペア
order_magic = HistoryOrderGetInteger(ticket, ORDER_MAGIC); // マジックナンバー
positionID = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID); // ポジションID
initial_volume = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL); // 初期ボリューム
type = GetOrderType(HistoryOrderGetInteger(ticket, ORDER_TYPE)); // 注文の種類
ループ処理
ループ変数i を使って、0 から total – 1 までの範囲で繰り返し処理を行います。total は履歴内の注文総数を示します。
for ループ:
指定されたインデックスの注文チケット番号の取得
指定されたインデックスi の注文チケット番号を取得し、それが有効な場合に処理を行います。注文チケット番号が 0 より大きい場合、有効な注文であると判断されます。
if 文:
- HistoryOrderGetTicket関数は、引数としてインデックスi を受け取り、注文チケット番号を返します。
- このチケット番号が 0 より大きい場合、if文の条件が真となり、ブロック内のコードが実行されます。
各注文プロパティの値の取得
- open_price:
- HistoryOrderGetDouble関数を使用して、指定されたチケット番号に対応する開始価格を取得します。
- 引数 ticket には注文のチケット番号が指定され、ORDER_PRICE_OPEN は注文の開始価格を示します。
- time_setup:
- HistoryOrderGetInteger関数を使用して、指定されたチケット番号に対応する注文が設定された日時を取得し、dateTime型にタイプキャストします。
- 引数ticket には注文のチケット番号が指定され、ORDER_TIME_SETUPは注文が設定された日時を示します。
- time_done:
- HistoryOrderGetInteger関数を使用して、指定されたチケット番号に対応する注文が完了した日時を取得し、dateTime型にタイプキャストします。
- 引数ticket には注文のチケット番号が指定され、ORDER_TIME_DONEは注文が完了した日時を示します。
- symbol:
- HistoryOrderGetString関数を使用して、指定されたチケット番号に対応する通貨ペアを取得します。
- 引数ticket には注文のチケット番号が指定され、ORDER_SYMBOL は注文に関連する通貨ペアを示します。
- order_magic:
- HistoryOrderGetInteger 関数を使用して、指定されたチケット番号に対応するマジックナンバーを取得します。
- 引数ticket には注文のチケット番号が指定され、ORDER_MAGIC は注文のマジックナンバーを示します。
- positionID:
- HistoryOrderGetInteger 関数を使用して、指定されたチケット番号に対応するポジションIDを取得します。
- 引数ticket には注文のチケット番号が指定され、ORDER_POSITION_ID は注文に関連するポジションIDを示します。
- initial_volume:
- HistoryOrderGetDouble 関数を使用して、指定されたチケット番号に対応する初期ボリュームを取得します。
- 引数ticket には注文のチケット番号が指定され、ORDER_VOLUME_INITIAL は注文の初期ボリュームを示します。
- type:
- HistoryOrderGetInteger 関数を使用して、指定されたチケット番号に対応する注文の種類を取得し、それを GetOrderType 関数を使って文字列に変換します。
- 引数ticket には注文のチケット番号が指定され、ORDER_TYPE は注文の種類を示します。
この部分のコードは、履歴内の各注文をループで処理し、それぞれの注文の詳細を取得します。取得された情報は後続の処理で使用され、必要な操作を行うための基礎となります。
サンプルコード解説4: OnStart関数の中4
以下のコードは、OnStart関数の一部であり、注文についての情報を表示する部分です。
// 注文についての情報を表示します。
printf("#ticket %d %s %G %s at %G was set up at %s => done at %s, pos ID=%d",
ticket, // 注文チケット番号
type, // 注文の種類
initial_volume, // 初期ボリューム
symbol, // 通貨ペア
open_price, // 開始価格
TimeToString(time_setup), // 設定日時
TimeToString(time_done), // 完了日時
positionID // ポジションID
);
printf関数について
printf関数は、指定されたフォーマットに従って文字列を出力するための関数です。この関数は、エキスパートログに情報を表示するために使用されます。
フォーマット指定子について
フォーマット指定子は、printf関数が出力する値の形式を指定するために使用されます。以下のフフォーマット指定子が使用されています。
- %d は整数型の値を出力します。
- %s は文字列型の値を出力します。
- %G は浮動小数点型の値を出力します。
フォーマット指定子と紐づいている値について
各フォーマット指定子に対応する値は、以下の通りです。
- %d に対応する ticket:
- 注文チケット番号を示します。整数型の値で、特定の注文を一意に識別します。
- %s に対応する type:
- 注文の種類を示します。文字列型の値で、注文が買い注文なのか売り注文なのかなどを示します。
- %G に対応する initial_volume:
- 初期ボリュームを示します。浮動小数点型の値で、注文の最初の取引量を表します。
- %s に対応する symbol:
- 通貨ペアを示します。文字列型の値で、注文が関連する通貨ペア(例: EURUSD)を示します。
- %G に対応する open_price:
- 開始価格を示します。浮動小数点型の値で、注文が実行された価格を示します。
- %s に対応する TimeToString(time_setup):
- 設定日時を示します。文字列型の値で、time_setupをTimeToString関数を使用して文字列に変換したものです。
- %s に対応する TimeToString(time_done):
- 完了日時を示します。文字列型の値で、time_doneをTimeToString関数を使用して文字列に変換したものです。
- %d に対応する positionID:
- ポジションIDを示します。整数型の値で、注文に関連するポジションの識別子です。
この部分のコードは、取得した注文の詳細情報をフォーマット指定子に従ってエキスパートログに出力します。これにより、注文の詳細を簡単に確認できるようになります。
サンプルコード解説5: GetOrderType関数(オリジナル関数)
以下のコードは、注文の種類を文字列として返すための関数です。
// 注文の種類を文字列として返す関数
string GetOrderType(long type)
{
string str_type = "unknown operation"; // 不明な操作を表すデフォルトの文字列
switch (type)
{
case (ORDER_TYPE_BUY): return ("buy"); // 買い注文
case (ORDER_TYPE_SELL): return ("sell"); // 売り注文
case (ORDER_TYPE_BUY_LIMIT): return ("buy limit"); // 買いリミット注文
case (ORDER_TYPE_SELL_LIMIT): return ("sell limit"); // 売りリミット注文
case (ORDER_TYPE_BUY_STOP): return ("buy stop"); // 買いストップ注文
case (ORDER_TYPE_SELL_STOP): return ("sell stop"); // 売りストップ注文
case (ORDER_TYPE_BUY_STOP_LIMIT): return ("buy stop limit"); // 買いストップリミット注文
case (ORDER_TYPE_SELL_STOP_LIMIT): return ("sell stop limit"); // 売りストップリミット注文
}
return (str_type); // 不明な操作を返す
}
GetOrderType関数について
GetOrderType関数は、注文の種類を示す整数値を受け取り、それに対応する文字列を返すための関数です。この関数は、注文の種類を判別し、それをわかりやすい文字列形式で返すために使用されます。
引数と戻り値
- 引数 type:
- 種類: long型
- 説明: 注文の種類を示す整数値です。例えば、買い注文や売り注文などの種類を示します。
- 戻り値:
- 種類: string型
- 説明: 注文の種類に対応する文字列です。注文の種類が不明な場合は、”unknown operation” を返します。
関数の内容
- デフォルトの文字列の設定
注文の種類が不明な場合に返されるデフォルトの文字列を “unknown operation” に設定します。 - switch文の使用
引数type の値に応じて異なる文字列を返すために、switch文を使用します。 - 各ケースの処理
各注文の種類に対応する整数値と文字列の組み合わせを定義します。例えば、ORDER_TYPE_BUYに対しては “buy” を返します。 - デフォルトの戻り値の返却
switch文のいずれのケースにも一致しない場合に、デフォルトの文字列 “unknown operation” を返します。
各識別子の説明
- ORDER_TYPE_BUY:
- 説明: 買い注文を示します。
- ORDER_TYPE_SELL:
- 説明: 売り注文を示します。
- ORDER_TYPE_BUY_LIMIT:
- 説明: 買いリミット注文を示します。これは指定価格以下での買い注文です。
- ORDER_TYPE_SELL_LIMIT:
- 説明: 売りリミット注文を示します。これは指定価格以上での売り注文です。
- ORDER_TYPE_BUY_STOP:
- 説明: 買いストップ注文を示します。これは指定価格以上での買い注文です。
- ORDER_TYPE_SELL_STOP:
- 説明: 売りストップ注文を示します。これは指定価格以下での売り注文です。
- ORDER_TYPE_BUY_STOP_LIMIT:
- 説明: 買いストップリミット注文を示します。これはストップ価格に達した場合にリミット買い注文を出すものです。
- ORDER_TYPE_SELL_STOP_LIMIT:
- 説明: 売りストップリミット注文を示します。これはストップ価格に達した場合にリミット売り注文を出すものです。