この記事の内容
この記事を読むと…
- MT5の描画制限と教材のnull表現を区別する。
- 注文しないモード記録と対照条件を用意する。
- 利用可否と観測IDから最初の入力差を探す。
記事内で用語を調べる
エキスパートアドバイザー(EA) バックテストMT5のビジュアルテストだけで動くEAでは、判断が価格・指標データに依存するのか、チャート上に描いた物に依存するのかを分けます。線やボタンは明示的なシグナル値の代用にはなりません。戦略を変える前にモード、版、データと最初のログ差分を比較します。以下はMT5を起動しない教育モデルで、利用不可をゼロへ置換せず、注文もしません。
ビジュアルモードで何が変わるか
MetaQuotesのテスター資料では、非ビジュアルのテスト・最適化ではグラフィカルオブジェクトを描画せず、作成したオブジェクトのプロパティ照会はゼロ値になると説明します。ビジュアルモードはこの制限の例外です。これは公式に記載された挙動で、当サイトがあなたのEAを実験した結果ではありません。全テスト差分がこの原因ともいえません。
線の価格やボタン状態を読む箇所は、指標値・価格データ取得から分離して記録します。そのモードで値が存在し、取得に成功したかを先に確かめます。技術的なゼロを価格として計算へ渡さず、利用不可ならそこで診断を止める設計を検討します。チャートが見えることも全入力の準備完了を証明しません。
数値シグナルと描画オブジェクトを分ける
作成した非取引シミュレーションです。正の数値1.1050、基準1.1040を宣言し、「シグナル>基準」を比較します。オブジェクト値が利用不可の経路と比べます。MT5の価格や執行ログではなく、データの流れを示すための架空状態です。
入力がないことはゼロ価格ではない
横にスクロールすると図全体を確認できます。
| 経路 | 入力 | 評価 |
|---|---|---|
| 明示した数値 | 1.1050 | 1.1050>1.1040はtrue |
| 利用不可 | null | 比較しない |
| 誤った置換 | 欠損を0にする | 0>1.1040はfalseに見える |
最後は故障した版の説明です。保護した経路は欠損をnullとして保持します。ゼロは数値、nullはこのモデルの入力欠如を表し、異なる問いに答えています。逆の「基準未満」なら、誤ったゼロが条件成立に見える場合さえあります。任意の代替値でプログラムを修復したことにしません。nullは当サイトの表現で、MT5の関数がnullを返すという説明ではありません。
データと描画を分けて試す
ブラウザー内で動く学習用模型です。口座・APIへ接続せず、入力を送信・永続保存しません。パスワードや個人情報を入力しないでください。
この教材は二つの正の有限数を変更し、明示値を比較する一方、利用不可のオブジェクト経路は未評価に保ちます。正の小数点表記10⁻⁸〜10⁸、最大15桁という教材の入力範囲です。仮定モードをビジュアル/非ビジュアルに切り替え、同値も試します。例の確認、リセット、結果TXTのダウンロードは教材内の操作です。JavaScriptがなくても本文の計算は読めます。パスワードや個人情報を入力しないでください。チャートを読むEAテストでも、投資シグナルでもなく、実プログラムの原因を特定するものでもありません。
注文なしでモードを記録する
MQL_TESTER、MQL_VISUAL_MODE、MQL_OPTIMIZATIONは実行環境、TERMINAL_BUILDは端末のビルドを示します。窓の見た目から推測せず、実際の値を記録します。フラグの一致だけではデータやパラメーターの一致は証明できません。
以下は独立した診断用EAです。OnInitで設定をログへ出し、OnTickは空です。注文送信・変更はありません。別のMQ5ファイルとしてMetaEditorでコンパイルし、自分の端末の実際の結果とログを保存してください。ここで実機コンパイルしたとは主張しません。
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
既存EAへ二つ目のOnInitを追加したり、初期化を丸ごと置き換えたりしません。既存の流れを保ったログ追加が必要です。公式資料は最適化時のPrintFormat制限にOnInit内の例外を示します。他の段階の出力がないことだけでは、その段階が実行されなかったと証明できません。
最終利益ではなく最初の差を探す
二つの実行についてビジュアル有無、端末・コード版、入力、銘柄と時間足、ティック生成モデル、要求開始と実開始、データのスナップショット、費用と初期状態を対にして保存します。設定ファイルと版識別子も残します。宣言が違えば窓だけの影響とはいえません。二つのバックテスト記録比較で未確認欄を分けます。
取得成功、データ時刻、指標準備、シグナル、条件、判断のどこで最初に値が異なったかを調べます。「利益120対80」だけでは段階を特定できません。元ログを保持して小さな比較表を横に作り、以前記録していなかった値を捏造しません。対応付けられる観測ID、要求入力、時刻または順序位置、受理可否を残します。安定IDなしで全てを出力すると差が埋もれます。同じ価格が同じ観測とは限らず、ログ設計だけで全依存性を自動発見できる保証もありません。
シグナルの設計をどう変えるか
計算は明示値と利用可否を返し、描画側がそれを表示する構造にします。描画を止めても入力元を意図的に切り替えずに済みます。利用不可、基準と同値を含む制御入力で同じモジュールを確かめます。ただし全テストの一致は、版・データ・費用・他の依存性も関係するため保証しません。
ソースコードがなければ、EA作者へ渡せる対照記録と最初の記録済み差分を用意します。実口座で試行注文を繰り返して診断に代えません。一般的な準備はMT4・MT5バックテストの準備を確認します。
追加比較:数値があるだけで新しい入力とは限らない
別の架空ログ例です。要求観測IDを41とします。キャッシュにあるID40の1.1050は数値として有効ですが、要求した観測ではありません。ID41の新しい値を1.1030、基準を1.1040とすると、古い値はtrue、新しい値はfalseです。利用可否だけの確認ではこの違いを見落とします。41の取得に失敗したら、40で黙って代用せず「要求41は利用不可」と記録します。
| 記録 | 値>1.1040 | 要求との対応 |
|---|---|---|
| ID40、1.1050 | true | 数値はあるが別観測 |
| ID41、1.1030 | false | 要求観測の値 |
| ID41取得失敗 | 未評価 | null、代用しない |
ID完全一致はこの教材の明示した受理規則です。実戦略が許容する時刻差、バーの確定、キャッシュ用途は別に仕様化します。ID40が常に使用禁止だという普遍的なMT5規則でも、実際のEAから採取したログでもありません。
利用可能な数値でも要求した観測とは限らない
利用可否に加え、要求ID・データ時刻・受理規則を記録する。実戦略の許容鮮度は別途仕様化する。
小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。
- キャッシュID40
- 1.1050 → true – 値はあるが要求IDと違う。
- 取得ID41
- 1.1030 → false – 要求した観測。
- ID41取得失敗
- null → 未評価 – 古い値へ黙って置換しない。
次に行う三つの確認
- 対照する一組のモード、コード・端末版、入力、データと期間を保存し、不明欄を表示。同じEAファイルだけで全条件一致とはしない。
- 教材で1.1050と1.1040、その後は同値を比較。明示値の結果と無関係に、利用不可がnullに残ることを確かめる。取引口座は不要。
- 別のデモ設定かテスターで非取引の診断記録を集め、入力・利用可否・条件の最初の差を調べる。収益性の証明や投資助言ではない。
理解度を確認
練習の目安: 約3分.
答えと解説を見る
この教材の明示した意味です。MT5関数の返り値がnullという主張ではありません。
よくある質問
教材のnullはMT5関数の返り値ですか。
trueならEAが注文しますか。
描画を除去すればテストは一致しますか。
小さなロガーは取引用戦略ですか。
出典と検証
- www.mql5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.mql5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.mql5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
計算例には前提条件を明記しています。現在の市場データや提供会社の取引条件の代わりにはなりません。
