バックテストって何?
投資で負けないためにはどうすればいい?
この記事では、このような疑問にお答えします。
まず、バックテストとは、株価や為替の過去の価格データを使用し、売買ルールをシュミレーションすることです。
このような過去の価格データを使用した売買シュミレーションは、初心者から上級者まで多くの投資家が実施していることと思います。
しかし、システムトレードにて実施するバックテストは、一般投資家が行う売買シュミレーションと違い高度な分析を行います。
その高度な分析を行うことで、負けにくい投資家になることができます。
それでは、バックテストの高度な分析内容やメリット、デメリット、始め方などを解説していきます。
はじめまして、マンモスです。
投資歴14年です。
以前システムトレードをしており、その経験をもとに投資でそこそこ利益を出せるようになりました。
この記事を書いている今現在で、約2000万円を運用し、実現損益+評価損益でおよそ700万円程度です。
そんな私がバックテストの魅力について解説します。
バックテストとは?
過去の株価や為替の時系列データを使用し、売買ルールのシュミレーションを行うことです。
バックテストすることで、実際に取引を始める前に、適用する売買ルールが過去にどのような損益になったかを検証することができます。
また、バックテストの結果次第で、その売買ルールを使用中止したり、売買ルールを微調整して、損益を改善することもできます。
このように、実売買の前に売買シュミレーションをすることで、最終的な損益改善につながります。
相場の流れを読み、臨機応変にトレードするタイプの投資家でなければ、バックテストの効果は絶大です。
バックテストの方法
バックテスト方法は2通りあります。
②システムトレード(バックテスト)用のツールを使用する。
基本的に、どちらも過去の時系列データに対して、適用した売買ルールが「どのような損益結果になったのか?」ということを分析します。
分析項目については後述します。
①プログラミングで自作する場合
株価や為替の時系列データを事前に入手して、そのデータに対してバックテストするプログラムを作るか、時系列データをネット上から取得するところを含めプログラミングするか、基本的に自由であり、プログラミングスキル次第で臨機応変にバックテストすることができます。
自作といっても、特に難しいことはなく、プログラミング入門書レベルの知識と投資の基礎知識があれば自作は可能です。
プログラミングできる人にとっては、特に難しいことはないでしょう。
プログラミングできない人にとっても、入門書を読み進め、売買ルールのアイデアを明文化できれば、バックテストは十分に可能です。
私はプログラミング知識ゼロから、バックテストの自作ができるようになりました。
プログラミングは人によって向き、不向きありますが、意外に面白いので自作がおすすめです。
はまる人ははまると思います。
②システムトレード(バックテスト)用のツールを使用する場合
プログラミングとか無理!
このような人にはツールの使用をおすすめします。
ツールでのバックテストは、基本的に条件式やパラメータの組み合わせで売買ルールを作り、それで売買シュミレーションします。
また、株価や為替データの取得も、ツールの基本機能として実装されています。
※売買ルール作成はこんな感じ
※バックテストツール「イザナミ」での売買ルール作成画面
このように、プログラミングできなくても簡単にバックテストできるのが、ツールを使用する利点です。
バックテストに必要な期間
最低でも数年分の期間に対してバックテストしたほうがいいです。
というのも、長期間であればあるほど、上昇トレンド、下降トレンド、レンジ相場など様々な市況をバックテストできるからです。
データ数が多ければ多いほど、将来的なバックテスト結果の再現性が向上します。
逆に短期間でバックテストした場合、特定の市況でしかシュミレーションしていないため、将来的な再現性は低い傾向にあります。
このようなバックテストの基礎を知らなかったため、私自身かなりの損失を出していました。
私の失敗は以下のようなものです。
株を始めたばかりのころ、数カ月分のチャートを見て投資アイデアのシュミレーションをしていました。
そのシュミレーション結果が良ければ実売買をしていたのですが、最初は儲かっていても、すぐに損失が拡大していきました。
損失が拡大したら、その売買ルールは使えないと判断し、また同じように数カ月分のチャートを見て投資アイデアを考えていました。
そしてまた損の繰り返しです・・・
しっかりと長期間のバックテストをしていれば、このような初歩的な間違いは回避できます。
バックテストは多市場でするほうがいい
バックテストは長期間に対して行うほうがいいのと同様に、市場についても多市場で行うことをおすすめします。
理由は「バックテストに必要な期間について」でも述べたように、特定の市況、市場だけでなく、様々な市場をバックテストすることにより、将来的な再現性を向上させるためです。
様々な状態でシュミレーションすることで、将来的な再現性が向上します。
バックテストで分析する項目
それでは、バックテストで分析する項目について解説します。
※以下で解説する項目は、システムトレード(バックテスト)用ツールで必ずしも分析できるわけではありません。
必要な分析項目がツールで分析できない場合、プログラミングにて自作する必要がでてきます。
ツールで妥協するか、自作して自分好みにバックテストするかは臨機応変に対応する必要があります。
総損益
総損益はバックテスト期間におけるトータル損益のことです。
ぱっと見でもっとも分かりやすい分析項目ではないでしょうか?
バックテストにおいて、総損益がマイナスになる売買ルールは論外です。
実売買は控えましょう。
最大ドローダウン
バックテスト期間において、資産額が最大のときからの下落幅をドローダウンといいます。
バックテスト期間中の最大のドローダウンのことを、最大ドローダウンといいます。
最大ドローダウンと自身のリスク許容度を照らし合わせて、最大ドローダウンに耐えられないようであれば、その売買ルールの使用は控えるか、より低リスクになるように売買ルールを改良しましょう。
あくまでバックテスト期間中の最大ドローダウンです。
実売買においては、バックテストの最大ドローダウンよりさらに悪い結果になることを覚悟しておきましょう。
投資において「最悪な状況は常に将来にある」ことを想定しておきましょう。
1トレードの平均損益
トレード1回あたりの平均損益のことです。
こちらも総損益同様、マイナスになっているようであれば、実売買には適さない売買ルールということになります。
なお、バックテスト期間中の資産増減によっては、1トレードあたりの損益にかなり差がでることがあります。
金額ベースで評価するより、パーセンテージベースでの評価をおすすめします。
例として、
利回りが5%の場合、
100万円の資産に対する5%の利益は5万円。
1000万円の資産に対する5%の利益は50万円。
損益だけみれば50万円のほうが多く見えますが、どちらも利回り5%です。
最大の勝ちトレードと最大の負けトレード
最大の勝ちトレード/最大の負けトレードは、バックテスト期間中の最大の勝ち/負けです。
自身のリスク許容度と比較し、そのリスクを許容できないのであれば、ロスカットルールなどの見直しを行い、売買ルールの改良をしましょう。
プロフィット・ファクター(PF)
プロフィット・ファクター(PF)= 総利益 ÷ 総損失
プロフィット・ファクターは上記の式で表せます。
利益と損失の比率を表し、プロフィット・ファクターが高いほど、収益性が高い売買ルールになります。
売買ルール結果を標準化できるため、売買ルールどうしを比較するのに便利です。
トレード回数
バックテスト期間中のトータルのトレード回数のことです。
トレード回数が少なすぎる場合には注意が必要です。
なぜなら、仮にバックテスト期間が10年だとしても、トレード回数が数回程度ではデータ数が少なぎて、将来に渡り再現性がある売買ルールになるかは不明だからです。
より多くのトレード回数があれば、統計的にも優位な売買ルールになります。
ただし、トレード回数を重視するあまり、短期間で取引を繰り返すタイプの売買ルールを意識的に作る必要はありません。
あくまで、バックテスト期間中に統計的に十分と思えるトレード回数があれば十分です。
1トレードあたりの平均日数
1トレードのポジション保有から手仕舞いまでの平均日数のことです。
平均日数あたりの損益を改善したり、自分自身のトレードスタイルとして受け入れられるか判断するのに役立ちます。
また、トレードの長期化による機会損失を防ぐために、あえて金額、パーセンテージベースでの損切りをせず、平均日数をもとに、時間ベースでの損切りを設定するということもできます。
最大連続勝ち回数と最大連続負け回数
連続的な勝ち/負けの最大回数のことです。
これを知っておくことで、勝ち/負け続けているときにも冷静に判断ができます。
勝てているからといって調子に乗らず、また、負けていても焦る必要はありません。
最大の勝ち/負けと比較して、まだ連続して勝ち/負け続けるのか参考にしましょう。
ただし、将来もバックテスト結果の最大値に収まるということではありません。
最悪/最高な結果は、将来更新する可能性が十分あります。
損切りによるパフォーマンスの変化
バックテストは損切りラインを変化させることによる、パフォーマンスの変化を調査するのにも役立ちます。
例えば、パーセンテージベースの損切りで「エントリーポイントから-10%なら損切り」という損切りラインがあるとします。
ここで「エントリーポイントから-5%なら損切り」と損切りラインを変更すると、これまで紹介してきた総損益、勝率などすべての項目に影響を及ぼすことになります。
大幅にパフォーマンスが向上することもあれば、悪化することもあります。
しかし、その変化を確認できるため、任意のリスクに対する最高のパフォーマンスを上げることも可能となります。
理論上最適な損切りラインを見つけるのにも、バックテストは役立ちます。
バックテストの最適化とは?
最適化とは、売買ルールに使用しているパラメータを変更し、損益を改善することです。
以下の例で解説します。
ベースとなる売買ルール
買いルール
・20日間の高値をブレイクアウトしたら、引け成で買い。
売りルール
・20営業日後に、寄付成り行きで売り。
最適化後の売買ルール
買いルール
・30日間の高値をブレイクアウトしたら、引け成で買い
売りルール
・30営業日後に、寄付成り行きで売り。
上記の例のように、使用している数値などを調整して損益を向上させることを最適化といいます。
バックテストの最適化のメリット
最適化のメリットは以下のようなものです。
・勝率の改善
・将来的な再現性の向上
・リスクの低下
バックテストの最適化のデメリット
最適化のデメリットは以下のようなものです。
・バックテスト結果のみ重視し、将来的な再現性がなくなる。
バックテストの過剰最適化とは?
バックテストの最適化の際に、過剰に最適化することです。
簡単にいうと、過去の価格データに無理矢理売買ルールをこじつけることです。
過剰最適化は、バックテスト結果を良くすることを重視するあまり、再現性が全くない売買ルールになってしまいます。
まあ、過去の値動きが分かってるから、その過去の値動きに対してどうすれば儲かっていたかなんて、簡単にわかるよね。
その通り。
その”どうすれば儲かるか”を突き詰めていくと、過去の値動きに完全に対応した売買ルールが出来てしまいます。
でも実際は、その過去の値動きと”完全に”同じ値動きなんて未来には発生しないから、損失ばかりになってしまうんだ。
また、この過剰最適化を利用した、詐欺的な売買ルールが販売されていることがあります。
この売買ルールに従えば、儲かるよ。
10万円でその方法を教えるよ!
売買ルールの購入自体は、それ専門の販売サイトがあります。
信頼できるものから、詐欺的なものまであるため、慎重に判断しましょう。
バックテストの過剰最適化を防ぐ方法
過剰最適化を防ぐには、極力シンプルな売買ルールであることが理想です。
良い例→移動平均線2本を使用した、ゴールデンクロス、デッドクロスでの売買。
悪い例→移動平均線2本を使用した、ゴールデンクロス、デッドクロスでの売買をベースとするが、RSI、MACDなどの様々な指標を売買フィルターとして追加する。
また、後述するウォークフォワードテストをバックテストに取り入れることでも回避できます。
※過剰最適化(カーブフィッテング)を防ぐ方法はこちらの記事で解説しています。
バックテストのやり方
バックテストは以下の手順に従います。
②売買ルールを明文化する
③他期間、他市場でバックテストする
④他期間、他市場で最適化する
⑤ウォークフォワードテストを実施する
⑥実売買を開始する
⑦売買ルールの改良を行う
面倒くさそう・・・・
たしかに面倒くさく感じるかもしれません。
しかし、ここまでやって初めて利益を出せる土台ができるのです。
本気で投資で利益を出したいなら、ここまでやりましょう。
面倒くさがって場当たり的なトレードをしては、元も子もありません。
売買ルールのアイデアを考える
まずは、売買ルールのアイデアを考えましょう。
トレンドフォローするのか、逆張りするのかなどや、どんな指標を使うかということを考えます。
売買ルールを明文化する
売買ルールのアイデアを、明文化できるレベルで具体化しましょう。
どんな指標のどんな数字を使って買い、逆にどのように売るかを漏れなく明文化しましょう。
そのあとに、明文化したルールをベースにプログラミングやツールを使って、売買ルールの開発を実施します。
売買ルールを他期間他市場でテストをする
様々な市場、期間を使ってバックテストを実施します。
ここで損益結果がマイナスだったり、自分のリスク許容度に合わなければ、売買ルールを作り直しましょう。
また、バックテストの注意点として、一部の大幅な利益がトータル利益の大部分を占めるような場合には注意が必要です。
この場合、総損益自体が良く見えても、実態としてはほぼ利益がなかったり、安定的な損益が見込めないケースがあります。
売買ルールを他期間他市場で最適化する
売買ルールに使用しているパラメータを変更し、最適化を実施しましょう。
ここで注意すべきは、パラメータの変更によって、不安定に損益が向上/悪化する場合です。
良い例→パラメータの変化に伴い、安定して損益が変化する。
移動平均計算期間 | 損益 |
2日 | 5万円 |
3日 | 6万円 |
4日 | 7万円 |
5日 | 6万円 |
6日 | 5万円 |
出典:ロバート・パルド著 「トレーディングシステムの開発と検証と最適化」
悪い例→パラメータの変化に伴い、急激な損益の変化がある。
移動平均計算期間 | 損益 |
2日 | 5万円 |
3日 | 6万円 |
4日 | 15万円 |
5日 | -5万円 |
6日 | 1万円 |
出典:ロバート・パルド著 「トレーディングシステムの開発と検証と最適化」
複雑な売買ルールほど、損益が安定しない傾向にあります。
この場合、バックテストしたときの条件から、実売買の際に少し条件が変わっただけで、損益が大幅にマイナスになることがあります。
これに対して良い例のように、多少の条件変化があっても安定して損益がある、堅牢な売買ルールが理想的です。
売買ルールのウォークフォワードテストをする
ウォークフォワードテストの目的は、連続的なアウトオブサンプルテストによって、過剰最適化を防ぐことです。
具体的なやり方は、以下の図のように、バックテスト期間内の最適化用期間で最適化を実施し、実売買と仮定したアウトオブサンプル期間で評価を行います。
それを1年単位でずらすなどして、バックテスト期間内で連続的に最適化とアウトオブサンプルテストを実施します。
このようにウォークフォワードテストすることで、実売買と仮定した期間の損益結果が最適化の結果に比べ極端に悪くなった場合、過剰最適化していることに気づくことができます。
取引をを開始する
ウォークフォワードテストでも安定した損益がでていれば、いよいよ取引開始です。
※完全なシステムトレードをしたい場合は、自動売買するプログラムを作るか、システムトレード(自動売買)ツールを使用しましょう。
実売買の注意点として、バックテストした売買ルールに完全に従う必要があります。
負けそうだから、今回は売買ルールを無視して売ろう。
このような考えは、自らバックテスト結果を破綻させ、再現性がなくなります。
再現性のためには、バックテストした売買ルールに従う必要があります。
売買ルールを評価をする
実際の取引を開始したら、あとは売買ルールの実売買での評価、改良、取引の繰り返しになります。
実売買結果が完全にバックテスト結果と一致することはありませんが、極端に悪化している場合はバックテスト方法に問題があったり、まだ過剰最適化している可能性があります。
検証と改良を繰り返し、よりよい売買ルールを目指しましょう。
バックテスト結果をより現実的にする方法
バックテスト結果は、あくまで過去の時系列データに対するシュミレーション結果のため、将来も同じ結果になるわけではありません。
ただし、より現実的な結果にすることは可能です。
そのためには、バックテスト条件を厳しめに設定する必要があります。
以下の図は、バックテスト条件を厳しくしたものです。
一見すると、バックテスト結果が悪化したため、無駄なことをしているように感じると思います。
しかし、バックテストの目的は、バックテスト結果を良くすることではなく、実売買で利益を出すことです。
このように、意図的に厳しい条件を設定することで、バックテスト結果と実売買結果の乖離を防ぐことが可能になります。
出典:iTRADE公式サイト
それでは、バックテストを厳しくする方法を紹介します。
バックテストにコストを含める
コストとは、取引手数料、税金などです。
バックテストするにあたり忘れがちな要素のため、注意しましょう。
コストがあるのとないのでは、損益結果が大きく異なります。
将来的な再現性のために、必ずバックテストにコストを含めましょう。
バックテストにスリッページを含める
スリッページとは注文価格と約定価格の誤差のことです。
バックテストにスリッページを含めることで、意図的に損益結果を悪化させることができます。
このようにすることで、より現実に近いバックテスト結果にすることができます。
また、バックテストにスリッページを含める具体的な方法ですが、売買ルールに沿った約定価格に誤差分をプラスするだけです。
例えば、売買ルール上の約定価格(買い)が100円だった場合、意図的に101円や102円というように買値を上げます。
売りの場合は逆に約定価格を下げます。
スリッページは任意の価格でOKです。
スリッページが大きくなればなるほど損益が悪化するため、適度なスリッページを設定するようにしましょう。
スリッページは任意の値ですが、大きすぎるとそれはそれで現実的な約定価格からズレます。
ちょうどよい値を設定しましょう。
バックテストでスリッページを含める方法
約定価格より、任意の呼び値を増減させるようプログラムしましょう。
スリッページのパラータがありますので、任意の値を設定しましょう。
※おすすめバックテストツールは、iTRADEです。
こちらは、バックテスト結果を厳しくできるモードが標準的に実装されています。
バックテストのメリット
バックテストのメリットは、以下のようなものです。
・売買ルールの過去の損益結果が分かる。
・実売買の前に、あきらかに損失を出す売買ルールを避けることができる。
・バックテスト結果をもとに、将来的な負けパターンや最大損失を予測できる。
そのため、冷静なメンタルを保てる
・売買ルールについて熟知でき、揺るがない自信につながる。
バックテストのデメリット
バックテストのデメリットは、以下のようなものです。
・バックテスト結果が将来も同じ結果になるとは限らない。
・間違った方法でバックテストすると、実売買で損失が拡大する恐れがある。
・バックテスト自体に手間がかかる
・ツールを使った場合、それなりにコストがかかる。(月額10,000円以上)
バックテストの始め方
バックテストの始め方は3通りです。
①プログラミングして自作する。
②バックテスト(システムトレード)ツールを使う。
③バックテスト代行に依頼する。
プログラミングで自作する
プログラミングして自作する場合に必要なプログラミングスキルは、入門書レベルで十分です。
また、パソコンなどがあれば、実質コストはかかりません。
プログラミング開発環境も、基本的にネットから無料でダウンロードできます。
プログラミング入門書を買えば、開発環境のセットアップ方法も書いてあり、初心者でもすぐに開発環境を構築できます。
※おすすめのプログラミング言語はこちらの記事にまとめています。
次に、プログラミングスキルに加えて必要なものは、株、FXなどの基礎知識です。
実際の売買方法などが分からなければ、プログラミングでシュミレーションできません。
少額でもいいので、実際に株やFXで売買してみましょう。
最後に、バックテストの検証や最適化のスキルも必要になります。
ここが一番の問題です。
というのも、バックテスト(システムトレード)はニッチすぎて、スキルを習得するための情報が、ネット上や、書籍でかなり限られたものしかないからです。
※おすすめの書籍(プログラミング入門書、バックテスト、システムトレード関連)については、下記記事にまとめています。
※当サイトでは、エクセルVBAを使用した、バックテスト方法について解説しています。
※プログラミング学習を低コストでするためにはkindle unlimitedがおすすめです。
※バックテストに使うデータのダウンロードは、こちらの記事で解説しています。
バックテスト(システムトレード)ツールを使う
バックテストツールは基本的に月額制です。
ツールを使ってできることですが、パラメータ、条件式を組み合わせて売買ルールを作ったり、その売買ルールでバックテストを実施できます。
また、ツールを使ったバックテストの特徴ですが、基本的にプログラミングスキル不要で、アイデアさえあれば初心者でも簡単にバックテストが可能です。
当サイトでは、「iTRADE」と「イザナミ」について解説しています。
以下の記事をぜひご覧下さい。
※iTRADEはクラウド型のため、パソコン、スマホ、タブレットなど端末に依存しないでバックテストができます。
また、自動売買も可能です。
【株式投資】iTRADE無料体験はこちらより。
※イザナミはバックテスト特化ツールです。
iTRADEに比べ、カジュアルで使いやすいです。
あなたの売買ルール、バックテストで検証してますか?
『株式投資ソフト イザナミ』♪無料ダウンロード♪
バックテスト代行に依頼する
プログラマーなどにバックテストを依頼して、代行してもらうことができます。
この方法のメリットは、自身がプログラミング言語を習得しなくてもよいこと、バックテストツールに使用料を払わなくてもよいことが挙げられます。
バックテスト代行はクラウドソーシングサービスを利用することで、簡単に仕事の依頼をすることができます。
料金の目安として1000円程度~となります。
バックテストの複雑さによって料金は高くもなりますが、比較的安くバックテストできます。
※こちらの記事で、バックテスト代行の活用方法を解説しています。
バックテスト後の実売買の注意点
バックテスト後の実売買の注意点を解説します。
バックテストが完璧な売買ルールでも寿命がある
バックテストを正しく実施し、完璧な売買ルールでもいずれは通用しなくなります。
これは避けようがありません。
なぜなら、市場は常に変化し続けるからです。
このように、寿命に気づかず損失が拡大するのを防ぐためには、売買ルール自体にロスカットを設定しておくことが重要です。
その方法はシンプルです。
バックテストの分析項目で挙げた、最大ドローダウンや連続負け回数を使うことで寿命に気づくことができます。
具体的には、最大ドローダウンの2倍の負けを出したら寿命が来たと判断したり、連続負け回数の2倍になったら寿命が来たと判断することができます。
あくまで上記は一例ですが、バックテストの分析項目より大幅な悪化が見られた場合、「売買ルール見直しの時期がきた」と判断できます。
バックテストが完璧な売買ルールでも破綻することがある
完璧な売買ルールでも破綻する理由はシンプルです。
これは、自分自身の売買ルール無視による破綻です。
いくらバックテストをしっかりやって売買ルールを完璧に仕上げたとしても、売買ルール無視することで、その完璧さが破綻します。
完璧にバックテストを実施したのであれば、その結果に自信を持ち、売買ルールに忠実になりましょう。
バックテストすることを強くおすすめする人
以下のような人たちは、ぜひ投資にバックテストを取り入れてみてください。
損益が大きく改善することでしょう。
トータルで負け続けている・・・
裁量トレードで勝てない・・・
テクニカル分析しても勝てない・・・
まとめ
バックテストとは、過去の時系列データに対する売買シュミレーションです。
バックテストを実施し、統計的に優位な売買ルールを機械的に実施することをシステムトレードと呼びます。
システムトレードは、裁量トレードで負けている投資家にはおすすめのトレード方法です。
バックテストをすることで「なぜ勝てないのか?」という疑問も解決できます。
バックテストに興味がある方はぜひ始めてみてはいかがでしょうか?