feat: AI agent, signal engine, surge detector, portfolio simulator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
39
tests/test_signal.py
Normal file
39
tests/test_signal.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import pytest
|
||||
from engine.signal import SignalEngine
|
||||
|
||||
@pytest.fixture
|
||||
def engine():
|
||||
return SignalEngine()
|
||||
|
||||
def test_compute_score_default_weights(engine):
|
||||
score = engine.compute_score(80, 60, 70, 50)
|
||||
assert score == 72.0
|
||||
|
||||
def test_classify_buy(engine):
|
||||
assert engine.classify(75) == "BUY"
|
||||
|
||||
def test_classify_hold(engine):
|
||||
assert engine.classify(55) == "HOLD"
|
||||
|
||||
def test_classify_sell(engine):
|
||||
assert engine.classify(30) == "SELL"
|
||||
|
||||
def test_custom_weights(engine):
|
||||
engine.set_weights({"technical": 0.4, "news": 0.3, "social": 0.2, "ai": 0.1})
|
||||
score = engine.compute_score(80, 60, 70, 50)
|
||||
assert score == 69.0
|
||||
|
||||
def test_weights_must_sum_to_one(engine):
|
||||
with pytest.raises(ValueError):
|
||||
engine.set_weights({"technical": 0.5, "news": 0.3, "social": 0.1, "ai": 0.2})
|
||||
|
||||
def test_rank_coins(engine):
|
||||
coins = {
|
||||
"BTC": {"technical": 80, "news": 70, "social": 60, "ai": 75},
|
||||
"ETH": {"technical": 90, "news": 80, "social": 70, "ai": 85},
|
||||
"DOGE": {"technical": 30, "news": 25, "social": 40, "ai": 20},
|
||||
}
|
||||
ranked = engine.rank_coins(coins)
|
||||
assert ranked[0]["symbol"] == "ETH"
|
||||
assert ranked[-1]["symbol"] == "DOGE"
|
||||
assert ranked[-1]["signal"] == "SELL"
|
||||
Reference in New Issue
Block a user