技術講座

MQL5標準ライブラリ・CTrade完全ガイド|注文・決済・ポジション確認の実務基礎

EAファンクラブ

MQL5でEAの注文処理、決済処理、ポジション確認を実装する場合、OrderSendやMqlTradeRequestを直接扱う方法のほかに、MQL5標準ライブラリのCTrade、CPositionInfo、COrderInfo、CDealInfoなどを使う方法があります。

標準ライブラリを使うと、注文処理やポジション確認を整理しやすくなる場合があります。ただし、CTradeを使えば注文エラーがなくなるわけではありません。注文結果、retcode、対象symbol、volume、price、SL/TP、Magic Number、口座方式、銘柄仕様、Journalログ、Expertsログを確認する必要があります。

この記事では、MQL5標準ライブラリ、CTrade、Buy / Sell、PositionClose、CPositionInfo、COrderInfo、CDealInfo、OrderSend直接実装との違い、注文失敗時の確認、ログ設計、開発依頼前に整理する情報を実務向けに整理します。

このページは、MT5 / MQL5の技術学習記事です。投資判断、売買タイミング、利益や結果の保証、推奨ロット、推奨銘柄、特定ブローカー誘導を目的とした内容ではありません。

この記事の目的

この記事の目的は、MQL5標準ライブラリとCTradeを使う時に、どの役割をどのクラスで扱い、注文結果やポジション状態をどのように確認するかを整理することです。

CTradeは便利な注文処理用クラスですが、EAのsignal、execution、risk、exit、log、notificationの責務を自動で整理してくれるものではありません。注文処理を分かりやすく書ける一方で、結果確認やログ設計は開発側で明確にする必要があります。

この記事で扱うこと目的
MQL5標準ライブラリの概要どのような補助クラスがあるか整理する
CTradeの役割注文・決済・変更処理の実装方法を理解する
OrderSend直接実装との違いどちらを使う場合でも確認すべき項目を整理する
Buy / Sell / PositionCloseCTrade利用時の代表的な処理を確認する
retcode確認注文結果をログで追えるようにする
Info系クラスPosition、Order、Deal情報の確認方法を整理する
注文失敗時の確認原因切り分けに必要な情報を整理する

EA全体の責務分離については、MQL5 EA設計パターン完全ガイドもあわせて確認してください。

MQL5標準ライブラリとは

MQL5標準ライブラリは、MQL5でよく使う処理を扱いやすくするためのクラス群です。取引処理、ポジション確認、注文確認、約定履歴確認、配列、文字列、ファイル、グラフィックなど、複数の分野で利用できます。

EA開発では、特にTrade関連の標準ライブラリを使う場面があります。CTrade、CPositionInfo、COrderInfo、CDealInfoなどは、注文処理や取引情報の確認で使われる代表的なクラスです。

クラス主な役割確認すること
CTrade注文、決済、変更などの取引処理Buy、Sell、PositionClose、retcode確認
CPositionInfo保有ポジション情報の確認symbol、magic、volume、price、profitなど
COrderInfo注文情報の確認未約定注文、注文種別、価格、状態など
CDealInfo約定情報の確認deal、volume、price、profit、entry種別など
その他標準クラス配列、文字列、ファイル、UI補助など用途に応じて確認する

標準ライブラリは、実装を整理するための選択肢です。使うだけでEAが安全になる、注文失敗がなくなる、結果が良くなるというものではありません。

CTradeとは

CTradeは、MQL5標準ライブラリに含まれる取引処理用のクラスです。

Buy、Sell、PositionClose、OrderDelete、PositionModifyなど、注文・決済・変更に関係する処理を、比較的分かりやすい形で呼び出せます。

ただし、CTradeはexecution層の実装を補助するものです。signal条件、risk判定、exit条件、注文前チェック、ログ設計、通知処理は、EA側で責務を分けて設計する必要があります。

CTradeで扱う処理内容確認ポイント
Buy買い方向の注文リクエストvolume、symbol、price、SL/TP、comment
Sell売り方向の注文リクエストvolume、symbol、price、SL/TP、comment
PositionClose保有ポジションの決済対象symbol、ticket、口座方式
PositionModifySL/TPなどの変更stops level、digits、価格妥当性
OrderDelete未約定注文の削除対象order、状態、retcode
ResultRetcode直近の取引結果確認retcodeをログへ残す

