自作しているPython株価分析ツールでは、これまでに買いタイミングを見やすくする『Stage表示機能』と、購入後の売却ルールを管理する『Exit条件表示機能』を追加してきました。
これによって、
Stageで買い候補を見つける
▼
エントリーする
▼
Exit条件に従って売却する
という、エントリーからExitまでの売買ルールが少しずつ形になってきました。
しかし、ここまで作ると新たな疑問が出てきます。
『この売買ルール、過去の相場で使っていたらどうなっていた?』
StageやExit条件は、自分なりに考えて作ったルールです。
条件を細かく設定してツールとして動くようになっても、実際にどのくらいの取引が発生し、どのような結果になるのかを確認しなければ、ルールの良し悪しを判断することはできません。
そこで今回、過去の株価データを使ってStageによるエントリーからExitまでをシミュレーションできる、『バックテスト機能』を株価分析ツールに追加しました。
バックテストでは、単に『利益が出た・出なかった』を確認するだけではありません。
取引回数や勝率、平均損益、損益合計、Exit理由などを集計し、さらに単一銘柄では実際にどこで買って、どこで売ったのかをチャート上でも確認できるようにしています。
また、ひとつの銘柄だけではなく、監視している複数の銘柄をまとめて検証できる機能も追加しました。
この記事では、なぜバックテスト機能を作ったのか、どのようなルールで売買をシミュレーションしているのか、そして結果をどのように確認しているのかを、実際に作ったツールの画面とあわせて紹介します。
なお、バックテストはあくまで過去の株価データを使った検証です。過去の結果が、将来の運用でも同じように再現されることを保証するものではありません。


