取引処理構造体 (MqlTradeTransaction)
取引口座にいくつかの明確なアクションを実行すると、状態が変更されます。アクションの例は下記です。
- クライアント端末内の任意の MQL5 アプリケーションから OrderSend と OrderSendAsync 関数を使用して取引リクエストを送信し、取引が実行される。
- 端末のグラフィカルインターフェースを使用して取引リクエストを送信し、取引が実行される。
- サーバ上で未決注文と逆指値注文が執行される。
- 取引サーバ側で操作を行う。
これらのアクションの結果として以下の取引トランザクションが実行されます。
- 取引リクエストの処理
- 未執行注文の変更
- 注文履歴の変更
- 約定履歴の変更
- ポジションの変更
例えば、市場の買い注文を送信する際に、注文が処理され、買い注文が口座に記録されます。その後注文が実行されオープン注文の表から削除されて注文履歴に追加されます。約定履歴に追加され新しいポジションが作成されます。これらのアクションは全て取引トランザクションです。
取引処理の口座への適応のために、MQL5 では特別な OnTradeTransaction() ハンドラ—が提供されています。ハンドラ—の1 番目のパラメータは取引処理を記述する MqlTradeTransaction 構造体を取得します。
struct MqlTradeTransaction
|
フィールドの説明
フィールド |
説明 |
---|---|
deal |
約定チケット。 |
order |
注文チケット。 |
symbol |
トランザクションが実行される、取引シンボルの名称。 |
type |
取引トランザクションの種類。値は ENUM_TRADE_TRANSACTION_TYPE 列挙値のいずれかです。 |
order_type |
取引注文の種類。値は ENUM_ORDER_TYPE 列挙値のいずれかです。 |
order_state |
取引注文の状態。値は ENUM_ORDER_STATE 列挙値のいずれかです。 |
deal_type |
約定の種類。値は ENUM_DEAL_TYPE 列挙値のいずれかです。 |
time_type |
期限切れ後の注文の種類。値は ENUM_ORDER_TYPE_TIME 列挙値のいずれかです。 |
time_expiration |
未決注 文の期限切れ日時 (ORDER_TIME_SPECIFIED と ORDER_TIME_SPECIFIED_DAY 型の注文)。 |
price |
価格。取引トランザクションの種類によって、注文価格、 約定またはポジションの価格。 |
price_trigger |
指値つきストップ注文(活性化)価格(ORDER_TYPE_BUY_STOP_LIMIT と ORDER_TYPE_SELL_STOP_LIMIT)。 |
price_sl |
決済逆指値。取引トランザクションの種類によって、注文、 約定、またはポジション。 |
price_tp |
決済指値。取引トランザクションの種類によって、注文、 約定、またはポジション。 |
ボリューム |
ロットでのボリューム。取引トランザクションの種類によって、注文、 約定、またはポジションの現在のボリューム。 |
position |
トランザクションが影響を与えたポジションチケット。 |
---|---|
position_by |
反対ポジションのチケット。反対ポジション(同じ商品であるが反対側に保有するポジション)の決済時に使用されます。 |
受信したトランザクション分析の必須パラメータはtype フィールドで指定された型です。例えば、トランザクションが TRADE_TRANSACTION_REQUEST タイプ(サーバによる取引リクエスト処理の結果が受信された)の場合、構造体のtypeフィールド のみが書き入れられています。他のフィールドは分析されません。この場合、下記のように、OnTradeTransaction() ハンドラ—に渡されたrequest 及び result 追加パラメータの分析が可能です。
取引操作タイプのデータによってで、取引口座の注文、ポジションや 約定の現在の状態を分析することが出来ます。サーバに送信された 1 つの取引リクエストが複数の新しいトランザクションを生成することがあることは、留意されるべきです。端末におけるこれらのトランザクションの到着の優先順位は保証されません。
MqlTradeTransaction 構造は、取引トランザクションの種類に応じて異なる方法で書き入れられています(ENUM_TRADE_TRANSACTION_TYPE)。
TRADE_TRANSACTION_ORDER_* 及び TRADE_TRANSACTION_HISTORY_*
MqlTradeTransaction 構造内の次のフィールドは、オープン注文の処理に関連する取引(TRADE_TRANSACTION_ORDER_ADD、TRADE_TRANSACTION_ORDER_UPDATE 及び TRADE_TRANSACTION_ORDER_DELETE)と注文履歴(TRADE_TRANSACTION_HISTORY_ADD、TRADE_TRANSACTION_HISTORY_UPDATE、TRADE_TRANSACTION_HISTORY_DELETE)のために書き入れられています。
- order - 注文チケット。
- symbol - 注文銘柄名。
- type - 取引トランザクションの種類。
- order_type - 注文の種類。
- orders_state - 注文の現状態。
- time_type - 注文期限切れの種類。
- time_expiration - 注文期限切れの時刻 (ORDER_TIME_SPECIFIED 及び ORDER_TIME_SPECIFIED_DAY 期限切れ型を持つ注文)。
- price - クライアントによって指定された注文価格。
- price_trigger - 指値つきストップ注文のストップ価格(ORDER_TYPE_BUY_STOP_LIMIT 及び ORDER_TYPE_SELL_STOP_LIMIT のみ)。
- price_sl - 決済逆指値(注文で指定されている場合)。
- price_tp - 決済指値(注文で指定されている場合)。
- volume - 現在の注文のボリューム。初回注文ボリュームは、HistoryOrders* 関数を使用して注文履歴で見つけることが出来ます。
- position - 注文実行の結果として保有、変更、決済されたポジションのチケット。成行注文の為にのみ記入されます。TRADE_TRANSACTION_ORDER_ADDの為には記入されません。
- position_by - 反対ポジションのチケット。反対ポジションを決済する注文(close by)の為にのみ記入されます。
TRADE_TRANSACTION_DEAL_*
MqlTradeTransaction 構造内の次のフィールドは取引ハンドルに関するトランザクションのために書き入れられています(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE 及び TRADE_TRANSACTION_DEAL_DELETE)。
- deal - 約定チケット
- order - 約定が基づいている注文チケット
- symbol - 約定銘柄名
- type - 取引トランザクションの種類。
- deal_type - 約定の種類
- price - 約定価格
- price_sl - 決済逆指値(約定が基づいている注文で指定された場合に書き入れられる)
- price_tp - 決済指値(約定が基づいている注文で指定された場合に書き入れられる)
- volume - 約定ボリューム(ロット単位)
- position - 取引実行の結果、保有、変更、決済されたポジションのチケット。
- position_by - 反対ポジションのチケット。反対ポジション決済の取引(out by)の為にのみ記入されます。
TRADE_TRANSACTION_POSITION
以下の MqlTradeTransaction 構造内の次のフィールドは、取引の実行に関連しないポジション変更に関連する取引トランザクションのために満たされています(TRADE_TRANSACTION_POSITION)
- symbol - ポジション銘柄名
- type - 取引トランザクションの種類。
- deal_type - ポジションの種類(DEAL_TYPE_BUY または DEAL_TYPE_SELL)
- price - 加重平均ポジションの始値
- price_sl - 決済逆指値
- price_tp - 決済指値
- volume - 変更された場合のポジションボリューム(ロット単位)
- position - ポジションチケット。
約定実行の結果としてのポジション変更(追加、変更または閉鎖)は、TRADE_TRANSACTION_POSITION トランザクションの発生にはつながりません。 |
TRADE_TRANSACTION_REQUEST
取引トランザクションの場合、取引リクエストがサーバに処理され結果が受け取られたという事実を説明するために、MqlTradeTransaction の 1 つのフィールド (TRADE_TRANSACTION_REQUEST)のみが書き込まれます。
- type - 取引トランザクションの種類。
この様なトランザクションでは type フィールド(取引トランザクションの種類)のみを分析する必要があります。OnTradeTransaction 関数の第 2 また第 3 パラメータ(request と result)も追加データのために分析する必要があります。 |
例:
input int MagicNumber=1234567; |
参照