バックテストとは
バックテストとは、売買のルールを過去の価格データに当てはめて、そのルールで取引していたら成績がどうなっていたかを確認する作業です。実際の資金を使わずに、思いついたルールが機能しそうかどうかを数字で確かめられます。
FX のバックテストには、大きく分けて 2 つのやり方があります。ルールを完全に言語化してプログラムに実行させる「自動検証」と、過去のチャートを見ながら自分の判断で発注していく「手動検証」です。
最初に用意するもの
- 検証したい通貨ペアと時間足(例: USD/JPY の 1 時間足)
- 検証したい期間(直近 1 年だけなのか、複数年にわたって見たいのか)
- 検証したいルール、または「まだルールが無く、相場から探したい」という状態でも構いません
ルールがまだ無い場合は、いきなり手法を考えるより先に、過去の相場で実際に効いていた値動きの特徴を調べる「逆算分析」的なアプローチから入ると、思いつきに頼らずに材料を集められます。
手動で検証する場合のやり方
自分の裁量判断そのものを検証したい場合の方法です。過去のチャートを、未来が見えない状態で 1 本ずつ進めながら、実際に発注していきます。
- 検証したい通貨ペア・時間足・開始日時・初期資金を決めてセッションを作る
- チャートを 1 本ずつ進める、または再生する
- 「ここで買い」と思った場面で、成行・指値・逆指値のいずれかで発注し、損切りと利確を置く
- 約定・決済を待ち、結果が残高に反映されるのを確認する
- 同じ場面をもう一度、別の入り方で試したい場合は、1 本戻して打ち直す
手動検証の価値は、「その場で何を見て、どう判断したか」までジャーナリング(記録)できる点にあります。同じチャートパターンで何度も練習できるので、実際のトレードでは 1 か月かかる回数の判断を、短時間で積み重ねられます。
自動で検証する場合のやり方
「20EMA が 50EMA を上抜けたら買い、損切りは直近安値」のように、条件がはっきり言葉にできるルールを検証したい場合の方法です。
- 売買ルールを、エントリー条件・損切り・利確が分かる形で文章にする
- ルールを検証可能な形式(DSL やコード)に変換する
- 対象期間を指定してバックテストを実行する
- 勝率・プロフィットファクター・最大ドローダウンなどの指標で結果を確認する
自動検証の価値は、同じ条件を長期間・何パターンも、疲れずに何度でも試せる点です。ルールを少し変えて再実行する、といった反復がしやすくなります。
どちらから始めるか
ルールをまだ明確に言語化できていないなら手動検証から、条件がすでにはっきりしているなら自動検証から始めるのが素直です。多くの場合、両方を行き来することになります。裁量で「効きそうだ」と感じた値動きのパターンを、後から条件として言語化して自動検証にかける、という流れは自然です。
結果を読むときに注意すること
- トレード数が少ないと(目安として数十件未満)、勝率や損益率のブレが大きく、偶然の結果を実力と読み違えやすくなります
- パラメーターを細かく調整して成績を上げようとするほど、その期間だけに合わせ込んだ結果(カーブフィッティング)になりやすくなります
- バックテスト期間とルールを作った根拠の期間が重なっていないか(同じ期間のデータから条件を作り、同じ期間で検証していないか)
カーブフィッティングについては、別記事「カーブフィッティング(過剰最適化)を避けるには」で詳しく扱っています。用語の定義は用語集にまとめています。