この記事の内容
この記事を読むと…
- 実行条件の申告と裏付け資料を区別する。
- 往復2約定の費用差を計算する。
- 同じ瞬間の表記差と実際の時刻差を分ける。
記事内で用語を調べる
バックテスト コミッション(売買手数料) エキスパートアドバイザー(EA)同じロボット、同じ画面上の設定でも、実行結果が違う場合があります。戦略を変える前にコード、データ、契約仕様、執行モデルが同じだったか確認します。実行条件の記録(manifest)はその手がかりであって、記録が同じでも環境全体が同一とは証明しません。報告書とログも残します。
再テストの前に何を残すか
良くない結果も含め、二回の報告書、約定一覧、ログ、パラメーターを別々に保存します。損益曲線の画像だけでは最初の約定価格、部分約定の回数、実際の開始時点まで分かりません。条件から操作、最終結果へと追跡できる記録が必要です。単発テスト、最適化探索、後の期間での評価も区別します。
同じファイル名でもコンパイルや依存関係が違う場合があります。端末のbuild、プログラム、関連ライブラリを保存し、名前だけで内容を同一視しません。要求開始日と実開始日も比べます。MT5は準備用履歴が足りなければ開始をずらす場合があり、1カ月全体と短縮期間は別の評価です。CSVのデータ範囲確認とは違い、ここでは実行条件全体を整理します。
同じ形式で二つの記録を用意する
次の13項目だけを使うJSONを二つ貼り付けます。キーを翻訳したり独自の最上位項目を足したりしません。versionは数値1で、EAの版ではなく記録形式の版です。その他は文字列、inputs・costs・initialStateは単純なオブジェクトも使えます。
| キー | 記録する条件 |
|---|---|
| version, platform, build, codeRevision | 形式、環境、build、コードと依存関係 |
| inputs, dataSnapshot | 入力設定、保存したデータの版 |
| symbolSpecification, executionModel, costs | 契約仕様、模擬執行、すべての費用 |
| requestedStart, actualStart, end | 要求開始、実際の開始、終了 |
| initialState | 開始資金、ポジション、初期化条件 |
dataSnapshotは別途計算したチェックサムやアーカイブIDです。「data-v1」という入力をツールが実ファイルと照合するわけではありません。codeRevisionをハッシュと呼んでも自動検証にはなりません。不明な値は不明のまま調査し、権威がありそうな識別子を作りません。パスワードや個人情報は不要です。
日付には時差を明示し、できれば一貫したUTC表記を使います。この比較は記録を比べるもので、業者のカレンダーを確認しません。サーバー時刻の末尾にZを付けてもUTCへ変換したことにはなりません。
比較ツールが確認するもの
編集できる二つの例の項目を比較し、差と不明を表示します。データ送信、ファイル取込み、永続保存は行わず、MT5や口座にアクセスもしません。入力どおりに実際のテストが行われたかは分かりません。同じオブジェクトは同じ記載であって、市場条件や完全な実行環境の証明ではありません。
二つのバックテスト記録を比較する
架空例:同じ取引、異なる手数料
線形契約、USD口座、1往復取引の2約定、価格損益10 USDとします。価格、数量、期間は同じで、融資等は0。Aのcostsは1約定1 USD、Bは2 USDです。業者の料金表ではなく仮定です。Aは10−2×1=8 USD、Bは10−2×2=6 USDで差2 USD。悪いシグナル、誤データ、スリッページを持ち出さなくても、この仮定では費用だけで説明できます。ツールの差表示を見た後も、実報告書と前提の確認は必要です。
同じ1取引、二つの費用仮定
横にスクロールすると図全体を確認できます。
1取引、2約定、その他費用0のモデルです。条件の申告が実際と一致することまでツールが確認するわけではありません。
追加の比較:同じ瞬間でも文字列は違う
同じ架空の実開始時点をAで2026-10-01T00:00:00Z、Bで2026-10-01T09:00:00+09:00と記します。JSTの9時はUTCの0時なので瞬間として同一ですが、このツールは文字列の差を表示します。実行条件が変わったと即断せず、元の記録を保存した上で同じ表記へ正規化して再比較します。
一方、Bが2026-10-01T09:00:00Zなら本当に9時間後です。「日本の9時」だからとZを付ける誤りは、表記差ではなく時刻の変更です。元ログの時差が不明なら変換を推測せず、その情報を調べます。この反例は日時の表現を比較するもので、MT5の時刻処理を実行したテストではありません。
記録が同じに見える場合
最初の異なるイベントへ戻り、シグナル時刻、銘柄、Bid/Ask、数量、開始・決済理由を照合します。最終残高だけでは最初の指標値での分岐が隠れることがあります。「何もしなかった」という判断も記録します。一つの条件だけを変える再試行とし、以前の報告も残します。
依存ファイルと初期化を確認してください。MT5のテストエージェントは端末と別のグローバル変数やファイル領域を使います。乱数を使うコードなら生成器の初期化方法も保存します。差を何でもキャッシュのせいにせず、最初の操作として唯一のアーカイブを消さないでください。同じ申告でも、省略された依存関係や誤ったデータ記述は残り得ます。良い結果を自動採用し、悪い結果をプラットフォームの誤りと決めつけません。
違う文字列と、違う時刻は別問題
差表示を実行環境の変化と即断せず、時差の根拠を確認する。不明なサーバー時刻を推測でUTC扱いしない。
小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。
- A00:00ZとB09:00+09:00
- 同じ瞬間、異なる文字列 – 正規化すると一致する。元の記録も残す。
- A00:00ZとB09:00Z
- 9時間の実際の差 – 後ろにZを付けるだけではJSTを変換できない。
比較の後に行うこと
- AとBを別に保管し、13項目と実際のコード・データ・設定アーカイブを結び付けます。不明を偽の版で埋めません。
- 一つの差を選び、小さな制御例で結果を調べます。手数料なら約定数と課金、開始日なら最初の利用可能なシグナルです。初期説明を否定した試行も残します。
- 申告が同じなら最初のログ分岐を探し、再現に足りない情報をアーカイブへ加えます。
- 原因を説明してから戦略評価へ戻ります。このツールは過去成績の認証や将来収益の予測ではありません。バックテストの枠組みで開発と評価を分けます。
理解度を確認
練習の目安: 約2分.
答えと解説を見る
Aは10−2=8 USD、Bは10−4=6 USD。差は2 USDです。
よくある質問
manifestが一致すれば再現性を認証できますか。
先にキャッシュ消去や再コンパイルをしますか。
actualStartがrequestedStartと違う理由は?
利益の大きい方を選べばよいですか。
出典と検証
- www.metatrader5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.metatrader5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
計算例には前提条件を明記しています。現在の市場データや提供会社の取引条件の代わりにはなりません。
