【2026年版】Backtesting.pyで始めるPythonバックテスト入門|移動平均クロス戦略を検証する

Uncategorized

Backtesting.pyとは?なぜ今注目されているのか

「この投資戦略、本当に使えるの?」——そう思いながら実戦投入して損をした経験、ありませんか?アルゴリズムトレードで成功するための最重要ステップがバックテストです。過去のデータで戦略を検証してから実際の資金を使うことで、リスクを大幅に減らすことができます。

2026年現在、Pythonのバックテストライブラリとしてもっともシンプルかつ強力と評価されているのがBacktesting.pyです。本記事では、インストールから実際に移動平均クロス戦略をバックテストするところまで、初心者向けにわかりやすく解説します。

Backtesting.pyの特徴

Backtesting.pyは以下の特徴を持つ軽量フレームワークです。

まず、コード量が少ない点が魅力です。init()next()の2つのメソッドを書くだけで戦略を定義できます。次に、インタラクティブなチャート出力が標準搭載されており、バックテスト結果を視覚的に確認できます。また、パラメータ最適化機能により、RSIの閾値や移動平均の期間などを自動で探索できます。さらに、株・FX・暗号資産などあらゆる金融商品に対応しています。

インストールと環境準備

まずはライブラリをインストールします。

pip install backtesting yfinance pandas

データ取得にはyfinanceを使います。日本株のデータも取得可能です(例:トヨタ自動車は「7203.T」)。

移動平均クロス戦略のバックテスト実装

それでは実際にコードを書いていきましょう。今回は「短期移動平均が長期移動平均を上抜けたら買い、下抜けたら売り」というシンプルな移動平均クロス戦略をバックテストします。

import yfinance as yf
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
import pandas_ta as ta

# 株価データの取得(トヨタ自動車 過去2年)
data = yf.download('7203.T', start='2024-01-01', end='2026-01-01')
data = data[['Open', 'High', 'Low', 'Close', 'Volume']]
data.columns = ['Open', 'High', 'Low', 'Close', 'Volume']

# 戦略クラスの定義
class SmaCross(Strategy):
    n1 = 20   # 短期移動平均の期間
    n2 = 50   # 長期移動平均の期間

    def init(self):
        close = self.data.Close
        self.sma1 = self.I(ta.sma, close, self.n1)
        self.sma2 = self.I(ta.sma, close, self.n2)

    def next(self):
        if crossover(self.sma1, self.sma2):
            self.buy()
        elif crossover(self.sma2, self.sma1):
            self.sell()

# バックテストの実行
bt = Backtest(data, SmaCross, cash=1_000_000, commission=0.001)
stats = bt.run()
print(stats)

結果の見方

bt.run()を実行すると、以下のような統計情報が出力されます。

# 主な出力項目
# Return [%]        23.46    ← 総リターン
# Max. Drawdown [%] -12.3    ← 最大ドローダウン
# Win Rate [%]      61.1     ← 勝率
# Sharpe Ratio      1.24     ← シャープレシオ

特に注目すべき指標は「Max. Drawdown(最大ドローダウン)」です。-20%を超えるようなら戦略の見直しが必要です。「Sharpe Ratio(シャープレシオ)」が1.0以上であれば、リスクに対してリターンが十分と言えます。

チャートで視覚的に確認する

# インタラクティブなチャートを表示
bt.plot()

ブラウザが開き、ローソク足チャートに移動平均線・売買シグナル・資産推移が重ねて表示されます。どのタイミングで売買が行われたかを直感的に確認できます。

パラメータ最適化で戦略を磨く

stats, heatmap = bt.optimize(
    n1=range(5, 30, 5),
    n2=range(30, 100, 10),
    maximize='Sharpe Ratio',
    return_heatmap=True
)
print(stats['_strategy'])

まとめ

Backtesting.pyを使えば、複雑な投資戦略も数十行のPythonコードで検証できます。「まず検証してから実戦投入」——この習慣がアルゴリズムトレードで長く生き残る秘訣です。ぜひ今日から自分の戦略をバックテストしてみてください。

タイトルとURLをコピーしました