
MQL5 イベント関数
OnTradeTransaction()
- できること
- 取引の処理(トランザクション)ごとに詳細つきで呼ばれる
- 対応
- MQL5
OnTradeTransaction() とは
MT5 の EA で、注文の追加・約定(ディールの追加)・ポジションの変化などの処理が1つ行われるたびに呼ばれる関数です。何が起きたかが引数 trans に入っているため、「決済されたら通知する」などの処理を正確に書けます。
OnTradeTransaction() の書式と引数
void OnTradeTransaction(
const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
trans | const MqlTradeTransaction & | 必須 | 起きた処理の内容。trans.type が TRADE_TRANSACTION_DEAL_ADD なら約定、trans.deal にディールのチケットが入ります。 |
request | const MqlTradeRequest & | 必須 | trans.type が TRADE_TRANSACTION_REQUEST のときに、送信したリクエストの内容が入ります。 |
result | const MqlTradeResult & | 必須 | trans.type が TRADE_TRANSACTION_REQUEST のときに、リクエストの結果が入ります。 |
戻り値
なし
OnTradeTransaction() の使い方(コード例)
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnTick()
{
}
// 決済の約定を検出して損益をログに出す
void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
{
if(trans.type != TRADE_TRANSACTION_DEAL_ADD)
return;
if(!HistoryDealSelect(trans.deal))
return;
long entry = HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
if(entry == DEAL_ENTRY_OUT)
{
double profit = HistoryDealGetDouble(trans.deal, DEAL_PROFIT);
Print("決済しました:", trans.symbol, " 損益=", profit);
}
}MetaEditor でコンパイルできることを確認済みです。
OnTradeTransaction() の注意点
- MQL4 にはありません。
- 1回の注文でも「注文の追加」「約定」「注文の削除」など複数回呼ばれます。trans.type で必要な種類だけを処理します。
- 約定したディールの詳しい情報(損益・エントリーか決済か)は、HistoryDealSelect(trans.deal) で選んでから HistoryDealGetDouble() などで読みます。
関連する関数
イベント関数の関数一覧
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnStart
- OnTimer
- OnChartEvent
- OnTrade
- OnTradeTransaction
- OnTester












