mcpField
C
crypto-backtest

crypto-backtest

github.com/0xriktデータ・データベース18121 回インストール39 週間前に更新
リポジトリ

crypto-backtest について

crypto-backtestは、自然言語の取引アイデアを検証可能な戦略に変換する、暗号資産の現物取引向けスキルです。提案した戦略への確認後にバックテストとレポート作成を行い、レバレッジ、空売り、先物には対応しません。

主な機能

  1. 01取引アイデアを複数指標の条件に展開
  2. 02トレンド・ブレイクアウト・平均回帰のテンプレート
  3. 03リスク設定とポジションルールを提示
  4. 04ユーザー確認後にバックテストを実行
  5. 05レポート作成と次の改善案の提示

活用シーン

  1. 01割安という発想を複数要因の条件に変換
  2. 02現物のトレンド戦略やブレイクアウトを検証
  3. 03リスク設定が過去の結果に与える影響を評価
  4. 04バックテスト指標を基に戦略パラメーターを調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/0xrikt/crypto-skills --skill crypto-backtest

インストール後、Claude Code で/crypto-backtestを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

btc_sentiment_strategy_20pct.py
btc_sentiment_strategy.py
btc_valuation_strategy.py
README.md
requirements.txt
src/
backtest.py
pair_trading.py
smart_dca.py

詳細

暗号資産戦略バックテストスキル

自然言語による取引アイデアを、プロフェッショナルなバックテスト、美しいレポート、実行可能なコードを備えた検証済みの戦略に変換します。

⚠️ 現物取引のみ:このスキルがサポートするのは、現物取引戦略のみです。レバレッジ、空売り、先物/無期限契約には対応していません。すべての戦略はロングのみです(安く買う → 保有する → 高く売る)。

あなたの得意分野

漠然とした取引の直感を、プロフェッショナルレベルの多次元戦略に変換します。ユーザーが「安いときに買う」と言った場合、単に RSI < 30 を設定するのではなく、各指標に適切な根拠を持たせた複数の指標を用いて、包括的な評価モデルを構築します。

目標:戦略の完成度を徹底的に高め、ユーザーに「こんなこと、自分では思いつかなかった」と思ってもらうことです。


重要:パラメーター推定の原則

クオンツのように考える:すべてのパラメーターには、推測ではなく根拠が必要です。

  1. しきい値 = f(過去のボラティリティ):スプレッドには標準偏差の1.5~2倍を使用します。RSI には 30/70(BTC)または 25/75(アルトコイン)を使用します。
  2. ストップロス > 通常のノイズ:BTC の日次ボラティリティは 3~5%なので、ストップロスは 2%ではなく 5~8%にします。
  3. ユーザーの指定を厳守:「6時間ごと」と指定された場合は、2時間ではなく 6時間を使用します。
  4. 現物取引のみ:レバレッジ = 常に 1x です。無期限契約や空売りは使用しません。
  5. ポジションサイズはパーセンテージ:--position-size 10 は、取引ごとに資金の 10%を意味し、10 ドルではありません。
  6. OKX のデータ制限:OKX が提供する過去データは約 60~90 日分のみです。より長期間のバックテストには、--exchange kucoin または --exchange binance(アクセスできる場合)を使用します。

重要:戦略を完成させるための基準

自然言語を技術的な条件に変換する際、単一の指標を使用してはいけません。常に複数の側面を組み合わせてください。

🎯 「割安/安い/売られすぎ/押し目」→ 多因子評価モデル

使用しないでください: RSI(14) < 30(単純すぎて、トレンドに惑わされやすい)

使用してください: 4~5 個の指標を組み合わせ、堅牢な評価スコアを算出します。

観点指標強気シグナル重み
モメンタムRSI(14)< 351.0
トレンド内の位置価格 vs SMA(200)価格 < SMA2001.0
ボラティリティバンドボリンジャーバンド価格 < BB_Lower1.0
ドローダウン価格 vs 90日高値ドローダウン > 25%1.0
モメンタムのダイバージェンスMACD ヒストグラム価格が低いときにプラスへ転じる0.5
出来高による確認出来高 vs MA(20)押し目で出来高が急増(>1.5x)0.5

評価スコア = 発生したシグナルの合計 × 重み

  • スコア ≥ 3.0:割安度が高い
  • スコア 2.0~3.0:割安度が中程度
  • スコア < 2.0:シグナルが弱い、またはなし
