feat: 07.4.1 base strategy + 07.4.2 strategy registry + docs sync

This commit is contained in:
2026-04-29 23:26:46 +03:00
parent 7c8895c3a5
commit 80f29443d4
22 changed files with 961 additions and 237 deletions

View File

@@ -0,0 +1 @@
"""Package marker."""

View File

@@ -3,11 +3,12 @@
from __future__ import annotations
import asyncio
import random
from datetime import datetime
from src.core.config import load_settings
from src.trading.auto.state import AutoTradeState
from src.trading.strategies.base import BaseStrategy, StrategyContext
from src.trading.strategies.registry import StrategyRegistry
class AutoTradeService:
@@ -106,7 +107,7 @@ class AutoTradeService:
# установить стратегию
def set_strategy(self, strategy: str) -> AutoTradeState:
state = self.get_state()
state.strategy = strategy
state.strategy = strategy.strip().upper()
return state
# установить риск
@@ -115,6 +116,21 @@ class AutoTradeService:
state.risk_percent = risk_percent
return state
# собрать контекст для стратегии
def _build_strategy_context(self) -> StrategyContext:
state = self.get_state()
return StrategyContext(
symbol=state.symbol,
status=state.status,
risk_percent=state.risk_percent,
)
# получить стратегию для текущего цикла
def _get_strategy(self) -> BaseStrategy:
state = self.get_state()
return StrategyRegistry.get(state.strategy)
# выполнить один цикл анализа рынка
def run_cycle(self) -> AutoTradeState:
state = self.get_state()
@@ -122,7 +138,11 @@ class AutoTradeService:
if state.status == "OFF":
return state
strategy = self._get_strategy()
context = self._build_strategy_context()
result = strategy.analyze(context)
state.last_check_at = datetime.now().strftime("%H:%M:%S")
state.last_signal = random.choice(["BUY", "SELL", "HOLD"])
state.last_signal = result.signal.value
return state