コンテンツにスキップ

【移植#78】M1のTick VolumeをOHLC経路で見積もる — 履歴を書き換えないwhat-if監査

EURUSD M1の確定2,000本で記録済みTick Volumeと1.2倍・3.0倍のOHLC経路見積りを比較し、独立照合と設定差を示したMT5実画面

この記事の3行まとめ

  • 旧MT4のTick Volume書き換え案を、確定M1を読むだけのwhat-if監査へ置き換えました
  • EURUSD 2,000本では、1.2倍見積りは記録済み総量の10.74%、3.0倍は23.07%でした
  • 全バーを独立計算で照合しましたが、この比率は速度やEA結果を保つ証明ではありません

原典は「出来高を削減してバックテスト効率を上げる」

今回採用したのは、2010年4月5日の「出来高を削減してバックテスト効率を上げる。」です。

元記事を読む

原典は、M1の内部で価格が1 pipずつ一定の順序で動くと仮定し、その経路からTick Volumeを作り直す案でした。上昇足は始値→安値→高値→終値、下落足は始値→高値→安値→終値と進み、経路に1.2倍を掛けます。感度を上げる案として3〜4倍にも触れています。

当時は旧MT4のFXTファイル容量とバックテスト時間が問題でした。しかし、現在の標準履歴を直接変更して同じ方法を再現すると、元データと検証条件を壊しかねません。そこで今回は、現在のTick Volumeと仮想経路の見積りを並べるだけにしました。

4月3日の記事は旧FXTが2GB付近で止まる現象の観察で、単独の実装仕様がありません。4月4日はナンピン・マーチンゲールを扱う随筆です。どちらも番号を使わず、具体的な計算処理がある4月5日へ進めています。

標準履歴へ書き込まないMQL5版

配布版はM1専用の読み取り専用インジケーターです。MqlRatesから確定足だけを使い、各バーについて次を計算します。

  1. OHLCを仮想順序で結んだ経路距離
  2. 指定した価格ステップで経路を進む回数
  3. 1.2倍と3.0倍のwhat-if Tick Volume
  4. 記録済みTick Volumeに対する比率

標準銘柄、カスタム銘柄、履歴ファイルのどれにも書き込みません。注文やポジションも操作しません。

【移植#36】は履歴構造を証拠として残す回、【移植#52】はCSVをカスタム銘柄へ投入する回、【移植#76】はH1をM1から再集計する回でした。今回はM1を生成・変更せず、記録済みTick Volumeとの比だけを調べます。

OHLC経路からbase ticksを作る

上昇足の経路距離は次の式です。

Text Only
path = |Open - Low| + |High - Low| + |High - Close|

下落足では高値側から進みます。

Text Only
path = |Open - High| + |High - Low| + |Low - Close|

価格ステップをstep、倍率をmultiplierとすると、配布版は次のように数えます。

Text Only
base ticks = max(1, ceil(path / step) + 1)
estimate   = ceil(base ticks × multiplier)
retention % = estimate / recorded Tick Volume × 100

+1は最初のOpenを1 tickとして数えるためです。O=H=L=Cの足でも最低1 tickを持たせる、今回の明示的な設計判断です。

原典は1 pip刻みでしたが、銘柄ごとに桁数や値幅の意味が違います。配布版はInpStepPointsをpointsで受け取り、_Pointを掛けて価格へ変換します。初期値10 pointsは5桁EURUSDでは1 pip相当です。他の銘柄で「10 points=1 pip」と決めつけないでください。

retentionは圧縮の安全性を表さない

retentionが100%未満なら、what-if見積りが記録済みTick Volumeより小さいことを示します。100%超なら見積りのほうが大きいという意味です。

ただし、Tick Volumeは価格移動幅ではありません。1 tickごとに必ず1 pip動くわけではなく、同じ価格の更新や複数pointsの跳びもあり得ます。M1 OHLCだけでは、BidとAsk、ティックの発生順序、同値更新を復元できません。

そのため、ここでいうretentionは単純なOHLC経路モデルと記録値の比です。実ティックの復元率、データ品質、EA結果の保持率ではありません。

EURUSD M1の確定2,000本を実機照合

専用MetaTrader 5 Build 6182で、配布インジケーターと独立検証EAをコンパイルしました。どちらも0エラー・0警告です。