📈 「割高/高い/買われすぎ」→ 多因子モデル
観点指標弱気シグナル重み
モメンタムRSI(14)> 701.0
トレンドの伸び価格 vs SMA(200)価格 > SMA200 × 1.31.0
ボラティリティバンドボリンジャーバンド価格 > BB_Upper1.0
直近安値からの上昇価格 vs 90日安値上昇率 > 50%1.0
モメンタムのダイバージェンスMACD ヒストグラム価格が高いときにマイナスへ転じる0.5
出来高の減少出来高 vs MA(20)上昇局面で出来高が減少0.5
🚀 「トレンド/強気/上昇トレンド」→ 複数時間軸での確認

使用しないでください: Price > EMA(21)(単一の時間軸では、急な反転に振り回されやすい)

使用してください: 複数の時間軸で条件が一致することを求めます。

時間軸条件目的
長期価格 > SMA(200)大局的なトレンドの方向
中期価格 > EMA(50)中期的なトレンド
短期EMA(9) > EMA(21)直近のモメンタム
モメンタムMACD > シグナルライン加速
強さADX > 25トレンドの強さを確認

エントリー:すべての条件が一致 エグジット:短期の反転(EMA9 < EMA21)またはモメンタムの喪失(MACD の下抜け)

💥 「ブレイクアウト」→ 出来高で確認するブレイクアウト

避けるべきこと: Price > BB_Upper(偽のブレイクアウトが多発します)

推奨: 複数の確認条件を必須にします。

条件目的
Price > BB_Upper(20, 2.0)統計的なブレイクアウト
Volume > 2.0 × Volume_MA(20)強い市場参加
ローソク足の値幅の上位25%で終値を付ける買い圧力
RSI(14) > 50 かつ < 80過熱していないモメンタム
直近5本のローソク足:値幅が狭い(BB幅が縮小中)エネルギーの蓄積
📊 「DCA」→ バリュエーション調整付きスマートDCA

避けるべきこと: 各期間で固定額を投資する(好機を逃します)

推奨: バリュエーションスコアに基づいて配分を動的に調整します。

バリュエーションスコア市場の状態配分
≥ +3.0🟢🟢 極端な割安基準額 × 2.0
+1.5~+3.0🟢 割安基準額 × 1.5
-1.5~+1.5🟡 適正価格基準額 × 1.0
-3.0~-1.5🔴 割高基準額 × 0.5
≤ -3.0🔴🔴 極端な割高基準額 × 0.25
🔄 「平均回帰」→ 統計的乖離戦略
条件エントリーエグジット
Zスコア価格のZスコア < -2.0Zスコア > 0
BB位置Price < BB_LowerPrice > BB_Middle
RSIRSI < 30RSI > 50
確認条件下落時の出来高急増-

ワークフロー

ステップ1:意図を理解して具体化する

ユーザーが取引アイデアを説明した場合:

  1. 戦略の中核となる種類を特定する:平均回帰? トレンドフォロー? ブレイクアウト? DCA?
  2. 制約を抽出する:資産、時間軸、リスク許容度
  3. 上記のテンプレートを使って、多次元の条件に具体化する
  4. 戦略の種類に応じた適切なリスク管理を追加する
ステップ2:確認用に完全な戦略を提示する

重要: 戦略は、必ず次のYAML形式で提示してください。ユーザーがその徹底ぶりに感心するようにしましょう。

## 📊 Strategy: [Descriptive Name]
# Core Logic: [One sentence explaining the edge]

Data:
  primary_symbol: BTC/USDT
  timeframe: 6h                    # MUST match user's specification
  backtest_period: 365 days
  indicators:
    RSI: { period: 14 }
    SMA: { period: 50, 200 }
    BB: { period: 20, std_dev: 2 }
  data_requirements: [close_price, volume]

Signal:
  entry_conditions:
    condition_type: ALL            # ALL conditions must be met
    conditions:
      - RSI < 35
      - Price < BB_lower
      - Price < SMA200 * 0.98
  exit_conditions:
    condition_type: ANY            # ANY condition triggers exit
    conditions:
      - RSI > 70
      - Price > BB_upper
      - Price > SMA200 * 1.05
  execution_schedule:
    frequency: 6h                  # MUST match user's specification
    check_times: [00:00, 06:00, 12:00, 18:00]

Capital:
  total_capital: 10000
  position_size_pct: 10            # 10% of capital per trade (NOT fixed dollar amount!)
  reserve_ratio: 0.2               # 20% kept as cash buffer
  max_drawdown_limit: 0.15         # 15% max drawdown

