Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Unit tests for Apex Trading Engine and Risk Guardrails.
|
|
"""
|
|
|
|
import unittest
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent
|
|
if str(BASE_DIR / "src") not in sys.path:
|
|
sys.path.insert(0, str(BASE_DIR / "src"))
|
|
|
|
from engine.trader import ApexEngine
|
|
from risk.risk_guard import ApexRiskGuard
|
|
from strategies.momentum import MomentumStrategy
|
|
|
|
class TestApexTrading(unittest.TestCase):
|
|
def setUp(self):
|
|
self.config_path = str(BASE_DIR / "config" / "trading.config.json")
|
|
self.engine = ApexEngine(self.config_path)
|
|
|
|
def test_risk_guard_limits(self):
|
|
guard = self.engine.risk_guard
|
|
# Normal order passes
|
|
normal_order = {"symbol": "BTC/USDT", "risk_percent": 0.3}
|
|
approved, reason = guard.validate_order(normal_order, current_drawdown=0.5, open_position_count=1)
|
|
self.assertTrue(approved)
|
|
self.assertEqual(reason, "APPROVED")
|
|
|
|
# Exceeding single trade risk
|
|
risky_order = {"symbol": "BTC/USDT", "risk_percent": 0.8}
|
|
approved, reason = guard.validate_order(risky_order, current_drawdown=0.5, open_position_count=1)
|
|
self.assertFalse(approved)
|
|
self.assertIn("exceeds limit", reason)
|
|
|
|
# Exceeding max drawdown trips circuit breaker
|
|
approved, reason = guard.validate_order(normal_order, current_drawdown=1.6, open_position_count=1)
|
|
self.assertFalse(approved)
|
|
self.assertIn("CIRCUIT BREAKER", reason)
|
|
self.assertTrue(guard.circuit_breaker_active)
|
|
|
|
def test_engine_process_tick(self):
|
|
# 25 prices trending sharply upwards
|
|
prices = [100.0 + (i * 1.5) for i in range(25)]
|
|
volume = [1000.0] * 25
|
|
result = self.engine.process_tick("SOL/USDT", prices, volume)
|
|
self.assertEqual(result.get("status"), "EXECUTED")
|
|
self.assertEqual(result.get("action"), "BUY")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|