CTradeを使う場合でも、注文前にロット、銘柄仕様、取引可否、ポジション数、Magic Number、スプレッド、SL/TP距離を確認する設計が必要です。

OrderSend直接実装との違い

MQL5の注文処理では、MqlTradeRequestとOrderSendを直接扱う方法と、CTradeを使う方法があります。

OrderSend直接実装では、requestとresultを明示的に組み立てます。CTradeでは、よく使う取引処理をメソッドとして呼び出せます。どちらを使う場合でも、注文結果の確認とログ設計は必要です。

比較項目OrderSend直接実装CTrade
記述量requestを細かく組み立てるため多くなりやすい代表処理は短く書きやすい
制御の細かさ細部を明示しやすいメソッドの扱いを理解する必要がある
学習しやすさ取引構造を理解しやすい実務コードを整理しやすい
ログ設計request/resultを明示的に残しやすいResultRetcodeなどを意識して残す必要がある
改修時の見通し自由度は高いが冗長になりやすい標準的な処理は読みやすくなる場合がある
注意点request設定漏れに注意成功判定とretcode確認を省略しない

どちらが常に正しいというものではありません。EAの規模、開発方針、注文処理の複雑さ、ログ設計、既存コードとの整合に合わせて選びます。

MQL5の関数や標準的な役割を整理したい場合は、MQL5関数辞書も参考になります。

CTradeでBUY / SELLを行う基本

CTradeでは、BuyやSellメソッドを使って注文リクエストを出せます。

ただし、これは注文処理の呼び出し方法を示すものであり、売買判断や運用設定を示すものではありません。実際のEAでは、signal、risk、executionを分けて、注文前の確認を行ってから呼び出します。

#include <Trade/Trade.mqh>

CTrade trade;

bool SendBuyForCheck(const string symbol, const double volume)
{
   ResetLastError();

   bool ok = trade.Buy(volume, symbol);

   PrintFormat("DIAG/EXEC buy_result symbol=%s volume=%.2f ok=%s retcode=%d last_error=%d",
               symbol,
               volume,
               ok ? "Y" : "N",
               trade.ResultRetcode(),
               GetLastError());

   return ok;
}

上記は、CTrade呼び出しと結果ログの形を示す最小例です。特定のロット、銘柄、エントリー条件を推奨するものではありません。

実務では、BuyやSellを呼び出す前に、volumeの正規化、symbolの取引可否、スプレッド、ポジション数、Magic Number、SL/TPの距離、EAの稼働許可状態を確認します。

注文前確認確認する内容ログに残す例
symbol対象銘柄が正しいかsymbol=…
volume最小ロット・最大ロット・volume stepに合うかrequested_lot、normalized_lot
trade allowed取引可能な状態かtrade_mode、terminal trade allowed
spread許容条件に合うかspread=…
positions既存ポジション数やMagic別状態position_count、magic_count
risk result新規許可・停止理由risk_allowed、block_reason

PositionCloseの基本

CTradeでは、PositionCloseを使って保有ポジションの決済処理を呼び出せます。

ただし、どのポジションを決済するのか、symbol指定なのかticket指定なのか、Hedging口座なのかNetting口座なのか、Magic Numberで絞るのかを確認する必要があります。

#include <Trade/Trade.mqh>

CTrade trade;

bool ClosePositionForCheck(const string symbol)
{
   ResetLastError();

   bool ok = trade.PositionClose(symbol);

   PrintFormat("DIAG/EXEC close_result symbol=%s ok=%s retcode=%d last_error=%d",
               symbol,
               ok ? "Y" : "N",
               trade.ResultRetcode(),
               GetLastError());

   return ok;
}

この例は、PositionCloseとログ確認の形を示すものです。実際のEAでは、決済対象の選定、Magic Number、方向、ticket、口座方式、exit理由を明確にしたうえで実装してください。

