実践ワークショップ

MQL5 EAの基礎:データ準備・イベント・約定確認と復旧

CopyBufferの配列順序と値の準備の二SVGを完全保持。約定通知の順序、再送、再起動時のログ重複を独立模型で検証します。

自動取引のイベントとデータ照合を表す編集用画像。稼働中プログラムや実約定ではありません。
計算が動くことと正しい取引が約定したことは別に確認します。

レバレッジを使うFXやCFDでは、短時間で大きな損失が生じることがあります。内容は学習用であり、個別の投資助言ではありません。

この記事の内容

この記事を読むと…

  • 通常配列で直近確定足がどの添字か説明する。
  • 未準備・空値・有効値と約定成功を区別する。
  • 再送と復旧で現在建玉を照合する。

記事内で用語を調べる

バックテスト トレーディングプラン デモ口座(仮想資金の練習口座) ドローダウン ストップロス リクオート(新価格の提示)

MQL5のExpert AdvisorはMT5でイベントに反応するプログラムです。必要な許可が有効なら規則の判定と取引要求の送信ができます。イベント処理・権限・サーバー応答と実際の約定は別。チャートに追加しただけでは成績は確認できません。

MQL5のEAと実行ファイル

MetaEditorはMQ5ソースをEX5へコンパイルします。EX5はソースなしでも配布でき、言語を学んでも非公開の内部規則が判明するわけではありません。EAは許された取引要求を送れます。指標にも計算・通知がありますが、イベントと禁止取引機能が違い、描画だけとする説明も狭すぎます。

MQL5 EAはMT5環境を使用。MT4にも別言語・インターフェースのExpert Advisorがあり、他の自動システムには別の注文接続があります。実際の依存と権限を比べます。 MT4とMT5のEA。 自動取引の最初の手順。

配列の添字0が直近確定足とは限らない

AS_SERIESなしの通常配列へstart_pos=1、count=3でCopyBufferが全件成功したと仮定。三確定足を選び、物理メモリーは最古が先頭です。この設定では直近確定足は添字2です。

横へスクロールして図全体を確認 →

横にスクロールすると図全体を確認できます。

CopyBuffer三値の物理順序通常配列へshift1から三件を選ぶと物理順序はshift3=103、shift2=101、shift1=102。直近確定値は添字0でなく2。102.5超の条件は古い103で成立、最新102では不成立です。通常配列:古い値が先頭CopyBuffer: start_pos = 1, count = 3添字0shift 3103添字1shift 2101添字2shift 1102古い足直近確定足102.5超:103は成立、102は不成立。shift 0は取得していません。

架空の103・101・102を三件すべて、部分取得・エラーなしで受信した模型です。AS_SERIESなしの通常配列で102.5はデータ選択の試験、売買信号ではありません。CopyBuffer資料は現在足からのstart_posと、物理メモリー先頭に最古要素を置く点を定義しています。

添字0の103と添字2の102では、同じ条件の判定が逆になります。

start_pos、返却件数、受取配列の添字方向を記録。件数だけ合っても足を誤選択できます。別の配列設定にも添字2を一律適用しません。

OnInit・OnTick・OnDeinitと他のイベント

OnInitは初期化を扱います。利用期間中に一回だけとの保証ではありません。必要な資源を確認し、初期化不可なら失敗状態を返します。

OnTickは取付チャート銘柄のNewTickを処理。同種イベントが待機中・処理中なら新たなものは追加されません。EAには他イベントもありOnTickは必須ではありません。AutoTrading無効化は新規要求を禁止しますが、計算停止や現在ハンドラーの中断ではありません。

OnDeinitは除去・終了・再初期化を伴う変更と理由を扱います。資源と保存状態を管理。OnTimerやOnTradeTransactionも重要になり、三関数だけの周期ではありません。複数銘柄EAで取付銘柄のティック到着だけから他銘柄の最新性は判断できません。

CTradeと約定確認

OrderSendのtrueは約定成功そのものではありません。戻りコードと注文・約定・建玉を照合。OrderCheckも事前確認で後の執行保証ではありません。架空障害試験で0.10ロット買い要求の応答が不明なとき、照合せず再送すると両方約定して0.20になる場合があります。ローカル確認なしはサーバー無処理の証明ではありません。

OnTradeTransactionは注文削除と約定履歴追加を区別し、到着優先順序を保証しません。初期建玉なし、確定買いD1=0.04・D2=0.06を仮定。ORDER_DELETEでゼロへ戻す誤カウンターはD1・D2・削除の順で0、削除・D1・D2なら0.10。確定買い合計は共に0.10です。注文状態と建玉リスクは別の欄。実台帳には売り・反転・履歴訂正・口座方式も必要です。

