Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
72
tests/unit/strategies/test_momentum_strategy.py
Normal file
72
tests/unit/strategies/test_momentum_strategy.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""Tests for Momentum strategy."""
|
||||
|
||||
import pytest
|
||||
from decimal import Decimal
|
||||
import pandas as pd
|
||||
from src.strategies.momentum.momentum_strategy import MomentumStrategy
|
||||
|
||||
|
||||
def test_momentum_strategy_initialization():
|
||||
"""Test Momentum strategy initializes correctly."""
|
||||
strategy = MomentumStrategy("Test Momentum", {
|
||||
"lookback_period": 20,
|
||||
"momentum_threshold": 0.05
|
||||
})
|
||||
assert strategy.name == "Test Momentum"
|
||||
assert strategy.lookback_period == 20
|
||||
assert strategy.momentum_threshold == Decimal("0.05")
|
||||
|
||||
|
||||
def test_momentum_calculation():
|
||||
"""Test momentum calculation."""
|
||||
strategy = MomentumStrategy("Test", {"lookback_period": 5})
|
||||
|
||||
# Create price history
|
||||
prices = pd.Series([100, 101, 102, 103, 104, 105])
|
||||
momentum = strategy._calculate_momentum(prices)
|
||||
|
||||
# Should be positive (price increased)
|
||||
assert momentum > 0
|
||||
assert momentum == 0.05 # (105 - 100) / 100
|
||||
|
||||
|
||||
def test_momentum_entry_signal():
|
||||
"""Test momentum generates entry signal."""
|
||||
strategy = MomentumStrategy("Test", {
|
||||
"lookback_period": 5,
|
||||
"momentum_threshold": 0.05,
|
||||
"volume_threshold": 1.0
|
||||
})
|
||||
|
||||
# Build price history with momentum
|
||||
for i in range(10):
|
||||
price = 100 + i * 2 # Strong upward momentum
|
||||
volume = 1000 * (1.5 if i >= 5 else 1.0) # Volume increase
|
||||
strategy.on_tick("BTC/USD", Decimal(str(price)), "1h", {"volume": volume})
|
||||
|
||||
# Should generate buy signal
|
||||
signal = strategy.on_tick("BTC/USD", Decimal("120"), "1h", {"volume": 2000})
|
||||
assert signal is not None
|
||||
assert signal.signal_type.value == "buy"
|
||||
assert strategy._in_position == True
|
||||
|
||||
|
||||
def test_momentum_exit_signal():
|
||||
"""Test momentum generates exit signal on reversal."""
|
||||
strategy = MomentumStrategy("Test", {
|
||||
"lookback_period": 5,
|
||||
"exit_threshold": -0.02
|
||||
})
|
||||
|
||||
strategy._in_position = True
|
||||
strategy._entry_price = Decimal("100")
|
||||
|
||||
# Build history with reversal
|
||||
for i in range(10):
|
||||
price = 100 - i # Downward momentum
|
||||
strategy.on_tick("BTC/USD", Decimal(str(price)), "1h", {"volume": 1000})
|
||||
|
||||
signal = strategy.on_tick("BTC/USD", Decimal("90"), "1h", {"volume": 1000})
|
||||
assert signal is not None
|
||||
assert signal.signal_type.value == "sell"
|
||||
assert strategy._in_position == False
|
||||
Reference in New Issue
Block a user