53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
|
|
"""Tests for the signal generator module."""
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from indicators.multi_timeframe import TradeDirection
|
||
|
|
from strategy.signal_generator import TradeSignal
|
||
|
|
|
||
|
|
|
||
|
|
class TestTradeSignal:
|
||
|
|
"""Tests for TradeSignal dataclass."""
|
||
|
|
|
||
|
|
def test_risk_reward_ratio(self):
|
||
|
|
signal = TradeSignal(
|
||
|
|
symbol="BTC/USDT",
|
||
|
|
direction=TradeDirection.LONG,
|
||
|
|
entry_price=50000,
|
||
|
|
stop_loss=49000,
|
||
|
|
take_profit=52000,
|
||
|
|
confidence=4,
|
||
|
|
timeframe="15m",
|
||
|
|
)
|
||
|
|
assert signal.risk_reward_ratio == 2.0
|
||
|
|
|
||
|
|
def test_risk_reward_zero_risk(self):
|
||
|
|
signal = TradeSignal(
|
||
|
|
symbol="BTC/USDT",
|
||
|
|
direction=TradeDirection.LONG,
|
||
|
|
entry_price=50000,
|
||
|
|
stop_loss=50000,
|
||
|
|
take_profit=52000,
|
||
|
|
confidence=3,
|
||
|
|
timeframe="15m",
|
||
|
|
)
|
||
|
|
assert signal.risk_reward_ratio == 0.0
|
||
|
|
|
||
|
|
def test_to_dict(self):
|
||
|
|
signal = TradeSignal(
|
||
|
|
symbol="ETH/USDT",
|
||
|
|
direction=TradeDirection.SHORT,
|
||
|
|
entry_price=3000,
|
||
|
|
stop_loss=3100,
|
||
|
|
take_profit=2800,
|
||
|
|
confidence=5,
|
||
|
|
timeframe="1h",
|
||
|
|
reasons=["BOS", "OB", "FVG"],
|
||
|
|
)
|
||
|
|
d = signal.to_dict()
|
||
|
|
assert d["symbol"] == "ETH/USDT"
|
||
|
|
assert d["direction"] == "SHORT"
|
||
|
|
assert d["confidence"] == 5
|
||
|
|
assert len(d["reasons"]) == 3
|