Risk:
  stop_loss: 8%
  take_profit: 15%                 # or null if exit by signal only
  max_account_risk: 0.75
  emergency_rules:
    account_risk_threshold: 0.8    # If 80% at risk → close_all

Execution:
  leverage: 1x                     # SPOT ONLY - always 1x
  order_type: market
  position_side: long_only
  max_positions: 1

✅ 内容を確認してください。バックテストを実行するには「OK」と返信するか、調整したい点をお知らせください。

⛔ STOP:ユーザーの確認を待つ

ユーザーが戦略を明示的に確認するまで、ステップ3に進まないでください。

  • ユーザーが「OK」、「确认」、「没问题」、「go ahead」と言った場合 → バックテストに進む
  • ユーザーに質問がある場合、または変更を希望する場合 → 戦略を修正して再度提示する
  • ユーザーの確認なしにバックテストを実行してはなりません

ステップ3:バックテストを実行する(ユーザーの確認後のみ)

重要: ユーザーの言語を判定し、それに応じて --lang パラメーターを渡してください。

  • ユーザーが中国語で書いている場合 → --lang zh
  • ユーザーが英語で書いている場合 → --lang en

これにより、HTMLレポートのテキストがユーザーの言語に一致します。

python src/backtest.py \
  --symbol "BTC/USDT" \
  --timeframe "4h" \
  --days 365 \
  --entry "rsi<35,price<sma200,price<bb_lower" \
  --exit "rsi>50,price>bb_middle" \
  --stop-loss 8 \
  --take-profit 20 \
  --output report.html \
  --lang zh  # or --lang en based on user's language
ステップ4:分析とともに結果を提示する

指標を示し、実行可能な分析も提供します。

## 📈 Backtest Results

| Metric | Value | Assessment |
|--------|-------|------------|
| Total Return | +47.3% | ✅ Beats B&H |
| Max Drawdown | -18.2% | ⚠️ Moderate |
| Sharpe Ratio | 1.42 | ✅ Good |
| Win Rate | 64% | ✅ Healthy |
| Profit Factor | 2.1 | ✅ Strong |

### Key Insights:
- Strategy performed best during [market condition]
- Largest drawdown occurred during [event]
- Consider [specific improvement] to reduce drawdown

### Generated Files:
- `report.html` - Interactive visual report
- `strategy.py` - Runnable Python code
ステップ5:反復を提案する

結果に基づいて、積極的に次の項目を提案します。

  • パラメーターの最適化
  • 追加のフィルター
  • 代替アプローチ
  • リスク調整

戦略テンプレートのリファレンス

テンプレート1:複数要因によるバリュー買い

データ:

  • シンボル:BTC/USDT | 時間軸:4h | 期間:365d
  • 指標:RSI(14)、SMA(200)、BB(20,2)、High_90

シグナル:

エントリー(すべて)エグジット(いずれか)
RSI < 35RSI > 65
Price < SMA200_98pctPrice > SMA200
Price < BB_lowerPrice > BB_middle
ドローダウン > 25%ストップロス 10%

リスク: ストップ 10% | 利益確定 25% | ポジション 10%


テンプレート2:確認条件付きトレンドフォロー

データ:

  • シンボル:BTC/USDT | 時間軸:4h | 期間:365d
  • 指標:SMA(200)、EMA(9,21,50)、MACD、ADX

シグナル:

エントリー(すべて)エグジット(いずれか)
Price > SMA200EMA9 < EMA21
EMA9 > EMA21Price < SMA50
MACD > MACD_signalMACDのデッドクロス
ADX > 25ストップロス 8%

リスク: ストップ 8% | トレーリングストップ 3xATR | ポジション 15%


テンプレート 3:出来高確認済みブレイクアウト

データ:

  • シンボル:BTC/USDT | 時間足:1h | 期間:180d
  • インジケーター:High_20、Volume_MA(20)、RSI(14)、BB(20,2)

シグナル:

エントリー(すべて)エグジット(いずれか)
Price > High_20Price < EMA21
Volume > Volume_MA_200pctRSI > 80
RSI が 50~75 の範囲ストップロス 5%
BB_width が収縮中利益確定 15%

リスク: ストップ 5% | 利益確定 15% | ポジション 20%


テンプレート 4:スマート DCA

データ:

  • シンボル:BTC/USDT | 時間足:1d | 頻度:週次

シグナル(バリュエーションベースの配分):

スコア市場の状態配分
≥ +3🟢🟢 強い買いゾーンベース × 2.0
+1.5 to +3🟢 割安ベース × 1.5
-1.5 to +1.5🟡 適正価格ベース × 1.0
-3 to -1.5🔴 割高ベース × 0.5
≤ -3🔴🔴 最大限の警戒ベース × 0.25

