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防止¶
重要
全ての計算は「前日終値時点」のデータのみを使用。当日のデータは一切参照しない。
使用する指標(全て前日まで):
- 20MA傾き: 過去5日の20MA変化率
- IV Rank 20日平均: ボラティリティ環境
- 勝率(直近30日): 戦略の調子
- 平均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での使用 |
関連ページ¶
- リスク管理 - 全体リスク管理
- RiskGuardian - コツコツドカン防止
- Conviction Allocator - 動的資本配分