1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Freqtrade Backtesting完全ガイド:過去データで戦略を検証しよう

Posted at

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の順序)**は不明のため、一部は仮定に依存します。これがバックテスト精度に影響する可能性があります。

精度向上の工夫

  1. Detail timeframeの併用
  2. 現実的な手数料・最小数量・丸め規則の反映
  3. 取引所・市場特性に応じたパラメータの見直し

その他の機能

  • 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解析を行う場合は、以下の手順で可視化できます:

  1. freqtrade install-ui
  2. api_server設定
  3. freqtrade webserverで起動
  4. Backtesting画面から結果を読み込んで可視化・比較

まとめ

Freqtradeのバックテスト機能を使うことで、実際の取引前に戦略の有効性を検証できます。重要なポイントは:

  • 再現性を重視した設定
  • 現実的なパラメータの設定
  • 結果の適切な解釈

バックテストで良好な結果が得られたら、次はHyperoptでパラメータ最適化を行い、さらに精度を高めていきましょう。

バックテストはあくまで過去データに基づく検証です。実際の取引では市場環境の変化や流動性などの要因も考慮することが重要です。

参考リンク

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?