Freqtrade Backtesting完全ガイド:過去データで戦略を検証しよう
はじめに
Freqtradeを使った自動売買bot開発において、**Backtesting(バックテスト)**は戦略の有効性を確認する重要なプロセスです。この記事では、Freqtradeのバックテスト機能について、基本概念から実践的な使い方まで詳しく解説します。
前提条件
この記事はFreqtradeが既にインストール済みであることを前提としています。まだインストールしていない場合は、以下の記事を参考にインストールを完了してください:
Freqtradeインストールガイド
Backtestingとは
Backtestingは、**手元の過去データ(OHLCV)**を使ってトレーディングストラテジーの成績を検証する仕組みです。実際の取引を行う前に、過去のデータで戦略がどの程度うまく機能したかを確認できます。
データがない場合は、まず「Data Downloading」でデータを取得する必要があります。Web UIのwebserverモードからも実行可能です。
基本的なコマンド構文
基本的なバックテストコマンドは以下の形式です:
freqtrade backtesting [主要オプション]
主要なオプション一覧
オプション | 説明 | 例 |
---|---|---|
-s/--strategy |
実行するストラテジークラス名 | --strategy AwesomeStrategy |
-i/--timeframe |
時間足の指定 | --timeframe 1h |
--timerange |
データ期間の指定 | --timerange 20240101-20240630 |
--stake-amount |
1トレードあたりの賭け金 | --stake-amount 1000 |
--max-open-trades |
同時建玉数の上限 | --max-open-trades 3 |
--dry-run-wallet |
初期資金の設定 | --dry-run-wallet 10000 |
-p/--pairs |
対象ペアの限定 | --pairs BTC/USDT ETH/USDT |
--export |
結果のエクスポート形式 | --export trades |
--breakdown |
期間別内訳表示 | --breakdown month |
実行例
最小構成での実行
既存のデータがある場合の最もシンプルな実行例:
freqtrade backtesting --strategy AwesomeStrategy
詳細オプションを指定した実行
# 1分足データで初期資金1000を指定
freqtrade backtesting \
--strategy AwesomeStrategy \
--timeframe 1m \
--dry-run-wallet 1000
初期資金と賭け金の設定
重要なポイント
初期資金はstake_amount
より大きくする必要があります。 この条件を満たさないと売買を開始できません。
初期資金の指定方法:
- CLIオプション:
--dry-run-wallet
または--starting-balance
- 設定ファイル:
dry_run_wallet
ダイナミック賭け金
stake_amount
を"unlimited"
に設定すると、初期資金をmax_open_trades
で等分し、利益を再投資して複利的に増減させることができます。
{
"stake_amount": "unlimited",
"max_open_trades": 3,
"dry_run_wallet": 10000
}
ペアリストの扱いと再現性
動的ペアリストの注意点
動的ペアリスト(出来高ベース等)は、過去時点の市場状況を完全再現できず、結果の再現性が低下する可能性があります。
推奨設定
再現性を重視する場合は、StaticPairListと**pair_whitelist
**で固定ペアを指定することを推奨します:
{
"pair_whitelist": ["BTC/USDT", "ETH/USDT"],
"pairlists": [{"method": "StaticPairList"}]
}
バックテスト結果の見方
バックテスト実行後は、以下のような詳細な結果が表示されます:
Backtesting report table
各ペアのトレード数、平均利益%、合計利益、勝率などの一覧
Left open trades
期間末に未決済で残ったポジションの集計
Enter tag stats / Exit reason stats
エントリータグやクローズ理由別の成績
Summary metrics
- Sharpe ratio
- Sortino ratio
- Profit factor
- Maximum drawdown
- CAGR(年率成長率)
期間別内訳
日次・週次・月次・年次の収益内訳
出力は既定でuser_data/backtest_results/
に保存され、トレード明細は可視化や追加分析に活用できます。
バックテストの限界と対策
制約事項
ローソク足の**足内の値動き(OHLCの順序)**は不明のため、一部は仮定に依存します。これがバックテスト精度に影響する可能性があります。
精度向上の工夫
- Detail timeframeの併用
- 現実的な手数料・最小数量・丸め規則の反映
- 取引所・市場特性に応じたパラメータの見直し
その他の機能
- Backtest result cachingによる再実行の高速化
- plot-dataframe等での可視化
-
複数ストラテジーの一括検証(
--strategy-list
)
実践サンプル:BTC/USDTでのバックテスト
実際にBTC/USDTペアで2024年上半期のデータを使ったバックテストを実行してみましょう。
1. ユーザーディレクトリの作成
freqtrade create-userdir --userdir user_data
2. バックテスト用設定ファイルの作成
cat > user_data/config_backtest.json << 'EOF'
{
"max_open_trades": 3,
"stake_currency": "USDT",
"timeframe": "1h",
"dry_run": true,
"dry_run_wallet": 10000,
"tradable_balance_ratio": 1.0,
"pair_whitelist": ["BTC/USDT"],
"pair_blacklist": [],
"exchange": {
"name": "binance",
"ccxt_config": {},
"ccxt_async_config": {},
"pair_whitelist": ["BTC/USDT"],
"pair_blacklist": []
},
"pairlists": [{ "method": "StaticPairList" }],
"entry_pricing": {
"price_side": "same",
"use_order_book": false,
"order_book_top": 1,
"price_last_balance": 0.0
},
"exit_pricing": {
"price_side": "same",
"use_order_book": false,
"order_book_top": 1,
"price_last_balance": 0.0
}
}
EOF
3. 過去データの取得
freqtrade download-data \
--exchange binance \
--timeframe 1h \
--timerange 20240101-20240630 \
--pairs BTC/USDT
4. サンプル戦略の作成
freqtrade new-strategy -s MySimpleStrategy
5. バックテストの実行
freqtrade backtesting \
--config user_data/config_backtest.json \
--strategy MySimpleStrategy \
--timeframe 1h \
--timerange 20240101-20240630 \
--starting-balance 10000 \
--stake-amount 1000 \
--export trades
結果の確認
実行後、user_data/backtest_results/
にbacktest-result-<日時>.meta.json
などが出力されます。
UI解析を行う場合は、以下の手順で可視化できます:
freqtrade install-ui
-
api_server
設定 -
freqtrade webserver
で起動 - Backtesting画面から結果を読み込んで可視化・比較
まとめ
Freqtradeのバックテスト機能を使うことで、実際の取引前に戦略の有効性を検証できます。重要なポイントは:
- 再現性を重視した設定
- 現実的なパラメータの設定
- 結果の適切な解釈
バックテストで良好な結果が得られたら、次はHyperoptでパラメータ最適化を行い、さらに精度を高めていきましょう。
バックテストはあくまで過去データに基づく検証です。実際の取引では市場環境の変化や流動性などの要因も考慮することが重要です。