売買ルールを検証する「バックテスト機能」を追加
Stage表示機能とExit条件表示機能を追加したことで、買い候補を見つけてから売却するまでのルールが形になってきました。
しかし、売買ルールは『作って動いたら完成』ではありません。
自分では良さそうに見えるルールでも、実際の株価の動きに当てはめてみると、思っていたような結果にならない可能性があります。
そこで、作った売買ルールを過去の株価データに当てはめて検証するために、『バックテスト機能』を追加しました。
売買ルールを作っただけでは有効か分からない
StageやExit条件を作るときには、『この値動きなら買い候補にしたい』『こうなったら売却する』という自分なりの考えをルールにしています。
ただし、そのルールが想定どおりに機能するかどうかは、実際に検証してみなければ分かりません。
たとえば、チャートを見ながら数回の売買を確認しただけでは、たまたま条件に合った銘柄だけを見ている可能性もあります。
また、勝った取引だけが印象に残り、『このルールはうまくいきそう』と感じてしまうことも考えられます。
そこで必要になるのが、同じルールを過去の株価データに適用し、条件に該当した取引をまとめて確認することです。
取引回数や勝率だけでなく、平均損益やトータルの結果、どのExit条件で売却したのかなどを確認することで、感覚だけでは分からなかった売買ルールの特徴が見えてきます。
バックテストの目的は、『利益が出るルールを証明すること』ではなく、現在作っているルールが過去のデータでどのような結果になったのかを確認することだと考えています。
過去の株価データで売買をシミュレーション
今回作ったバックテスト機能では、過去の株価データを使って、Stageによる買いシグナルの発生からExitまでの売買をシミュレーションします。
基本的な流れは、
過去の株価データを取得
▼
Stageを判定
▼
買いシグナルが発生
▼
ルールに従ってエントリー
▼
保有中の値動きを確認
▼
Exit条件に該当したら売却
▼
取引結果を集計
という形です。
これを過去の期間に対して繰り返すことで、『何回取引が発生したのか』『勝ち・負けは何回だったのか』『平均するとどのくらいの損益だったのか』『どのExit条件で売却するケースが多かったのか』などを確認できるようにしました。
さらに、単一銘柄については集計結果だけではなく、買い・売りの位置をチャート上に表示します。
数値だけを見るのではなく、『このStageで買いシグナルが出て、実際にはここでエントリーし、このExit条件で売却した』という一連の流れをチャートでも確認できるようにすることで、想定していたルールどおりにバックテストが動いているかも確認しやすくしています。
ただし、バックテストで良い結果が出たからといって、将来も同じ結果になるとは限りません。
相場環境や銘柄の値動きは変化するため、バックテストはあくまで売買ルールを検証・改善するための材料のひとつとして利用します。
では次に、今回のバックテストでどのような条件でエントリーし、どのような条件でExitするのか、実際の売買ルールを整理していきます。
今回のバックテストで検証する売買ルール
バックテストを行うには、『いつ買って、いつ売ったことにするのか』をあらかじめ決めておく必要があります。
そのときのチャートを見て後から都合よく売買ポイントを変更してしまうと、同じ条件でルールを比較できなくなるためです。
今回のバックテストでは、これまで作ってきたStage表示機能とExit条件表示機能を使って、エントリーからExitまでを一定のルールでシミュレーションします。
基本的な流れは次のとおりです。
Stageから買いシグナルを判定
▼
買いシグナル発生後にエントリー
▼
保有中は新しい買いシグナルを無視
▼
Exit条件に該当したら売却
▼
次の買いシグナルを待つ
それぞれのルールについて、もう少し詳しく説明します。
Stageの買いシグナルからエントリー
エントリーの起点として利用するのが、Stage表示機能で判定している買いシグナルです。
Stageでは、『SMA5上抜け ▶ 上昇 ▶ 押し目 ▶ 反発』という値動きの流れを確認し、条件を満たすとStage4へ進みます。
バックテストでは、このStage判定から買いシグナルが発生した場合にエントリー対象とします。
ただし、買いシグナルが発生した日の終値で購入したことにはしていません。
その日の取引が終了して初めて確定する情報を使って買いシグナルを判定しているため、実際に売買できる次の営業日の始値でエントリーしたものとしてシミュレーションしています。
つまり、
買いシグナル発生
▼
次の営業日の始値でエントリー
というルールです。
これによって、シグナルが確定する前の情報を使って売買したことにならないようにしています。
実運用とバックテストではエントリー方法が少し違う
ここで注意したいのが、実際の運用とバックテストではStage4の扱いが少し異なることです。
実運用では、Stage4になったからといって機械的に購入するわけではありません。
Stage4はあくまで『詳しく確認したい買い候補』として利用し、その後にチャートなどを確認して、実際にエントリーするかを判断しています。
一方、バックテストで同じような裁量判断を入れてしまうと、『このときは買う』『このときは見送る』という判断を過去のチャートを見ながら後付けすることになり、同じ条件で売買ルールを比較しにくくなります。
そこでバックテストでは、買いシグナルが発生したら次の営業日の始値でエントリーするという統一したルールにしています。
そのため、今回のバックテスト結果は実際の自分の売買成績をそのまま再現するものではなく、StageとExitのルールを機械的に適用した場合に、過去のデータでどのような結果になったのかを確認するためのものです。
保有中は新しい買いシグナルを無視
バックテストでは、同じ銘柄を保有している間に新しい買いシグナルが発生する場合もあります。
しかし現在のルールでは、保有中に追加購入する買い増しは行いません。
そのため、
未保有 + 買いシグナル ▶ エントリー
保有中 + 買いシグナル ▶ エントリーしない
という扱いにしています。
1回エントリーしたら、まずそのポジションがExitするまでを1つの取引として扱い、売却後に再び次の買いシグナルを待ちます。
これによって、1つの銘柄で複数のポジションが重なってしまうことを避け、1回のエントリーから1回のExitまでをひとつの取引として検証できるようにしています。
Exit条件に該当したら売却
エントリー後の売却には、前回追加したExit条件を使用します。
現在のExitルールでは、大きく分けて、『利益が伸びた場合はトレーリングで上昇を追う』『一定期間たっても弱い状態が続いた場合はExitする』『最大保有期間に達した場合はExitする』という3つの条件を設定しています。
バックテストでも、このExitルールを過去の株価データに対して同じように適用します。
そしてExit条件に該当したら売却し、『エントリー価格 ▶ Exit価格』から、その取引の損益を計算します。
ここでもStage記事・Exit記事と同様に、具体的な判定値については掲載していません。
今回確認したいのは特定の数値を使った売買方法を紹介することではなく、自分で作ったStageとExitのルールを、同じ条件で過去データに適用して検証できる仕組みを作ることだからです。
こうしてエントリーとExitの条件を固定することで、銘柄や検証期間を変更しても同じルールでバックテストできるようになりました。
次は実際に、単一銘柄を指定してバックテストを実行する方法と、その結果の見方を紹介します。
単一銘柄をバックテストする
まず作ったのが、銘柄を1つ指定してバックテストする機能です。
いきなり複数銘柄をまとめて検証すると、最終的な勝率や損益は確認できても、『実際にどこで買って、どこで売っているのか?』が分かりにくくなります。
そこで単一銘柄のバックテストでは、集計結果だけではなく、個々の取引結果や買い・売りポイントをチャート上でも確認できるようにしました。
銘柄コードと検証期間を指定する
バックテストを実行するときは、まず検証したい銘柄コードと期間を指定します。
銘柄コードを変更すれば、特定の銘柄に固定されることなく、同じStage・Exitルールを使って別の銘柄も検証できます。
また、検証期間についても指定できるようにしています。
たとえば直近の一定期間を検証したい場合だけでなく、開始日と終了日を指定して、『この時期の相場ではどうだった?』と確認することもできます。
期間を変更して検証できるようにしたのは、ひとつの期間だけで良い結果が出たからといって、その売買ルールがさまざまな相場で同じように機能するとは限らないためです。
同じ銘柄でも期間を変えてバックテストすることで、相場環境によって結果がどのように変わるのかも確認できます。
期間指定方法:相対期間

