07.4.4.1.9 Adaptive Market Diagnostics Layer
This commit is contained in:
@@ -5,7 +5,12 @@ from __future__ import annotations
|
||||
import time
|
||||
|
||||
from src.integrations.exchange.service import ExchangeService
|
||||
from src.trading.market_analysis.models import MarketState
|
||||
from src.trading.market_analysis.models import (
|
||||
MarketPhase,
|
||||
MarketState,
|
||||
TrendQuality,
|
||||
TrendStrength,
|
||||
)
|
||||
from src.trading.market_analysis.service import MarketAnalysisService
|
||||
from src.trading.strategies.base import StrategyContext
|
||||
from src.trading.strategies.signals import SignalResult, SignalType
|
||||
@@ -116,6 +121,11 @@ class TrendStrategy:
|
||||
"market_analysis_interval": market.interval,
|
||||
"market_analysis_reason": market.reason,
|
||||
"market_analysis": market.payload,
|
||||
"market_trend_strength": market.trend_strength.value,
|
||||
"market_trend_quality": market.trend_quality.value,
|
||||
"market_phase": market.market_phase.value,
|
||||
"market_trend_gap_percent": market.trend_gap_percent,
|
||||
"market_trend_consistency": market.trend_consistency,
|
||||
"runtime_window_ttl_seconds": self._window_ttl_seconds,
|
||||
"runtime_window_size": len(prices),
|
||||
}
|
||||
@@ -133,6 +143,42 @@ class TrendStrategy:
|
||||
},
|
||||
)
|
||||
|
||||
if market.trend_strength == TrendStrength.WEAK:
|
||||
return SignalResult(
|
||||
signal=SignalType.HOLD,
|
||||
reason="TREND есть, но сила тренда слабая.",
|
||||
confidence=0.0,
|
||||
payload={
|
||||
**base_payload,
|
||||
"entry_block_reason": "WEAK_MARKET_TREND",
|
||||
"entry_block_message": "слабый тренд",
|
||||
},
|
||||
)
|
||||
|
||||
if market.trend_quality == TrendQuality.NOISY:
|
||||
return SignalResult(
|
||||
signal=SignalType.HOLD,
|
||||
reason="TREND есть, но движение шумное.",
|
||||
confidence=0.0,
|
||||
payload={
|
||||
**base_payload,
|
||||
"entry_block_reason": "NOISY_MARKET_TREND",
|
||||
"entry_block_message": "шумный тренд",
|
||||
},
|
||||
)
|
||||
|
||||
if market.market_phase == MarketPhase.PULLBACK:
|
||||
return SignalResult(
|
||||
signal=SignalType.HOLD,
|
||||
reason="TREND есть, но рынок находится в откате.",
|
||||
confidence=0.0,
|
||||
payload={
|
||||
**base_payload,
|
||||
"entry_block_reason": "MARKET_PULLBACK",
|
||||
"entry_block_message": "откат",
|
||||
},
|
||||
)
|
||||
|
||||
if len(prices) < self._window_size:
|
||||
return SignalResult(
|
||||
signal=SignalType.HOLD,
|
||||
|
||||
Reference in New Issue
Block a user