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.
49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""
|
|
Apex Momentum Strategy Module (Alpha-1)
|
|
Calculates breakout and trend-following signals.
|
|
"""
|
|
|
|
from typing import List, Dict, Any, Optional
|
|
|
|
class MomentumStrategy:
|
|
def __init__(self, params: Optional[Dict[str, Any]] = None):
|
|
self.params = params or {}
|
|
self.lookback = self.params.get("lookback_period", 20)
|
|
self.rsi_oversold = self.params.get("rsi_oversold", 32)
|
|
self.rsi_overbought = self.params.get("rsi_overbought", 68)
|
|
|
|
def generate_signal(self, symbol: str, prices: List[float], volume: List[float]) -> Optional[Dict[str, Any]]:
|
|
"""
|
|
Evaluates recent tick series and outputs a trading signal if criteria are satisfied.
|
|
"""
|
|
if len(prices) < self.lookback:
|
|
return None
|
|
|
|
recent_window = prices[-self.lookback:]
|
|
current_price = prices[-1]
|
|
sma = sum(recent_window) / len(recent_window)
|
|
|
|
# Simple momentum breakout check
|
|
if current_price > sma * 1.015:
|
|
return {
|
|
"symbol": symbol,
|
|
"action": "BUY",
|
|
"price": current_price,
|
|
"strategy": "Alpha-1:Momentum",
|
|
"risk_percent": 0.35,
|
|
"stop_loss": current_price * 0.985,
|
|
"take_profit": current_price * 1.045
|
|
}
|
|
elif current_price < sma * 0.985:
|
|
return {
|
|
"symbol": symbol,
|
|
"action": "SELL",
|
|
"price": current_price,
|
|
"strategy": "Alpha-1:Momentum",
|
|
"risk_percent": 0.35,
|
|
"stop_loss": current_price * 1.015,
|
|
"take_profit": current_price * 0.955
|
|
}
|
|
|
|
return None
|