コンテンツにスキップ

DynamicAdjuster(動的パラメータ調整)

概要

DynamicAdjuster は、市場環境とパフォーマンスに基づき、Beat Shield / Sunacchan Spear のパラメータを動的に調整する機構です。

シナリオIJKLMで搭載

Paper Trading のシナリオIJKLMでIntensity(調整強度)を変えて比較検証中。


シナリオ別Intensity設定

シナリオ Intensity 特性
J 1.5 攻撃的: ポジション拡大、利確遅延
K 1.2 やや攻撃的
I 1.0 標準(基準)
L 0.8 やや守備的
M 0.5 守備的: ポジション縮小、早期損切り

調整パラメータ

@dataclass
class DynamicParams:
    # Beat Shield
    beat_profit_take_pct: float = 0.60   # 利確%(基準: 60%)
    beat_stop_loss_pct: float = 0.50     # 損切%(基準: 50%)
    beat_position_size_mult: float = 1.0  # ポジションサイズ倍率

    # Sunacchan Spear
    spear_profit_take_pct: float = 0.50   # 利確%(基準: 50%)
    spear_stop_loss_pct: float = 0.35     # 損切%(基準: 35%)
    spear_position_size_mult: float = 1.0  # ポジションサイズ倍率

    # Crisis Alpha
    crisis_intensity: float = 0.0         # 0.0-1.0

調整トリガー

トレンド環境による調整

20MA傾き 調整内容
> +2% Spearポジション拡大 (1.2x)、Beat縮小 (0.9x)
< -2% 両方ポジション大幅縮小 (Beat: 0.6x、Spear: 0.5x)
< -1% 両方ポジション縮小 (Beat: 0.8x、Spear: 0.7x)

ボラティリティ環境による調整

IV Rank (20日平均) 調整内容
> 60% 早め利確・損切り(Beat: TP 50%, SL 40%/Spear: TP 40%, SL 25%)
< 30% 利確を遅らせる(Beat: TP 70%/Spear: TP 60%)

パフォーマンスによる調整

勝率 (30日) 調整内容
< 40% ポジションサイズ縮小 (0.7x)
> 55% + PnL > 0 ポジションサイズ微増 (1.1x)

Intensity による補正

利確幅

profit_multiplier = 1.0 + (intensity - 1.0) * 0.5
# J(1.5): 利確幅 x1.25(遅らせる)
# M(0.5): 利確幅 x0.75(早める)

損切り幅

# 守備的プランのみ縮小(攻撃的は広げない)
if intensity < 1.0:
    stop_loss_multiplier = 1.0 + (intensity - 1.0) * 0.3
    # M(0.5): 損切り幅 x0.85(早逃げ)

ポジションサイズ上限

upper_limit = 1.5 * max(1.0, intensity)  # J: 2.25x まで許容
lower_limit = 0.3 * min(1.0, 1.0 / intensity)  # M: さらに小さく

Look-ahead Bias防止

重要

全ての計算は「前日終値時点」のデータのみを使用。当日のデータは一切参照しない。

使用する指標(全て前日まで):

  1. 20MA傾き: 過去5日の20MA変化率
  2. IV Rank 20日平均: ボラティリティ環境
  3. 勝率(直近30日): 戦略の調子
  4. 平均PnL(直近30日): 戦略の収益性

使用例(PT)

from strategies.dynamic_adjuster import DynamicAdjuster

# シナリオJは攻撃的(intensity=1.5)
adjuster = DynamicAdjuster(debug_mode=True, intensity=1.5)

# 市場データを記録
adjuster.record_market_data(as_of=date.today(), iv_rank=0.45, ma_20=155.50)

# トレード結果を記録
adjuster.record_trade(date.today(), pnl=120.0, is_win=True, strategy="spear")

# パラメータを取得(メインAPI)
params = adjuster.get_params_for_date(date.today())
print(params.describe())
# "Beat: TP=75%, SL=50%, Size=1.3x | Spear: TP=62%, SL=35%, Size=1.5x | Crisis=0.0"

実装ファイル

ファイル 役割
strategies/dynamic_adjuster.py DynamicAdjuster本体
scripts/run_paper_trading_v2.py PTでの使用

関連ページ