検証EAは配布版の集計値を合格根拠にせず、M1を別に取得して経路、base ticks、1.2倍・3.0倍見積り、retentionを全件作り直しました。

検査項目 結果
対象 EURUSD M1
照合した確定M1 2,000本
無効OHLC / Tick Volume 0 0 / 0本
記録済みTick Volume合計 66,035
1.2倍見積り合計 7,090
1.2倍retention 10.7367%(表示10.74%)
3.0倍見積り合計 15,231
3.0倍retention 23.0650%(表示23.07%)
1.2倍が記録値より小さい / 同じ / 大きい 1,925 / 19 / 56本
1.2倍retentionの最小 / 最大 2.4540% / 212.5000%
独立計算との不一致 0
同一設定の別インスタンス差 0
2.0倍へ変えて主要見積りが変わったバー 1,964 / 2,000本
倍率変更で不変の5バッファに生じた差 0
注文数・ポジション数 開始前後で変化なし

合計では1.2倍見積りが約10.74%まで小さくなりました。一方、バー単位では56本が100%を超え、最大は212.5%です。「出来高削減」という名前でも、すべてのM1で値が減るモデルではありません。

2.0倍の対照では、主要見積りが1,964本で変わりました。残る36本は切り上げ後の整数が同じでした。倍率の入力が実際に反映されることと、記録値・3.0倍側・経路・base ticksが変わらないことを同時に確認しています。

パラメーター

パラメーター 初期値 役割
InpBarsToAudit 2000 調べる確定M1の本数
InpStepPoints 10.0 仮想経路を進む1ステップのpoints
InpPrimaryMultiplier 1.2 原典側の主要倍率
InpAlternativeMultiplier 3.0 感度比較に使う倍率
InpShowPanel true 集計パネルの表示

78_M1_Tick_Volume_What_If_Auditor_v1_00.mq5 をダウンロード

使い方

  1. MQ5をMT5のデータフォルダー内のMQL5/Indicatorsへ置き、MetaEditorでコンパイルします。
  2. 調べたい銘柄のM1チャートへ適用します。
  3. 水色の1.2倍retentionと黄色の3.0倍retentionを確認します。
  4. 100%の点線より下なら、そのバーの見積りは記録済みTick Volumeより小さい状態です。
  5. pointsの意味を銘柄仕様で確認してからInpStepPointsを変更します。

サブウィンドウの線は、価格方向や売買シグナルを示しません。縦軸はretentionの百分率です。

MT5のティック生成モードとは分けて考える

MetaTrader 5公式資料では、テスターのEvery tickはM1とTick Volumeをもとにティックを生成します。1 minute OHLCはM1ごとに最大4価格を使う別方式です。Every tick based on real ticksは、利用できる場合にブローカー提供の実ティックを使います。

今回のインジケーターは、これらのテスターモードを実行して速度を比べるものではありません。標準履歴のTick Volumeを変更せず、仮にOHLC経路モデルを使ったら何件になるかを画面へ出すだけです。

今回測っていないもの

  • バックテストの実行時間
  • 履歴ファイルやテスターキャッシュの容量
  • Bid/Askとスプレッドの変化
  • ストップ、トレーリング、指値の約定順序
  • EAの損益やドローダウン
  • ブローカー提供の実ティック列との一致

経路依存のEAは、ティック数だけでなく順序でも結果が変わります。1.2倍retentionが小さくても、元と同じバックテスト結果になるとは判断できません。また、旧FXTの2GB制約を現行MT5で再現した結果でもありません。

まとめ

旧記事の出来高削減案を、履歴を書き換えずに観察できる形へ移しました。OHLC経路、ステップ、倍率を明示すれば、原典の仮定が現在のM1 Tick Volumeに対してどの程度の大きさになるかを比較できます。

今回の2,000本では、1.2倍の合計は記録値の10.74%、3.0倍は23.07%でした。全件の独立照合には通りましたが、バーによっては100%を超えています。数値を読むときは、計算の再現性とバックテスト結果の再現性を分ける必要があります。

あわせて読みたい記事


前後の記事

前: 【移植#77】5日ごとのランダム方向を検証する

次: 【移植#79】TimeCurrentはどの銘柄の時刻か — Market Watchのクォート鮮度を横断監査

— SPONSORED —