「いつ買って、いつ売ればいいのかわからない」と悩むのは、投資をしていれば誰もが通る道です。勘や経験に頼るのも一つの方法ですが、今の時代はデータを味方につけることができます。プログラミング言語のPython(パイソン)を使えば、膨大な株価データを一瞬で分析し、客観的な判断基準を持つことが可能です。
この記事では、投資の王道である「順張り」と「逆張り」という2つの戦略をPythonで再現する方法を詳しく解説します。難しい環境構築は不要で、ブラウザさえあれば誰でも今日からシステムトレードの第一歩を踏み出せます。自分の投資判断に自信を持ちたい方は、ぜひ最後まで手を動かしながら読み進めてみてください。
投資で迷わないために「順張り」と「逆張り」を知ろう
投資の世界には、大きく分けて2つの波の乗り方があります。一つは、勢いがついている方向にそのまま乗る「順張り(トレンドフォロー)」。もう一つは、行き過ぎた動きが戻るタイミングを狙う「逆張り(平均回帰)」です。どちらが正解というわけではなく、それぞれに得意な場面と苦手な場面があります。
この章では、まずこの2大戦略がどのような仕組みで利益を出そうとするのか、その根本的な考え方を整理します。自分がどのような相場で利益を取りたいのかをイメージしながら、それぞれの特徴を比較してみましょう。
相場の波に乗る順張り戦略の基本
順張りは、価格が上がっている時に買い、さらに上がったところで売るスタイルです。「高いところで買って、もっと高いところで売る」という考え方で、強いトレンドが発生している時に大きな利益を狙えます。
例えば、新しい技術やサービスが注目されて株価がぐんぐん上がっている時、その勢いが続く限り利益が伸び続けます。一方で、価格が横ばいの「レンジ相場」では、上がったと思って買った直後に下がってしまう「だまし」に遭いやすいのが難点です。
順張りを検討する際に知っておきたいポイントをまとめました。
- 上昇の勢い(モメンタム)を利用して利益を狙う
- 大きなトレンドが出た時に利益が最大化する
- 勝率は高くなくても、一度の利益を大きく取れる
- 価格が停滞している時期は損失が出やすい
戻りを待つ逆張り戦略の考え方
逆張りは、価格が急激に下がりすぎた時に買い、元の水準に戻ったところで売るスタイルです。「安いところで買って、適正な価格で売る」という、直感的に分かりやすい投資法と言えるでしょう。
「売られすぎ」や「買われすぎ」をデータで判断し、相場の行き過ぎを狙います。価格が一定の範囲を行ったり来たりするレンジ相場では非常に高い勝率を誇ります。しかし、暴落などの強いトレンドが発生した際に買い向かうと、そのまま価格が戻らずに大きな損失を抱えるリスクがあります。
逆張りの主な特徴は以下の通りです。
- 相場の「行き過ぎ」からの反発を狙う
- レンジ相場や穏やかな市場で力を発揮する
- 比較的高い勝率を維持しやすい
- 想定外の強いトレンドには非常に弱い
どちらの戦略が有利かは相場環境で決まる
順張りと逆張りのどちらを選ぶべきかは、その時の市場が「トレンド相場」なのか「レンジ相場」なのかによって180度変わります。初心者が陥りがちな失敗は、一つの手法に固執して、相場環境に合わない時に無理にトレードを続けてしまうことです。
以下の表で、2つの戦略の違いを分かりやすく比較しました。
| 特徴 | 順張り(トレンドフォロー) | 逆張り(平均回帰) |
| 基本方針 | 上がっている時に買う | 下がりすぎた時に買う |
| 得意な相場 | 強い上昇・下落トレンド | 値動きが一定範囲のレンジ相場 |
| メリット | 利益が青天井で伸びる可能性がある | 心理的に安値を拾っている安心感がある |
| デメリット | 横ばい相場で何度も損切りになる | 暴落時に損失が無限に広がる恐れ |
| 代表的な指標 | 移動平均線、MACD | RSI、ボリンジャーバンド |
Pythonで投資分析を始める環境を整える
Pythonを使って投資分析を始めると聞くと、「難しい設定が必要なのでは?」と不安になるかもしれません。しかし、現在はGoogleが提供している無料のツールを使うことで、自分のパソコンに何もインストールすることなく、ブラウザ上でコードを書いて実行できる環境が手に入ります。
この章では、分析を始めるための最も簡単な準備方法と、株価データを取得するために欠かせない「ライブラリ」という便利な道具の使い方を紹介します。まずは、分析の土俵を作るところから始めましょう。
Google Colabなら5分で準備が終わる
Google Colab(グーグル・コラボ)は、Googleアカウントさえあれば誰でも無料で使えるPython実行環境です。複雑なソフトの導入作業は一切不要で、ブラウザを開いて「新しいノートブック」を作成するだけで、すぐにコードを書き始めることができます。
自分のパソコンの性能に関わらず、Googleの強力なサーバーを利用できるため、大量のデータ処理もスムーズに行えます。また、作成した分析コードはクラウドに保存されるため、スマホから結果を確認したり、他の人と共有したりすることも簡単です。
必要なライブラリをインストールしよう
Pythonには、特定の作業を劇的に楽にしてくれる「ライブラリ」という追加機能が豊富にあります。投資分析では、主に株価を取得するもの、データを加工するもの、グラフを描画するものの3つを使います。
以下のコードをGoogle Colabのセルに貼り付けて実行するだけで、準備は完了します。
pip install yfinance pandas matplotlib
インストールする主なツールの役割を紹介します。
- yfinance:Yahoo Financeから無料で株価を取得する
- pandas:表形式のデータを自由に加工・計算する
- matplotlib:分析結果をグラフやチャートで見せる
株価データを自動で取得する方法
準備ができたら、実際に株価を取得してみましょう。今回は世界的に有名な指数である「S&P 500」を例にします。コードを書くといっても、わずか数行で数年分のデータを手元に持ってくることができます。
import yfinance as yf
# S&P 500(Ticker: ^GSPC)のデータを取得
data = yf.download('^GSPC', start='2020-01-01')
# 最初の数行を表示して確認
print(data.head())
このように、yfinanceを使えば期間を指定するだけで、始値、高値、安値、終値といった情報がリスト形式で取得できます。
トレンドを追いかける「順張り戦略」を実装する
順張り戦略の中でも、最も有名で使いやすいのが「移動平均線の交差(ゴールデンクロス)」です。これは、短期的な価格の勢いが、長期的な流れを上回ったタイミングを「上昇トレンドの始まり」とみなす手法です。
ここでは、Pythonを使って移動平均線を算出し、売買サインを自動で判定するプログラムを作成します。一見複雑そうに見える計算も、Pythonのライブラリを使えば一行で終わってしまいます。
移動平均線のゴールデンクロスを利用しよう
移動平均線とは、過去一定期間の終値を平均した線です。25日移動平均線(短期)が75日移動平均線(長期)を、下から上へ突き抜けることをゴールデンクロスと呼びます。これは「最近の買いの勢いが強まってきた」というサインになります。
逆に、短期線が長期線を上から下へ突き抜ける「デッドクロス」は、下落トレンドへの転換を意味し、売りのサインとなります。このシンプルなルールを機械的に適用することで、感情に左右されないトレードが可能になります。
順張りプログラムのコードを書く
実際に、取得した株価データを使って移動平均線を計算してみましょう。pandasというライブラリにある rolling という機能を使えば、平均値の算出は非常に簡単です。
# 短期(25日)と長期(75日)の移動平均を計算
data['MA25'] = data['Close'].rolling(window=25).mean()
data['MA75'] = data['Close'].rolling(window=75).mean()
# サインの判定:短期が長期を上回っていれば1、そうでなければ0
data['Signal'] = 0
data.loc[data['MA25'] > data['MA75'], 'Signal'] = 1
このように、if文などを細かく書かなくても、データ全体に対して一括で条件判定を行えるのがPythonの強みです。
チャートに売買サインを表示して確認する
計算した結果が正しいかどうかは、グラフにして目で確認するのが一番です。株価の推移に移動平均線を重ね、どこで売買サインが出ているかを視覚化します。
グラフを表示する際は、以下の要素を盛り込むと分かりやすくなります。
- 黒色の線:実際の終値(価格の動き)
- 青色の線:25日移動平均線(短期の流れ)
- 赤色の線:75日移動平均線(長期の流れ)
- 背景の色分け:サインが出ている期間を強調する
視覚化することで、「ここは確かにトレンドに乗れているな」「ここではだましに遭っているな」といった戦略の癖が直感的に理解できるようになります。
売られすぎを狙う「逆張り戦略」をコードで書く
次に、逆張り戦略の代表格である「RSI(相対力指数)」を使った手法を実装します。RSIは、一定期間の値上がり幅と値下がり幅の合計から、現在の価格が「買われすぎ」か「売られすぎ」かを0から100の数値で示す指標です。
順張りが「勢いに乗る」のに対し、逆張りは「行き過ぎの修正」を狙います。このロジックをPythonで組み立てて、どのようなタイミングで買い出動すればいいのかを見ていきましょう。
RSIで買われすぎ・売られすぎを判断する
RSIの数値には一般的に「30以下なら売られすぎ」「70以上なら買われすぎ」という基準があります。逆張り戦略では、この30を下回ったタイミングで「そろそろ反発するだろう」と予測して買いを入れます。
例えば、市場全体にパニックが起きて株価が急落した際、RSIは一気に下がります。しかし、パニックが落ち着けば価格は適正な水準に戻ろうとします。この「戻り」の初動を捉えるのがRSI戦略の狙いです。
逆張りロジックをPythonで組み立てる
RSIの計算は少し複雑ですが、一度コードを書いてしまえば、どんな銘柄にも応用できます。計算式を1から書く必要はなく、基本的な関数の組み合わせで実装可能です。
# 終値の変化幅を計算
delta = data['Close'].diff()
# 上昇幅と下落幅を分ける
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
# 14日間の平均を出す
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
# RSIを計算
rs = ema_up / ema_down
data['RSI'] = 100 - (100 / (1 + rs))
これで、毎日変化するRSIの値がデータとして追加されました。あとは「30以下」という条件を適用するだけです。
サインが出るタイミングを視覚化しよう
RSI戦略は、トレンドが出ていないボックス相場でその真価を発揮します。株価チャートの下にRSIのグラフを表示させ、30のラインを割り込んだ箇所に印をつけることで、反発のタイミングを捉えられているか確認してみましょう。
逆張りのシミュレーションを行う際に意識すべきポイントを整理しました。
- 暴落の最中に買って、さらに掘り下げていないか
- 反発した後の利益確定のタイミングはどこか
- RSIがずっと低いまま(張り付き)の銘柄を避けているか
- 何日程度の短期リバウンドを狙う想定か
このように、数値でサインを出すことで、なんとなく「安そうだから買う」という曖昧な判断から卒業できます。
過去のデータで2つの戦略をテストしよう
戦略を作ったら、次にやるべきことは「もし過去にこのルールで運用していたら、いくら儲かったのか?」を確認することです。これを「バックテスト」と呼びます。
どんなに優れた理論に見えても、過去のデータで勝てない戦略が未来に勝てる可能性は低いです。Pythonを使えば、10年分以上のデータを数秒でシミュレーションし、その戦略の有効性を残酷なまでに明らかにできます。
どちらが稼げたか?バックテストのやり方
バックテストは、毎日の売買サインに従って資産がどう増減するかを計算する作業です。「サインが出た翌日に買い、サインが消えた翌日に売る」というルールを、過去のデータに当てはめていきます。
具体的には、その日の「リターン(前日比)」に、自分が持っている「ポジション(買いなら1)」を掛け合わせて、累積の利益を計算します。これにより、単純に持ち続けた(バイ・アンド・ホールド)場合と、戦略を使った場合の比較が可能になります。
資産の推移をグラフにして比較する
計算結果は「資産曲線」としてグラフ化しましょう。縦軸を資産額、横軸を日付にすることで、利益がどの時期に積み上がり、どの時期に減っているかが一目で分かります。
ここで重要なのは、最終的な利益の額だけを見ないことです。順張りと逆張りでは、利益の増え方に以下のような違いが出ることが多いです。
- 順張り:普段はジワジワ減るが、年に数回のチャンスでドカンと増える
- 逆張り:安定して右肩上がりに増えるが、たまにガクンと大きく減る
この「増え方の形」が自分の性格や許容できるリスクに合っているかどうかが、運用を続ける鍵となります。
最大でどれくらい損をするか計算しよう
投資で最も大切なのは、利益よりも「どれだけ損をする可能性があるか」を知ることです。これを測る指標として「最大ドローダウン」があります。
最大ドローダウンとは、資産が最も多かった時期から、一時的にどれだけ落ち込んだかを示す割合です。例えば、100万円が70万円まで減ったなら、ドローダウンは30%です。どれほど稼げる戦略でも、ドローダウンが50%を超えるようなら、多くの人は途中で怖くなって止めてしまうでしょう。
戦略の健全性を評価するための指標をまとめました。
| 指標名 | 意味 | チェックするポイント |
| 累積リターン | 最終的にどれくらい増えたか | 銀行預金やインデックス投資を上回っているか |
| 勝率 | 勝ちトレードの割合 | 逆張りは高くなりやすく、順張りは低くなりやすい |
| 最大ドローダウン | 一時的な最大の落ち込み幅 | 自分のメンタルが耐えられる範囲(20%以内など)か |
| プロフィットファクター | 総利益 ÷ 総損失 | 1.0以上なら利益が出ている。1.5以上なら優秀 |
Pythonでの分析を実戦に活かすコツ
コードが書けるようになり、バックテストの結果が良ければ、すぐにでも大金を投じたくなるかもしれません。しかし、シミュレーションと実戦の間には大きな溝があります。
Pythonで作った戦略を、実際の投資に役立てるためには、いくつかの応用テクニックが必要です。ここでは、分析結果をより現実的なものにし、トレードの精度を高めるための3つのステップを紹介します。
順張りと逆張りを組み合わせる判断基準
一つの手法に頼るのではなく、相場の状況を見て「今は順張り、今は逆張り」と使い分けるのが理想です。例えば、相場のボラティリティ(変動率)が高い時は順張りを、低い時は逆張りを選択するというロジックをコードに追加してみましょう。
また、2つの指標を組み合わせて「移動平均線が上向き(順張り条件)かつ、RSIが一時的に下がった(逆張り条件)」時に買うという、いわゆる「押し目買い」の戦略を作ることもできます。Pythonならこうした条件の追加も自由自在です。
損切りルールをコードに組み込む
バックテストの成績を劇的に改善させるのは、多くの場合「いつ買うか」よりも「いつ逃げるか」の設定です。買値から5%下がったら強制的に売る、といった損切りルールを必ずプログラムに組み込みましょう。
Pythonで損切りを実装する際は、以下のような条件を検討します。
- 固定パーセント(買値からn%下落)での決済
- 期間による決済(買ってからn日経過したら売る)
- ボラティリティに応じた決済(ATRなどの指標を利用)
これらのルールをあらかじめ決めておくことで、暴落時に「明日には戻るかも」という根拠のない期待で損失を膨らませる失敗を防げます。
まずはデモトレードで精度を確かめる
コード上の成績が良くても、実際の市場では注文が成立するまでのタイムラグや手数料が発生します。まずは自分のお金を動かさず、翌日のサイン通りに「買ったつもり」で記録をつけるデモトレードを数週間続けてみてください。
自分の作ったロジックが、リアルタイムの相場でどう動くかを観察することで、バックテストでは見えてこなかった改善点が見つかるはずです。
運用を始める前に注意すべきリスク
最後に、システムトレードにおける「落とし穴」について触れておきます。Pythonを使えば誰でも高度な分析ができますが、ツールが優秀であることと、投資で勝てることは別問題です。
データの扱い方や市場の性質を正しく理解していないと、かえって大きな損失を招くこともあります。運用を開始する前に、必ず以下の3つのリスクを頭に入れておいてください。
過去の成績が未来を保証しない理由
バックテストの結果が完璧すぎる場合、それは「過剰最適化(カーブフィッティング)」かもしれません。過去の特定のデータに合わせすぎて、未来の未知のデータでは全く通用しない戦略になっている状態です。
例えば、過去1年間の特定の銘柄だけに通用する複雑なルールを作ると、その期間の成績は100点になりますが、翌年からは全く機能しなくなります。ルールはできるだけシンプルに保ち、どんな銘柄や期間でもある程度の成績が出る「汎用性」を重視してください。
手数料とスリッページを考慮しよう
シミュレーションでは見落としがちですが、実際の取引には売買手数料がかかります。また、買いたいと思った瞬間の価格で買えるとは限らない「スリッページ(注文のズレ)」も発生します。
特に売買回数が多い逆張り戦略などの場合、利益よりも手数料の方が高くなってしまう「手数料負け」の状態になることがあります。バックテストを行う際は、あらかじめ1回の取引ごとに一定のコストを差し引いて計算するようにしましょう。
データの異常値に騙されない対策
株価データには稀に、株式分割や併合による急激な価格変化が含まれていることがあります。これをプログラムが「大暴落」や「大暴騰」と誤認して、おかしなサインを出してしまうことがあります。
データを取得した後は、極端な値動きがないか、分割調整後の価格(Adjusted Close)を使っているかを確認する習慣をつけましょう。正しいデータこそが、正しい分析の唯一の土台となります。
まとめ:Pythonで自分だけの投資戦略を磨こう
Pythonを使って投資戦略を立てることは、暗闇の中をライトを持って歩くようなものです。順張りでトレンドを掴むにせよ、逆張りでリバウンドを拾うにせよ、データに基づいた「根拠」があることは、投資家の心理に大きな安定をもたらします。
この記事で紹介した移動平均線やRSIのコードは、あくまでスタート地点に過ぎません。まずはGoogle Colabでコードを動かしてみて、自分なりに数値を変えたり、他の指標を組み合わせたりして、自分だけの「勝てるロジック」を探求してみてください。
小さな一歩から始め、データと向き合う時間を増やすことで、あなたの投資はもっと洗練されたものに変わっていくはずです。まずは今日、気になる銘柄のデータを取得するところから始めてみましょう。