期間指定方法:固定日付

バックテストの集計結果を確認
バックテストを実行すると、指定した期間で発生した取引をもとに結果を集計します。
現在のツールでは、主に次のような項目を確認できるようにしています。
Trade Count(取引回数)
検証期間中に何回の取引が発生したのかを確認します。
Win Rate(勝率)
利益になった取引が全体の何%だったのかを確認します。
Wins / Losses(勝ち・負け回数)
利益になった取引と損失になった取引の回数をそれぞれ確認します。
Average Return(平均損益率)
1回の取引あたりの損益率を平均した値です。
Total Return(合計損益率)
バックテストで発生した取引全体の損益を確認するための指標として表示しています。
これらをまとめて表示することで、
『勝率は高いけれど平均損益はどうなのか?』
『利益は出ているけれど取引回数が少なすぎないか?』
といったことも確認しやすくなりました。
バックテストではひとつの数字だけを見るのではなく、複数の結果を組み合わせて売買ルールの特徴を見ることが重要だと考えています。

買い・売りポイントをチャートで確認
単一銘柄のバックテストで特に確認したかったのが、実際にどこでエントリーして、どこでExitしているのかです。
そこで、バックテスト結果をローソク足チャートにも表示するようにしました。
チャートには株価だけでなく移動平均線も表示し、バックテストでエントリーしたポイントには買い、Exitしたポイントには売りを表示します。
これによって、集計結果だけでは分からない、『Stageの買いシグナルから、どの位置でエントリーしているのか』『エントリー後に株価がどのように動いたのか』『どの位置でExitしているのか』といった売買の流れを、実際のチャート上で確認できます。
これは単に結果を見るためだけではありません。
たとえば買い・売りの位置が自分の想定と違っていれば、StageやExitの判定ロジック、バックテスト処理そのものに問題がないかを確認するきっかけにもなります。
数値上では正しく見えていても、チャートに表示してみると、『ここで買っているのはおかしくない?』『この日はExit条件に該当するはずでは?』と気づくことがあります。
そのため、単一銘柄のバックテストでは、集計結果とチャートの両方から確認できることを重視しました。

