Shift adaptive learning to growth sizing
This commit is contained in:
@@ -229,6 +229,40 @@ def test_strategy_uses_fractional_kelly_position_size(make_settings, tmp_path) -
|
||||
assert signal.diagnostics["position_notional_usdt"] == settings.max_position_usdt
|
||||
|
||||
|
||||
def test_strategy_scales_kelly_with_positive_learning_multiplier(make_settings, tmp_path) -> None:
|
||||
settings = make_settings(tmp_path, max_position_usdt=50, kelly_fraction=0.25, kelly_max_fraction=0.20)
|
||||
strategy = SpotStrategy(settings)
|
||||
ticker = Ticker(
|
||||
symbol="BTCUSDT",
|
||||
last_price=101,
|
||||
bid=100.99,
|
||||
ask=101.01,
|
||||
turnover_24h=10_000_000,
|
||||
volume_24h=1000,
|
||||
change_24h=1.0,
|
||||
)
|
||||
common = dict(
|
||||
symbol="BTCUSDT",
|
||||
candles=_ready_candles(),
|
||||
ticker=ticker,
|
||||
open_positions_for_symbol=0,
|
||||
forecast={"usable": True, "probability_up": 0.62, "volatility_percent": 0.2},
|
||||
account={"equity": 200.0},
|
||||
)
|
||||
|
||||
neutral = strategy.entry_signal(**common)
|
||||
scaled = strategy.entry_signal(
|
||||
**common,
|
||||
learning={"adaptive_rules": {"effective_position_size_multiplier": 1.5}},
|
||||
)
|
||||
|
||||
assert neutral.action == "BUY"
|
||||
assert scaled.action == "BUY"
|
||||
assert scaled.diagnostics["position_sizing"]["risk_multiplier"] > neutral.diagnostics["position_sizing"]["risk_multiplier"]
|
||||
assert scaled.diagnostics["position_notional_usdt"] > neutral.diagnostics["position_notional_usdt"]
|
||||
assert scaled.diagnostics["position_notional_usdt"] <= settings.max_position_usdt
|
||||
|
||||
|
||||
def test_strategy_buys_probabilistic_rebound_after_stabilized_drop(make_settings, tmp_path) -> None:
|
||||
settings = make_settings(tmp_path, rebound_entry_confidence=0.58, rebound_min_probability=0.58)
|
||||
strategy = SpotStrategy(settings)
|
||||
|
||||
Reference in New Issue
Block a user