バックテスト基礎
MQL5の `CopyTicks` 関数を使って、インジケーターに頼らずローソク足のプライスアクションを分析する
公開 2026.06.17 最終確認 2026.06.17 Backtest
移動平均線やRSIなどのインジケーターは、すべて「過去の価格データ」を平滑化した計算結果であるため、相場の急変に対して必ず「遅れ(ラグ)」が生じます。 このラグを排除し、「今この瞬間の買い圧力と売り圧力のどちらが強いか(プライスアクション・オーダーフロー)」を直接分析するには、MQL5の CopyTicks() 関数を用いて、ミリ秒単位の生のティック(Ask
PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。
tick data / backtest
MQL5の CopyTicks 関数を使って、インジケーターに頼らずローソク足のプライスアクションを分析する
結論
移動平均線やRSIなどのインジケーターは、すべて「過去の価格データ」を平滑化した計算結果であるため、相場の急変に対して必ず「遅れ(ラグ)」が生じます。
このラグを排除し、「今この瞬間の買い圧力と売り圧力のどちらが強いか(プライスアクション・オーダーフロー)」を直接分析するには、MQL5の CopyTicks() 関数を用いて、ミリ秒単位の生のティック(Ask/Bid)の変動速度や方向をEA内部で配列として取得し、独自の計算を回す必要があります。これはHFT(高頻度取引)やスキャルピングEAの根幹となる技術です。
なぜEA運用で重要か
例えば、雇用統計などの重要な指標発表時、チャートのローソク足が形成される前に、ティックは数秒間に数百回も上下に暴れます。
インジケーターベースのEAは「1分足が確定してから」や「移動平均線がクロスしてから」しか判断できないため、エントリーした頃には既に相場の波は終わっています。しかし、CopyTicks で生のデータを監視しているEAなら、「過去1秒間のティックの80%が上昇(Bidの更新)だった」という事実を検知し、インジケーターが反応するよりはるか前に「買い」の判断を下すことができます。
仕組み・条件
CopyTicks() の基本的な使い方とデータ構造:
MqlTick tick_array[]; // ティックデータを格納する構造体配列
// 最新のティックを100件取得
int copied = CopyTicks(_Symbol, tick_array, COPY_TICKS_ALL, 0, 100);
if(copied > 0)
{
// 最新のティック(tick_array[copied-1])と過去のティックを比較
double latest_bid = tick_array[copied-1].bid;
double old_bid = tick_array[0].bid;
// 短時間(100ティック間)の急激な価格変動(モメンタム)を計算
double price_change = latest_bid - old_bid;
// 分析ロジックへ...
}
このように、MqlTick 構造体には time_msc(ミリ秒タイムスタンプ)、bid、ask、volume などの生情報が詰まっており、これを自由に加工できます。
バックテストやリアル運用で壊れるポイント
- 計算負荷(CPUの爆発):
CopyTicksをOnTick()関数の中で毎回呼び出し、さらに数千件の配列をループで回して複雑な計算を行うと、EAの処理がティックの更新速度に追いつかなくなります。リアル口座では「処理遅延」、バックテストでは「終わらないテスト」の地獄に陥ります。配列サイズを極小にするか、OnTimer()で定期的に処理するなどの工夫が必要です。 - 業者間のティック差異: ティックデータの更新頻度はブローカーのサーバー能力に完全に依存します。A社で「1秒に10ティック」動く相場が、B社では「1秒に2ティック」しか動かないことがあります。ティックベースのロジックは、稼働させるブローカーに強烈に過剰最適化(カーブフィット)してしまうリスクがあります。
どう確認するか
ティックベースのEAをテストする際は、MT5のストラテジーテスターでモデルを必ず**「すべてのティック」ではなく「すべてのティック(リアルティックに基づく)」**に設定してください。 通常の「すべてのティック」は、1分足データからMT5が適当に生成した「偽物のティック(擬似ティック)」であるため、モメンタム分析のテスト結果が全くアテになりません。
自分の検証スタンス
私はインジケーターの遅れを嫌うため、スキャルピングEAの開発ではこの CopyTicks を重宝しています。
ただ、純粋な価格変動だけでなく、「AskとBidの差(スプレッド)が、この100ティックの間にどう変動したか」という『業者の裏側の動き(流動性の枯渇サイン)』を監視するフィルターとして使うことが多いです。インジケーターが相場の「形」を見るものだとすれば、ティック分析は相場の「心電図」を見るようなものです。
関連して読む
- MT5バックテストで手数料を入れ忘れるとPFが盛れる理由
- スプレッド固定バックテストがリアルで崩れる理由
- 最大連敗数からロットを決める考え方
- ExnessのRaw Spread・Zero・ProをEA目線でどう使い分けるか
- Exnessのレバレッジ無制限とEAロット計算
- MT5の「ティック履歴」をCSV出力しPythonで分析する
- リペイントするインジケーターをEAのシグナルに使う時の回避策
PF、勝率、最大DD、取引回数は単独では判断しません。期間、条件、崩れ方とセットで読みます。
参照した公式情報
- Exness official site (2026.06.17 確認)
- MQL5 documentation (2026.06.17 確認)
- MetaTrader 5 Python documentation (2026.06.17 確認)
免責
本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。