個別トレード一覧で1回ごとの結果を確認
バックテスト結果の下には、発生した取引を確認できる『個別トレード一覧』も表示しています。
ここでは、Entry日・Entry価格・Exit日・Exit価格・保有日数・損益率に加えて、最大含み益・最大DD・保有中に無視した買いシグナル・Exit理由などを確認できます。
集計結果だけでは分からない、『どの取引で利益・損失が発生したのか』『どのExit条件で売却したのか』まで確認できるため、StageやExitルールを振り返るときにも利用しています。
単一銘柄のバックテストによって、売買ルール全体の成績だけでなく、実際に発生した1回1回の取引まで確認できるようになりました。
複数銘柄をまとめてバックテスト
単一銘柄のバックテストでは、買い・売りポイントをチャートで確認しながら、StageからExitまでの動きを詳しく確認できます。
しかし、1つの銘柄だけで売買ルールを判断するのは十分ではありません。
ある銘柄ではうまく機能していても、別の銘柄では結果が大きく変わる可能性があります。
そこで、単一銘柄だけでなく、複数の銘柄をまとめてバックテストできる機能も追加しました。
監視銘柄をまとめてバックテスト
現在のツールでは、バックテスト画面の実行モードを『監視銘柄一括』に切り替えることで、監視リストに登録している銘柄をまとめて検証できます。
単一銘柄のときと同じStage・Exitルールを各銘柄に適用し、それぞれのバックテスト結果を集計します。
普段の運用では監視リストに気になる銘柄を登録しているため、その銘柄群をそのままバックテスト対象にできるようにしました。
これによって、銘柄コードを1つずつ入力して何度もバックテストする必要がなく、
『現在監視している銘柄に同じ売買ルールを適用したら、全体としてどのような結果になるのか』
をまとめて確認できます。

複数銘柄全体の結果を確認
一括バックテストでは、対象となった銘柄の取引結果をまとめて集計します。
単一銘柄と同じように、トレード数・勝率・平均損益・累積リターンなどを確認できるようにしています。
1銘柄だけを見るのではなく複数銘柄を対象にすることで、『特定の銘柄だけで結果が良くなっていないか』『銘柄が変わってもStage・Exitルールが機能しているか』『十分な取引回数が発生しているか』といった点も確認しやすくなります。
また、一括した結果だけではなく、銘柄ごとのバックテスト結果も確認できるようにしています。
全体では良い結果に見えていても、一部の銘柄の大きな利益によって結果が押し上げられている可能性もあります。
そのため、全体の集計結果と銘柄ごとの結果をあわせて確認することで、売買ルールがどのような銘柄で機能し、どのような銘柄では結果が悪くなっているのかを振り返れるようにしました。