資金: ベース $200/週 | 予備資金 20% | 最大 DD 15%


テンプレート 5:ペアトレード/相対的な強さ

コンセプト: 相関する2つの資産(例:BTCとETH)が大きく乖離すると、
パフォーマンスの低い方が追いつく傾向があります。この平均回帰を取引します。

Data:
  primary_symbols: [BTC/USDT, ETH/USDT]
  timeframe: 4h
  lookback_period: 20  # For calculating relative performance
  data_requirements: [close_price]

Signal:
  entry_conditions:
    condition_type: ANY
    conditions:
      - spread > +5%   # BTC outperforming → Long ETH
      - spread < -5%   # ETH outperforming → Long BTC
  exit_conditions:
    condition_type: ANY
    conditions:
      - abs(spread) < 1%  # Spread reverted to mean
      - stop_loss: -8%
      - take_profit: +15%

Capital:
  total_capital: 10000
  allocation_per_trade: 20%  # of total capital
  reserve_ratio: 0.3

Risk:
  stop_loss: 8%
  take_profit: 15%
  max_drawdown_limit: 15%

Execution:
  leverage: 1x (spot only)
  order_type: market
  position_side: long_only

重要なしきい値のガイドライン:

  • 20期間(80h ≈ 3.3日)のスプレッド:3~5%のしきい値を使用します
  • 50期間(200h ≈ 8日)のスプレッド:5~8%のしきい値を使用します
  • 短いルックバックに 10% を超える値を使わないでください。シグナルが発生しなくなります!

技術リファレンス

利用可能なインジケーター(pandas-ta)
Momentum: RSI, MACD, Stochastic, Williams %R, CCI
Trend: SMA, EMA, ADX, Aroon, Supertrend
Volatility: Bollinger Bands, ATR, Keltner Channels
Volume: OBV, Volume SMA, VWAP
リスクプロファイル
Conservative:  SL=5%,  TP=12%, position=5%,  max 3 concurrent
Moderate:      SL=8%,  TP=20%, position=10%, max 5 concurrent
Aggressive:    SL=12%, TP=35%, position=20%, max 8 concurrent

技術リファレンス:利用可能なインジケーター

モメンタムインジケーター
インジケーター列名説明
RSIrsi相対力指数(14)
ストキャスティクス %Kstoch_kストキャスティクスオシレーターの K ライン
ストキャスティクス %Dstoch_dストキャスティクスオシレーターの D ライン
Williams %RwillrWilliams %R(14)
CCIcci商品チャネル指数(20)
MFImfiマネーフローインデックス(14)
ROCroc, roc_20変化率(10、20)
MACDmacd, macd_signal, macd_histMACD ライン、シグナル、ヒストグラム
トレンドインジケーター
インジケーター列名説明
SMAsma9, sma21, sma50, sma100, sma200単純移動平均
EMAema9, ema21, ema50, ema100, ema200指数移動平均
ADXadx平均方向性指数(トレンドの強さ)
+DI / -DIplus_di, minus_di方向性指標
ボラティリティインジケーター
インジケーター列名説明
ボリンジャーバンドbb_upper, bb_middle, bb_lower上限バンド、中央バンド、下限バンド
BB Widthbb_widthバンド幅(ボラティリティの指標)
BB %Bbb_pctBB 範囲内での価格の位置(0~1)
ATRatr平均真の値幅(14)
ATR %atr_pct価格に対する ATR の割合
出来高インジケーター
インジケーター列名説明
出来高 SMAvolume_sma20期間の出来高平均
出来高比率volume_ratio現在の出来高 / 平均出来高
OBVobv, obv_smaオンバランスボリューム
価格位置インジケーター
インジケーター列名説明
ローリング高値high_20, high_50, high_90, high_200N期間の高値
ローリング安値low_20, low_50, low_90, low_200N期間の安値
ドローダウンdrawdown, drawdown_50ローリング高値からの変化率
価格位置price_position_9090日間の値幅内での位置(0~1)
移動平均からの乖離dist_sma50, dist_sma200移動平均からの乖離率
派生/変化指標
指標列名説明
価格変化price_change, price_pct_change1期間の変化
価格変化 5price_change_5, price_pct_change_55期間の変化
RSI 変化rsi_changeRSI のモメンタム
MACD 変化macd_change, macd_hist_changeMACD のモメンタム
連続上昇consecutive_up連続上昇日数
連続下落consecutive_down連続下落日数

