You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.4 KiB

# 核心数据模型
import datetime
from typing import Dict, List, Optional, Tuple
import pandas as pd
class MarketData:
"""市场数据模型"""
def __init__(self, symbol: str, kline_data: pd.DataFrame):
self.symbol = symbol
self.kline_data = kline_data
self.timestamp = datetime.datetime.now()
def get_latest_price(self) -> float:
"""获取最新价格"""
return float(self.kline_data['close'].iloc[-1])
def get_price_range(self, period: int = 20) -> Tuple[float, float]:
"""获取价格范围"""
prices = self.kline_data['close'].tail(period)
return float(prices.min()), float(prices.max())
class AnalysisResult:
"""分析结果模型"""
def __init__(self, symbol: str):
self.symbol = symbol
self.timestamp = datetime.datetime.now()
self.trend: Optional[str] = None # bullish, bearish, neutral
self.probability: Optional[float] = None # 胜率
self.direction: Optional[str] = None # long, short, wait
self.cycle: Optional[str] = None # short, medium, long
self.atr: Optional[float] = None # 真实波动幅度
self.adx: Optional[float] = None # 平均趋向指标
self.support: Optional[float] = None # 支撑位
self.resistance: Optional[float] = None # 阻力位
self.stop_loss: Optional[float] = None # 止损位
self.target_price: Optional[float] = None # 目标价
self.position_size: Optional[float] = None # 建议仓位
self.risk_ratio: Optional[float] = None # 风险比率
self.fund_flow: Optional[Dict[str, float]] = None # 资金流向
self.signals: Dict[str, str] = {} # 各维度信号
def to_dict(self) -> Dict:
"""转换为字典"""
return {
'symbol': self.symbol,
'timestamp': self.timestamp.isoformat(),
'trend': self.trend,
'probability': self.probability,
'direction': self.direction,
'cycle': self.cycle,
'atr': self.atr,
'adx': self.adx,
'support': self.support,
'resistance': self.resistance,
'stop_loss': self.stop_loss,
'target_price': self.target_price,
'position_size': self.position_size,
'risk_ratio': self.risk_ratio,
'fund_flow': self.fund_flow,
'signals': self.signals
}
class StrategyConfig:
"""策略配置模型"""
def __init__(self):
# 技术指标参数
self.macd_fast = 12
self.macd_slow = 26
self.macd_signal = 9
self.rsi_period = 14
self.bollinger_period = 20
self.bollinger_std = 2
self.kdj_period = 9
self.kdj_signal = 3
self.adx_period = 14
# 趋势过滤参数
self.short_ma = 20
self.long_ma = 60
# 风险控制参数
self.atr_multiplier = 2.0
self.max_risk_percent = 0.02
self.min_profit_loss_ratio = 1.5
# 资金监控参数
self.volume_change_threshold = 0.05
self.open_interest_change_threshold = 0.05
class RiskParams:
"""风险参数模型"""
def __init__(self, account_balance: float):
self.account_balance = account_balance
self.max_risk_amount = account_balance * 0.02
self.max_position_percent = 0.3
self.max_leverage = 5