CTradeにはBuy、Sell、PositionClose等があります。Buyの構造確認成功でも実取引成功とは限らず、ResultRetcodeとResultDealを確認します。要求価格と約定価格の差も別に記録します。 スリッページ。

Strategy Testerと未使用の評価期間

テスターはモードと利用データにより生成ティックや業者収集の実ティックで過去試験できます。由来・時刻・契約条件・費用を結果と保存。実ティックを一律のMetaQuotes価格源と考えません。

選択に使った同じ履歴で最良結果を評価すると根拠を過大評価し得ます。ただし滑らかな曲線やライブ失敗を数学的に保証するものではありません。未使用期間を残し、繰り返した研究上の選択も記録します。 バックテスト。

EAの役割と限界

繰返し確認や指定銘柄の監視を実装できます。月二百件、夜間運転、速い判断は設計要件の候補であり利益の優位性の証拠ではありません。

取引しない条件も含め、どの情報とイベントを使うか指定。異例の発表や環境は試験・監督が必要ですが全自動化を排除するものではありません。販売図や特定できない掲示板調査は将来実績の確かな推定ではありません。

小さな自作プロジェクトで検証する

小規模EAは明確な規則が正しく実装されたか確認できます。技能と対象から学習量を選択。三~六か月や、自作か購入かという違いだけで良い結果は保証されません。

無人運転には基盤・権限・復旧手順が必要。ローカルAutoTrading無効は建玉決済や計算停止ではありません。サーバー受理済み通常ストップは端末終了後も残り得ますが、EAだけの出口には稼働と接続が必要。MetaQuotes Virtual Hostingは移行した別環境で自動取引が許可され、ローカルボタンは遠隔のEAを止めません。Windows VPSとも区別します。 VPSと遅延。

未準備データ、再起動、不正な数量刻み、不明な応答、手動建玉変更の受入試験を定義。古い信号を信頼する前に現在リスクを復元します。netting口座の同銘柄戦略は一つの純建玉を共有し、Magic Numberだけで資本・証拠金は分離しません。

ハンドル取得と指標値の準備は別

ハンドルができても必要足の計算完了とは限りません。BarsCalculatedは計算件数かエラー−1を返します。次にCopyBufferの実件数、バッファ、足位置を確認。取得失敗をゼロへ変換しません。RSIゼロは極端な値で、未準備とは別です。

ハンドルがあっても使える値とは限らない

横にスクロールすると図全体を確認できます。

ハンドルがあっても使える値とは限らないハンドル、計算済みデータ、取得件数、有効値の四つを別に確認します。ハンドルINVALIDでない計算済み値必要な足CopyBuffer必要件数値有効・欠損でない
利用には四つすべての確認が必要です。

一値が必要な模型。A:無効ハンドルは未取得。B:ハンドルあり・取得ゼロ件なら待つ。C:一件でもEMPTY_VALUEなら信号に使えない。D:有効値45を一件取得できれば規則を評価できます。45は架空の読値で投資信号ではありません。

EMPTY_VALUEの既定値DBL_MAXは有限値なので、有限性検査だけでは不十分。独自指標は別の空値を指定できます。契約を確認し、すべてのゼロを拒否しません。履歴不足、空値、有効数値を区別します。

練習:ハンドルあり、一件取得済みでもEMPTY_VALUE。次に何をしますか。

閾値の判定をせず、バッファ・足・空値を確認して未準備を記録し、次の適切なイベントで再試行。ゼロの観測値を捏造しません。

外部APIの情報には別の利用可能時点の確認が必要です。チャート依存の規則には別のテスト条件があります。 APIをオフラインで再現。 視覚テストの差。

次に行う確認

  1. 信頼できる提供元からMT5を入手しデモで学ぶ場合、テスターのMoving AverageやMACD SampleをEUR/USD H1で一回試し、資産曲線、ドローダウン、PFの定義を読みます。この練習は将来成果や実口座開設の推奨ではありません。 デモ口座、ドローダウン。
  2. 公式MQL5資料のOnInit、OnTick、CTradeから構成と例の場所を確認。三章だけですべてを理解したとはせず、機能に応じ他の仕様も調べます。
  3. 入力・入口・出口・数量・取引しない条件を書きます。裁量箇所は明記。文脈規則も情報源と条件を定義すれば形式化できる場合があります。 条件のチェックリスト。
  4. データ取得、イベント処理、注文応答の受入条件を備えた小さなプロジェクトを計画。期間と範囲は技能と必要機能次第です。
  5. 実リスクを検討する前にデモで運用手順を確認。一か月は例にすぎず、デモと実際の執行は異なり得ます。テスターの遅延模擬は将来の全実約定を測定したものではありません。