決済前確認確認する内容注意点
対象symbolどの銘柄を決済するかチャート銘柄と対象銘柄を混同しない
ticket特定ポジションを決済するか複数ポジションEAでは重要
Magic Numberどのロジックのポジションか他ロジックと混同しない
方向BUY / SELL方向別exit条件を確認する
exit理由利確、損切り、時間、手動、外部停止などログへ残す
retcode決済リクエスト結果成功・失敗を確認する

決済処理はexit層の責務です。エントリー条件であるsignal層とは分けてログを残すと、不具合調査がしやすくなります。

注文結果とretcodeの確認

CTradeを使う場合でも、注文結果とretcodeの確認は必要です。

BuyやSellがfalseを返した場合だけでなく、trueを返した場合でも、取引サーバー側の応答、order、deal、comment、retcodeを確認できるようにしておくと、後からログを追いやすくなります。

確認項目内容ログ例
メソッド戻り値CTrade呼び出しの成否ok=Y / N
ResultRetcode取引結果コードretcode=…
ResultOrder注文番号order=…
ResultDeal約定番号deal=…
ResultCommentサーバーコメントcomment=…
GetLastError直近のエラー候補last_error=…
request概要symbol、volume、direction、sl、tp機密情報を含めない形で記録

注文処理のログは、単に「注文失敗」と出すだけでは不足します。どのsymbol、どのvolume、どのdirection、どのretcodeだったのかを確認できるようにしてください。

retcodeやエラー確認は、MQL5エラーコード辞典も参考になります。

CPositionInfoの役割

CPositionInfoは、保有中のポジション情報を確認するために使われる標準ライブラリのクラスです。

EAで保有状態を確認する場合、symbol、ticket、magic、volume、price、profit、typeなどを確認します。複数ロジックEAや複数ポジションEAでは、どのポジションを対象にしているのかを明確にする必要があります。

確認項目意味使う場面
Symbol対象銘柄チャート銘柄との一致確認
Ticketポジション識別特定ポジションの決済・変更
MagicEAやロジック識別複数ロジックEAの管理
Volume保有量ロット集計、部分決済確認
PriceOpen建値損益や距離の確認
Profit現在損益risk、exit、表示
PositionTypeBUY / SELLなど方向別処理

CPositionInfoを使う場合でも、対象ポジションの選定条件を明確にしてください。symbolだけで見るのか、Magic Numberで絞るのか、ticket単位で扱うのかによって、EAの挙動が変わります。

COrderInfoの役割

COrderInfoは、注文情報を確認するために使われる標準ライブラリのクラスです。

ここでいう注文は、保有ポジションや約定履歴とは分けて考える必要があります。未約定注文、注文種別、価格、状態、期限などを確認する場面があります。

確認項目意味使う場面
Ticket注文番号注文の特定、削除、変更
Symbol対象銘柄注文対象の確認
Type注文種別指値、逆指値などの確認
Volume注文量ロット確認
PriceOpen注文価格価格条件の確認
State注文状態未約定、取消、約定などの確認
MagicEAやロジック識別ロジック別注文管理

未約定注文を使うEAでは、COrderInfoで注文状態を確認し、不要な注文を残していないか、対象ロジック以外の注文を操作していないかを確認します。

CDealInfoの役割

CDealInfoは、約定情報を確認するために使われる標準ライブラリのクラスです。

MQL5では、Order、Deal、Positionを分けて考える必要があります。注文が出され、約定が発生し、ポジション状態が変わるため、履歴確認ではDeal情報が重要になる場合があります。

確認項目意味使う場面
Ticket約定番号履歴の特定
Order関連する注文番号注文と約定の対応確認
Symbol対象銘柄履歴対象の確認
Volume約定量部分約定や分割確認
Price約定価格約定位置の確認
Profit損益履歴集計
EntryIN / OUTなどの種別新規・決済の判定

履歴集計や再エントリー条件を扱うEAでは、Deal情報の確認が必要になる場合があります。注文履歴だけでなく、約定履歴をどう見るかも仕様として整理してください。

Info系クラスの比較

CPositionInfo、COrderInfo、CDealInfoは名前が似ていますが、確認する対象が異なります。

保有中の状態を見たいのか、未約定注文を見たいのか、過去の約定履歴を見たいのかを分ける必要があります。