Exit理由の偏りも確認
一括バックテストでは、どのExit条件で取引を終了したのかもまとめて確認できます。
たとえば、利益を伸ばしたあとにExitしたケースが多いのか、それとも一定期間経過によるExitが多いのかによっても、現在の売買ルールの特徴は変わってきます。
単純に勝率や損益だけを見るのではなく、Exit理由もあわせて確認することで、『なぜこの結果になったのか』を考えるための材料として使えるようにしています。
単一銘柄では1回1回の売買をチャートで詳しく確認し、複数銘柄では売買ルール全体の傾向を広く確認する。
この2つを使い分けることで、ひとつの銘柄や一部の取引だけに偏らず、Stage・Exitルールをさまざまな角度から検証できるようになりました。
バックテスト結果から何が分かる?
バックテスト機能を作ったことで、これまで感覚的に確認していたStage・Exitルールを、実際の過去データを使って数値で確認できるようになりました。
ただし、バックテストは『勝率が高ければOK』という単純なものではありません。
現在のツールでは、トレード数・勝率・平均損益・累積リターンなど複数の結果を表示しています。
これらを組み合わせて見ることで、現在の売買ルールが過去のデータでどのような動きをしていたのかを確認しています。
勝率だけでは売買ルールを判断できない
バックテスト結果を見ると、どうしても最初に気になるのが勝率です。
もちろん勝率も確認したい項目のひとつですが、勝率だけでは売買ルール全体の結果は分かりません。
たとえば勝った回数が多くても、『1回の利益が小さく、負けたときの損失が大きい』という結果になっている可能性があります。
反対に、勝率がそれほど高くなくても、利益になった取引でしっかり利益を伸ばせていれば、全体ではプラスになるケースも考えられます。
そのため、勝率だけを見るのではなく、平均損益や累積リターンなどもあわせて確認するようにしています。
トレード数が少なすぎないか確認する
もうひとつ確認したいのがトレード数(取引回数)です。
たとえば勝率が高く、平均損益も良い結果だったとしても、対象となった取引が数回しかなければ、それだけで売買ルールを判断するのは難しくなります。
また、Stageの条件を厳しくしすぎると、良さそうな結果になったとしても、そもそも買いシグナルがほとんど発生しない可能性もあります。
そこでバックテストでは、『どのような結果になったか』だけでなく、『その結果は何回の取引から得られたものなのか』も一緒に確認しています。
銘柄や期間を変えて結果を確認する
ひとつの銘柄・ひとつの期間で良い結果が出ても、別の銘柄や期間でも同じような結果になるとは限りません。
相場には、上昇が続く時期もあれば、下落が続く時期、方向感が出にくい時期もあります。
そのため、単一銘柄の結果だけで判断するのではなく、複数銘柄や異なる期間でも同じルールを試すようにしています。
『ある銘柄だけ極端に成績が良くなっていないか』『特定の期間だけ結果が良くなっていないか』『銘柄を変えると結果が大きく悪化しないか』といった点を確認します。
バックテスト対象を変えながら結果を見ることで、特定の銘柄や相場環境に結果が偏っていないかを確認しやすくなりました。
Exit理由から売買ルールの特徴を確認する
今回のバックテストでは、最終的な損益だけではなく、どのExit条件で売却したのかも記録しています。
これも売買ルールを振り返るための重要な情報です。
たとえば、利益が伸びたあとにトレーリングでExitするケースが多いのか、それとも一定期間経過によるExitが多いのかによって、現在のルールがどのように機能しているのかが変わってきます。
さらに個別トレードと組み合わせれば、『このExit条件ではどのような結果が多かったのか』を振り返ることもできます。
単純に『利益が出た・損失が出た』で終わらせず、なぜその結果になったのかを確認する材料としてExit理由も利用しています。
バックテストは「正解を探すもの」ではなく改善するための材料
バックテストを繰り返していると、結果が良くなるようにStageやExitの条件を細かく変更したくなります。
しかし、過去データに合わせて条件を調整しすぎると、その期間では良い結果でも、別の期間や銘柄では同じように機能しない可能性があります。
そのため、バックテスト結果は、『この条件なら勝てる』という正解を探すためではなく、『現在のルールにはどのような特徴があるのか』『想定していた動きになっているのか』『どこに改善できそうな部分があるのか』を考えるための材料として使うようにしています。
バックテストで良い結果が出たとしても、それだけでルールを変更するのではなく、銘柄や期間を変えながら確認することが大切だと考えています。
実際にツールを作りながら検証してみると、ある条件では良くなったのに、別の銘柄群では逆に結果が悪くなることもありました。
このような結果も含めて比較できるようになったことが、バックテスト機能を追加した大きなメリットです。
バックテスト機能を追加して変わったこと
バックテスト機能を追加して一番変わったのは、売買ルールを考えたあとに、そのまま実運用へ進むのではなく、過去データで一度検証できるようになったことです。
これまでもチャートを見ながらStageやExit条件を考えていましたが、いくつかのチャートを確認するだけでは、そのルールが全体としてどのような結果になるのかまでは分かりませんでした。
バックテスト機能を追加したことで、
売買ルールを考える
▼
過去データでバックテストする
▼
集計結果を確認する
▼
個別の取引やチャートを確認する
▼
必要に応じてルールを見直す
という流れで検証できるようになりました。
感覚だけでなく数値で比較できるようになった
StageやExitの条件を変更すると、『前より良くなった気がする』と感じることがあります。
しかし、チャートを数件確認しただけでは、本当に結果が変わったのか判断するのは難しいです。
バックテストでは、同じ銘柄・同じ期間で条件を変えて実行すれば、トレード数・勝率・平均損益・累積リターンなどを比較できます。
さらに、複数銘柄や別の期間でも検証することで、変更したルールが特定の銘柄や期間だけで良くなっていないかも確認できます。
実際に検証してみると、ある条件では結果が改善しても、対象となる銘柄や期間を変えると逆に悪化するケースもありました。
こうした違いを数値で確認できるようになったことで、ひとつの結果だけを見てすぐにルールを変更しないという判断もしやすくなりました。
Stage・Exit・バックテストがつながった
今回のバックテスト機能を追加したことで、これまで個別に作ってきた機能もひとつの流れとしてつながりました。
Stageで買い候補を見つける
▼
エントリーする
▼
Exit条件に従って売却する
▼
バックテストで売買ルールを検証する
という形です。
もちろん、バックテストで良い結果が出たからといって、そのまま将来の取引でも同じ結果になるわけではありません。
それでも、自分で考えた売買ルールを感覚だけで判断するのではなく、過去データを使って確認し、その結果を見ながら改善していけるようになったことは、自作ツールとして大きな変化でした。
今後もバックテスト結果だけで売買ルールを決めるのではなく、実際の運用とあわせながらStage・Exit条件を検証していきたいと思います。
まとめ
今回は、自作しているPython株価分析ツールに追加した『バックテスト機能』について紹介しました。
これまでに作ってきたStage表示機能とExit条件表示機能によって、
Stageで買い候補を見つける
▼
エントリーする
▼
Exit条件に従って売却する
という売買ルールが形になってきました。
今回さらにバックテスト機能を追加したことで、この売買ルールを過去の株価データに当てはめた場合、どのような結果になっていたのかを確認できるようになりました。
バックテストでは、
- 単一銘柄・複数銘柄の両方を検証
- トレード数・勝率・平均損益・累積リターンなどを集計
- 買い・売りポイントをチャートで確認
- 個別の取引結果やExit理由を確認
- 銘柄や期間を変えて結果を比較
といったことができます。
実際にバックテストしてみると、ひとつの銘柄や期間では良い結果でも、条件を変えると結果が大きく変わることもありました。
そのため、バックテストは『この売買ルールなら勝てる』と判断するためのものではなく、自分で作ったルールが過去のデータでどのように機能したのかを確認するためのものとして利用しています。
これで、
Stage:『いつ買う?』
▼
Exit:『いつ売る?』
▼
Backtest:『その売買ルールを過去データで検証する』
という一連の仕組みがつながりました。
今後も実際にツールを使いながら、バックテスト結果と実運用の両方を確認し、必要に応じてStageやExitのルールを改善していきたいと思います。
『Exit条件表示機能』を確認したい方はこちらです。
← Exit条件表示機能
【投資に関する免責事項】
本ブログで紹介している株価解析ツールによるスコアリングおよび銘柄分析は、あくまで個人の学習・研究および技術検証を目的としたものであり、特定の銘柄の売買を推奨するものではありません。
ツールの算出結果や掲載情報の正確性については万全を期しておりますが、その内容を保証するものではありません。投資の最終決定は、必ずご自身の判断と責任において行っていただきますようお願いいたします。
万一、本ブログの情報に基づいて被ったいかなる損害についても、当サイトおよび運営者は一切の責任を負いかねますのであらかじめご了承ください。

