64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
# tests/test_strategy_signal.py
|
|
from hydra.strategy.signal import SignalGenerator
|
|
|
|
|
|
def test_volatile_returns_hold():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 1.1, "EMA_20": 1.0, "RSI_14": 60.0}
|
|
sig = gen.generate(indicators, "volatile", 50000.0)
|
|
assert sig.signal == "HOLD"
|
|
assert sig.reason == "volatile: skip"
|
|
|
|
|
|
def test_trending_up_buy():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 1.1, "EMA_20": 1.0, "RSI_14": 55.0}
|
|
sig = gen.generate(indicators, "trending_up", 50000.0)
|
|
assert sig.signal == "BUY"
|
|
assert sig.reason == "trend_up: ema_cross+rsi"
|
|
|
|
|
|
def test_trending_up_hold_no_cross():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 0.9, "EMA_20": 1.0, "RSI_14": 55.0}
|
|
sig = gen.generate(indicators, "trending_up", 50000.0)
|
|
assert sig.signal == "HOLD"
|
|
|
|
|
|
def test_trending_down_sell():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 0.9, "EMA_20": 1.0, "RSI_14": 40.0}
|
|
sig = gen.generate(indicators, "trending_down", 50000.0)
|
|
assert sig.signal == "SELL"
|
|
assert sig.reason == "trend_down: ema_cross+rsi"
|
|
|
|
|
|
def test_trending_down_hold_no_cross():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 1.1, "EMA_20": 1.0, "RSI_14": 40.0}
|
|
sig = gen.generate(indicators, "trending_down", 50000.0)
|
|
assert sig.signal == "HOLD"
|
|
|
|
|
|
def test_ranging_buy_oversold():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 1.0, "EMA_20": 1.0, "RSI_14": 25.0}
|
|
sig = gen.generate(indicators, "ranging", 50000.0)
|
|
assert sig.signal == "BUY"
|
|
assert sig.reason == "ranging: rsi_oversold"
|
|
|
|
|
|
def test_ranging_sell_overbought():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": 1.0, "EMA_20": 1.0, "RSI_14": 75.0}
|
|
sig = gen.generate(indicators, "ranging", 50000.0)
|
|
assert sig.signal == "SELL"
|
|
assert sig.reason == "ranging: rsi_overbought"
|
|
|
|
|
|
def test_none_indicators_return_hold():
|
|
gen = SignalGenerator()
|
|
indicators = {"EMA_9": None, "EMA_20": None, "RSI_14": None}
|
|
sig = gen.generate(indicators, "trending_up", 50000.0)
|
|
assert sig.signal == "HOLD"
|