クラス対象確認する主な場面混同しやすい点
CPositionInfo現在の保有ポジション保有数、建値、損益、決済対象確認履歴ではなく現在状態を見る
COrderInfo注文情報未約定注文、注文状態、注文価格約定済みのDealとは別
CDealInfo約定履歴約定価格、損益、IN / OUT、履歴集計現在保有中のPositionとは別

MQL5の取引構造では、Order、Deal、Positionを分けて確認することが重要です。CTradeで注文を出す場合でも、確認する対象を明確にしてください。

標準ライブラリを使う時のログ設計

標準ライブラリを使う場合でも、ログ設計は重要です。

注文処理、ポジション確認、注文確認、履歴確認で、どのクラスを使い、何を確認し、どの結果になったのかをログへ残すと、不具合調査が進めやすくなります。

ログ分類記録する内容
EXEC_REQUEST注文前の概要symbol、direction、volume、magic
EXEC_RESULTCTrade実行結果ok、retcode、order、deal、comment
POSITION_SCAN保有確認position_count、symbol、magic、ticket
ORDER_SCAN注文確認order_count、type、state
DEAL_SCAN約定履歴確認deal_count、entry、profit
ERROR失敗理由last_error、retcode、reason

ログは多ければよいわけではありません。通常運用、検証、バックテストでログ量を切り替え、同じ内容を連続出力しすぎないように設計してください。

ログ設計と不具合調査は、MQL5デバッグ・ログファースト開発完全ガイドも参考になります。

注文失敗時に確認すること

CTradeを使っても、注文失敗は起こり得ます。

原因は、ロット不正、取引不可、証拠金不足、価格不正、SL/TP距離、stops level、スプレッド、マーケット休止、EA側のrisk停止、外部制御、Magic Number管理ミスなど、複数あります。

確認項目確認する内容見るログ
retcode取引サーバー側の応答EXEC_RESULT
GetLastError直近エラー候補ERROR
volume最小・最大・stepに合うかRISK、EXEC_REQUEST
symbol trade mode取引可能な状態かINIT、SYMBOL_INFO
SL / TPstops levelや価格妥当性EXEC_REQUEST
margin証拠金条件RISK
position count最大数や重複制御POSITION_SCAN
external stop外部停止や認証状態AUTH、EXTERNAL

注文失敗時は、CTradeの戻り値だけで判断せず、retcode、GetLastError、request概要、Journalログ、Expertsログを合わせて確認してください。

初心者が混同しやすい点

CTradeや標準ライブラリを使い始めた時に、初心者が混同しやすい点があります。

特に、注文成功と約定、現在ポジションと履歴、CTradeの戻り値とretcode、symbol単位とticket単位、HedgingとNettingの違いは注意が必要です。

混同しやすい点実際の確認注意点
CTradeを使えばエラーがなくなるエラーは起こり得るretcodeとJournalログを確認する
Buyが呼べれば必ず約定するサーバー応答や条件で失敗する場合があるResultRetcodeを確認する
PositionとDealは同じ現在保有と約定履歴は別Info系クラスを使い分ける
symbolで閉じれば常に対象だけ閉じる口座方式や保有状態で確認が必要ticket、magic、directionも確認する
OrderSend直接実装より常に安全安全性は設計と確認次第ログと責務分離が重要
標準ライブラリならログ不要むしろ結果確認ログが必要EXEC_REQUEST / EXEC_RESULTを残す

標準ライブラリは実装補助です。EA全体の設計、エラー処理、ログ設計、状態管理は別途整理してください。

既存EAがOrderSend直接実装の場合

既存EAがOrderSend直接実装で作られている場合でも、必ずCTradeへ置き換える必要はありません。

既存コードが安定しており、request / result / retcode / errorログが明確に整理されている場合は、その構造を維持した方がよいこともあります。一方で、注文処理が散らばっていて改修しにくい場合は、CTradeや実行クラスへの整理を検討することがあります。

状態判断の方向確認すること
OrderSend実装が整理されている無理に置き換えない選択もあるログ、retcode、request構造
注文処理が複数箇所に散在実行層の整理を検討関数分割、CTrade、クラス化
注文エラー原因が追えないログ設計を優先EXEC_REQUEST / EXEC_RESULT
複数ロジックで注文管理が混在Magic別・logic別に整理ロジック別execution管理
保守担当者が変わる標準的な構造へ整理を検討コメント、命名、include分割

