75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
市场分析模块 (模拟云端分析/大模型分析)
|
||
"""
|
||
import random
|
||
|
||
class MarketAnalyzer:
|
||
def __init__(self):
|
||
print("🧠 初始化市场分析模型...")
|
||
# 这里可以加载模型或者连接云端API
|
||
|
||
def analyze(self, stock_data_list):
|
||
"""
|
||
分析股票数据并生成交易信号
|
||
|
||
Args:
|
||
stock_data_list: 股票数据列表
|
||
|
||
Returns:
|
||
list: 包含交易信号的字典列表
|
||
"""
|
||
signals = []
|
||
|
||
print(f"🧠 正在分析 {len(stock_data_list)} 只股票的数据...")
|
||
|
||
for stock in stock_data_list:
|
||
# 简单的策略示例:
|
||
# 如果涨幅超过 5%,产生买入信号 (模拟)
|
||
# 如果跌幅超过 5%,产生卖出信号 (模拟)
|
||
|
||
try:
|
||
# 兼容:可接收数值小数(0.0402 表示 4.02%)或字符串("4.02%")
|
||
raw_ratio = stock.get('eastmoney_change_ratio', 0.0)
|
||
ratio = 0.0
|
||
if isinstance(raw_ratio, (int, float)):
|
||
# 假定为小数形式
|
||
ratio = float(raw_ratio)
|
||
# 若误传为 4.02 这类百分数值,则做防御性归一化
|
||
if abs(ratio) > 1:
|
||
ratio = ratio / 100.0
|
||
elif isinstance(raw_ratio, str):
|
||
s = raw_ratio.strip().replace('%', '')
|
||
if s not in ('', '-'):
|
||
v = float(s)
|
||
# 从百分数值转小数
|
||
ratio = v / 100.0
|
||
|
||
symbol = stock.get('symbol')
|
||
name = stock.get('name')
|
||
price = stock.get('eastmoney_price')
|
||
|
||
# 阈值基于小数:±5%
|
||
if ratio > 0.05:
|
||
signals.append({
|
||
'type': 'BUY',
|
||
'symbol': symbol,
|
||
'name': name,
|
||
'price': price,
|
||
'reason': f'涨幅显著 ({ratio:.2%}),模型建议买入',
|
||
'confidence': 0.85
|
||
})
|
||
elif ratio < -0.05:
|
||
signals.append({
|
||
'type': 'SELL',
|
||
'symbol': symbol,
|
||
'name': name,
|
||
'price': price,
|
||
'reason': f'跌幅显著 ({ratio:.2%}),模型建议抛售',
|
||
'confidence': 0.92
|
||
})
|
||
except Exception:
|
||
continue
|
||
|
||
return signals
|