独立した再起動試験:同じ約定を二度数えない

実APIが必ず重複通知するという話ではなく、保存ログを再読する架空試験です。初期建玉なし、確定買いのdeal識別子D1は0.04ロット、D2は0.06ロット。復旧時の入力ログがD1・D1・D2なら単純加算0.14ですが、同じD1を一件として照合すると確定合計0.10です。注文IDやMagic Numberを約定IDと同一視しません。

別の架空USD/JPY仕様で一ロット10,000 USD、参考150 JPY/USDなら、誤集計0.14は1,400 USD=210,000 JPY、正しい0.10は1,000 USD=150,000 JPY。同じ必要率4%の単純計算で8,400対6,000 JPYになります。これは実口座残高でも国内の統一契約単位でもありません。重複排除だけでは売り・反転・訂正は処理できず、現在のサーバー履歴と建玉へ再照合します。

独立したログ再読試験:D1を一件として扱うD1買い0.04・D2買い0.06、初期建玉なし。同じログ行再読の模型で、実API通知重複の断定ではありません。仮定に基づく計算入力D1・D1・D2を単純加算0.14ロット約定識別子で照合D1+D2=0.10ロット架空1ロット10,000 USD・150 JPY必要率4%で8,400対6,000JPY
独立したログ再読試験:D1を一件として扱う. D1買い0.04・D2買い0.06、初期建玉なし。同じログ行再読の模型で、実API通知重複の断定ではありません。

注文の削除で建玉をゼロへ戻さず、現在の履歴・実建玉と照合して復旧します。

小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。

入力D1・D1・D2を単純加算
0.14ロット – 同じ約定を二度数えています。
約定識別子で照合
D1+D2=0.10ロット – 売り・訂正・現在建玉の照合はさらに必要。
架空1ロット10,000 USD・150 JPY
必要率4%で8,400対6,000 JPY – 誤集計はリスクと証拠金の推定にも影響。実契約ではありません。

理解度を確認

練習の目安: 約2分.

AS_SERIESなしの通常配列にshift1から三件を全件取得し[103,101,102]。直近確定足はどれですか。

答えと解説を見る

正解。物理先頭は最古なので、この通常配列の末尾添字2がshift1です。

よくある質問

Pythonのボットとは何が違いますか。
MQL5 EAはMT5のイベント・価格・取引機能を使用。Pythonは業者APIだけでなくMetaQuotesの端末統合も使え、必ず端末外のREST/FIXというわけではありません。依存、イベント、取得、応答、試験で比較し、言語だけで戦略・機械学習・執行の優劣は決まりません。
動かすにはプログラミングが必要ですか。
文書化されたコンパイル済みEAの実行に自作は必須ではありませんが、入力・権限・動作を確認します。ソースがあれば検査でき、言語を学んでも非公開EX5内部は分かりません。制御した口座で仕様・ログ・限度・復旧を確認。数週間で十分とは保証しません。
テスターと実運用の結果が違う理由は?
設定選択、価格源、スプレッド、費用、遅延、執行が候補。同じ履歴で探索し最良結果だけ示すと根拠を過大評価し得ますが、良いバックテストやライブ失敗が数学的必然ではありません。全候補を残し開発と評価を分け、一回の評価成功を将来保証にしません。
VPSは必須ですか。
稼働時間・データ・執行経路から選びます。継続や通信の一部を助けても、名称だけで遅延・約定・固定料金は保証されません。低頻度でも監督が必要なことがあります。Windows VPSとMetaQuotesの移行環境を区別し、ローカルボタンだけで遠隔EAは停止しません。実際の利用条件を確認します。

出典と検証

  1. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  2. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  3. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  4. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  5. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  6. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  7. www.mql5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

  8. www.metatrader5.com

    内容の参考資料。記事に記載した範囲と前提を確認してください。

計算例には前提条件を明記しています。現在の市場データや提供会社の取引条件の代わりにはなりません。

著者について

Jarosław Wasińskiはポーランドの編集者・市場アナリストです。2004年にMyBank.plを設立し、2007年から外国為替市場の分析に携わっています。