既存EAの構造整理は、MQL5クラス・構造体・配列設計完全ガイドも参考になります。

CTradeと複数ポジション管理

複数ポジションを扱うEAでは、CTradeで注文や決済を呼び出すだけでなく、どのポジションを対象にするかを明確にする必要があります。

特に、複数ロジックEA、ナンピンEA、分割決済、Magic Number別管理、コピーEA連携、Hedging口座では、symbolだけでなく、ticket、magic、direction、logic_idを確認する設計が重要です。

管理項目確認する内容注意点
symbol対象銘柄複数銘柄EAでは必須
magicEA・ロジック識別他EAや他ロジックと混同しない
ticket特定ポジション識別個別決済や変更で重要
directionBUY / SELL方向別exit条件に必要
logic_id内部ロジック番号Magicと対応表を持つ
snapshot現在保有状態の整理riskやexitへ渡す前に整理する

複数ポジション管理では、CTradeだけでなく、position snapshot、Magic Number管理、ログタグ、ロジック別stateが重要になります。

開発依頼前に確認すること

CTradeを使った注文処理の実装、既存EAのCTrade化、OrderSend直接実装の整理、注文エラー調査を相談する場合は、必要な情報を事前に整理してください。

注文処理の相談では、ソースコードだけでなく、setファイル、Expertsログ、Journalログ、発生時刻、対象symbol、時間足、口座方式、Magic Number、注文失敗時のretcodeが重要です。

整理する情報内容注意点
EA名・バージョン対象特定旧版と混在しないようにする
注文処理の方式CTradeかOrderSend直接実装か混在している場合は明記する
対象symbol銘柄名サフィックス込みで記録する
setファイルinput設定認証情報やURLがないか確認する
ExpertsログEA内部の実行ログEXEC_REQUEST / EXEC_RESULTを含める
Journalログ端末側・サーバー側情報注文失敗時は重要
retcode取引結果コード注文失敗時は必ず確認する
口座方式Hedging / Netting複数ポジション管理に関係する
再現条件発生時刻、操作、条件同じ状況を作れるようにする

開発依頼前の資料整理は、MT5開発依頼前に用意する資料まとめも確認してください。

送ってはいけない情報

注文処理や既存EA改修を相談する場合でも、機密情報はそのまま送らないでください。

  • 口座番号の全桁
  • 投資家パスワード
  • マスターパスワード
  • Webhook URLの実値
  • GAS URLの実値
  • APIキー
  • 認証トークン
  • 外部サービスの秘密情報
  • 個人情報
  • 第三者の個人情報が入ったログ

setファイル、ログ、スクリーンショット、ソースコードを送る前に、認証情報や外部連携URLが含まれていないか確認してください。

MQL5標準ライブラリ・CTrade確認チェック表

  • □ CTradeを使う目的を整理した
  • □ OrderSend直接実装との違いを確認した
  • □ Buy / Sell前にsymbol、volume、trade modeを確認した
  • □ PositionClose前に対象symbol、ticket、magicを確認した
  • □ CTradeの戻り値だけでなくretcodeを確認した
  • □ ResultOrder、ResultDeal、ResultCommentをログに残せるようにした
  • □ CPositionInfoで保有状態を確認した
  • □ COrderInfoで注文状態を確認した
  • □ CDealInfoで約定履歴を確認した
  • □ 複数ロジックEAではMagic Numberとlogic_idを分けた
  • □ ExpertsログとJournalログを保存した
  • □ 口座番号や認証情報をマスクした

次に読む技術講座

この講座とあわせて確認すると、MT5・MQL5開発、検証、不具合調査の流れを整理しやすくなります。

No講座確認できること
LEARN-007MQL5注文・ポジション・履歴管理完全ガイド注文・ポジション・履歴管理を確認する
LEARN-017MQL5ロット・証拠金・銘柄仕様完全ガイドロット・証拠金・銘柄仕様を確認する
LEARN-020MQL5イベント処理完全ガイド取引イベントとOnTradeTransactionを確認する
LEARN-012MQL5 EA設計パターン完全ガイドexecutionとriskの責務分離を確認する