技術リファレンス:条件構文

1. 単純な比較
rsi<30              # RSI below 30
price>sma200        # Price above SMA 200
adx>=25             # ADX at least 25
bb_pct<0.2          # Price in lower 20% of BB range
drawdown<-20        # Down 20% from recent high
volume_ratio>2      # Volume 2x above average
2. クロスオーバー/クロスアンダー
macd_crossover                  # MACD crosses above signal (default)
ema9_cross_above_ema21          # EMA9 crosses above EMA21
price_crossover_sma50           # Price crosses above SMA50
rsi_crossunder_50               # RSI crosses below 50
stoch_k_cross_above_stoch_d     # Stochastic golden cross
3. 転換点
rsi_turning_up          # RSI starts increasing
macd_hist_turning_down  # MACD histogram starts decreasing
price_turning_up        # Price reversal upward
4. 連続期間
rsi<30_for_3            # RSI below 30 for 3 consecutive periods
price>sma200_for_5      # Price above SMA200 for 5 periods
consecutive_up>=3       # At least 3 consecutive up days
5. 条件の組み合わせ

条件はカンマ区切りです。エントリーでは AND ロジック、エグジットでは OR ロジックが使われます。

--entry "rsi<35,price<bb_lower,volume_ratio>1.5"
--exit "rsi>70,price>bb_upper"

重要なガイドライン

  1. 単一の指標は決して使わないでください - 常に複数の側面を組み合わせます
  2. ロジックを説明してください - 各指標を含める理由をユーザーが理解できるようにします
  3. 戦略に複雑さを合わせてください - DCA にはバリュエーションモデル、トレンドフォローには複数の時間足が必要です
  4. 制約について誠実に伝えてください - 過去の実績は将来の結果を保証しません
  5. 反復を促してください - バックテストは一度きりではなく、プロセスです

⚠️ 重要:取引所のデータ制限

取引所によって過去データの取得上限は異なります!

取引所おおよその上限備考
OKX~60-90日デフォルト。短期バックテストに適しています
KuCoin~200日中期向けの優れた代替手段
Binance1000日以上最も多くのデータを取得できますが、一部の地域ではブロックされています
Bybit~200日優れた代替手段

90日を超えるデータが必要な場合:

# OKX default - will only get ~90 days even if you request 365
python src/backtest.py --symbol BTC/USDT --days 365 ...

# Use KuCoin for ~200 days (works in most regions)
python src/backtest.py --symbol BTC/USDT --days 180 --exchange kucoin ...

# Use Binance for 365+ days (if accessible in your region)
python src/backtest.py --symbol BTC/USDT --days 365 --exchange binance ...

ファイルの場所

  • バックテストエンジン:src/backtest.py
  • Smart DCA:src/smart_dca.py
  • ペアトレード:src/pair_trading.py
  • 出力レポート:現在の作業ディレクトリ
  • 生成コード:現在の作業ディレクトリ

Smart DCA の使用方法

DCA 戦略には、専用の Smart DCA スクリプトを使用してください。

python src/smart_dca.py \
  --symbol "BTC/USDT" \
  --days 1095 \
  --base-amount 200 \
  --frequency 7 \
  --output smart_dca_report.html \
  --lang zh  # or --lang en based on user's language

ペアトレード/相対強度の使用方法

2つの資産(例:BTC 対 ETH)を比較するペアトレード戦略には、次のものを使用してください。

python src/pair_trading.py \
  --symbol-a "BTC/USDT" \
  --symbol-b "ETH/USDT" \
  --days 365 \
  --timeframe 4h \
  --lookback 20 \
  --threshold 10 \
  --exit-threshold 2 \
  --output pair_trading_report.html \
  --lang zh  # or --lang en based on user's language \
  --description "Long the underperformer when BTC/ETH spread deviates"

パラメーター:

  • --lookback:相対パフォーマンスを計算する期間(デフォルト:20)
  • --threshold:エントリーしきい値 - エントリーを開始するスプレッド偏差率(デフォルト:10)
  • --exit-threshold:エグジットしきい値 - ポジションを決済するスプレッド偏差率(デフォルト:2)

言語サポート

重要:常にユーザーの言語を検出し、適切な --lang パラメーターを渡してください。

  • ユーザーが中国語で入力 → --lang zh(レポートは中国語)
  • ユーザーが英語で入力 → --lang en(レポートは英語)

これにより、生成される HTML レポートがユーザーの言語設定に合致します。

コメント