次に確認するページ

技術講座を確認した後、導入・商品確認・開発相談・不具合報告へ進む場合は、以下のページも確認してください。

ページ確認できること
技術講座一覧MT5・MQL5・EA開発に関する技術講座を順番に確認できます。
導入ガイドEA、インジケーター、補助ツールを導入する前の確認事項を整理できます。
商品一覧EAファンクラブで扱う補助ツール、インジケーター、コピーEAなどを確認できます。
開発代行ページEA、インジケーター、補助ツールの新規作成・改修相談を確認できます。
不具合報告・サポート依頼ログ、スクリーンショット、再現手順を整理して相談する場合に確認できます。

よくある質問

CTradeを使えば注文エラーはなくなりますか?

なくなりません。CTradeは注文処理を扱いやすくする標準ライブラリのクラスですが、ロット不正、取引不可、価格不正、証拠金、stops level、スプレッド、サーバー応答などによる注文失敗は起こり得ます。

OrderSendとCTradeはどちらを使うべきですか?

EAの設計方針によります。OrderSend直接実装はrequestとresultを細かく扱いやすく、CTradeは代表的な注文処理を整理しやすい場合があります。どちらを使う場合でも、retcode確認とログ設計は必要です。

CTradeでもretcode確認は必要ですか?

必要です。CTradeの戻り値だけではなく、ResultRetcode、ResultOrder、ResultDeal、ResultComment、GetLastErrorを確認すると、注文失敗や決済失敗の原因を追いやすくなります。

ポジション確認には何を使いますか?

標準ライブラリではCPositionInfoを使って保有ポジション情報を確認できます。symbol、ticket、magic、volume、price、profit、directionなどを確認し、EAの対象ポジションを明確にしてください。

標準ライブラリは初心者向けですか?

標準ライブラリは便利ですが、内部で何をしているかを理解せずに使うと、注文失敗時の原因が追いにくくなる場合があります。初心者でも使えますが、retcode、ログ、Position / Order / Dealの違いは確認してください。

既存EAがOrderSend直接実装でも問題ありませんか?

問題ない場合もあります。既存のOrderSend実装が整理され、request、result、retcode、ログが明確であれば、無理にCTradeへ置き換える必要はありません。改修目的に応じて判断します。

CTradeで複数ポジション管理できますか?

注文や決済処理の呼び出しには使えますが、複数ポジションをどう識別するかは別途設計が必要です。symbol、ticket、magic、direction、logic_id、position snapshotを整理してください。

CTradeを使ったEA改修で確認することは何ですか?

注文処理の方式、対象symbol、volume正規化、SL/TP距離、Magic Number、口座方式、retcodeログ、Expertsログ、Journalログ、既存OrderSend処理との混在有無を確認してください。

CPositionInfoとCDealInfoは何が違いますか?

CPositionInfoは現在保有しているポジション情報を確認するために使います。CDealInfoは約定履歴を確認するために使います。現在状態と履歴を混同しないようにしてください。

注文失敗時はどのログを送ればよいですか?

Expertsログ、Journalログ、setファイル、EA名、バージョン、対象symbol、時間足、発生時刻、retcode、スクリーンショットを整理してください。口座番号や認証情報はマスクしてください。

まとめ

MQL5標準ライブラリとCTradeは、EAの注文処理、決済処理、ポジション確認を整理するための有力な選択肢です。

ただし、CTradeを使えば注文エラーがなくなるわけではありません。Buy、Sell、PositionCloseを呼び出す前に、symbol、volume、Magic Number、口座方式、銘柄仕様、risk状態、SL/TP距離を確認し、実行後はretcode、order、deal、comment、GetLastErrorをログへ残すことが重要です。

CPositionInfo、COrderInfo、CDealInfoは、それぞれ現在ポジション、注文情報、約定履歴を確認するために使います。Position、Order、Dealを混同せず、EAの目的に合わせて使い分けてください。

学習内容を確認しても整理が難しい場合は、EA名、バージョン、setファイル、Expertsログ、Journalログ、発生時刻、スクリーンショットを整理したうえで相談してください。

MT4/MT5 技術講座へ戻る

ABOUT ME
記事URLをコピーしました