
等级: 新手上路
- 注册:
- 2025-6-19
- 曾用名:
|

楼主 |
发表于 2025-7-2 20:49
|
显示全部楼层
以下是订阅数据的代码,麻烦帮忙看下有什么问题吗?
# ================ 获取K线数据 ================
# 使用history_bars函数获取K线数据,兼容回测环境
# 增加请求的K线数量,确保有足够数据计算均线
min_bars_required = max(context.ma_periods) + 10
# 使用更安全的数据获取方式
try:
data = history_bars(context.symbol, min_bars_required, context.period, ['open', 'high', 'low', 'close'], include_now=True)
except Exception as e:
print(f"获取K线数据失败: {e}")
return
# 检查数据是否有效
if data is None or 'close' not in data or len(data['close']) < min_bars_required:
return
# 提取开盘价、最高价、最低价、收盘价
try:
closes = data['close']
opens = data['open']
highs = data['high']
lows = data['low']
# 获取当前K线和前一根K线的值(使用负索引避免索引问题)
current_close = closes[-1]
current_open = opens[-1]
current_high = highs[-1]
current_low = lows[-1]
prev_close = closes[-2]
prev_open = opens[-2]
prev_high = highs[-2]
prev_low = lows[-2]
except (IndexError, KeyError) as e:
print(f"访问K线数据出错: {e}")
return
# ================ 计算均线 ================
ma_values = []
for period in context.ma_periods:
# 确保有足够数据计算均线
if len(closes) >= period:
# 计算最近period根K线的收盘价均值
# 使用切片确保数据范围有效
start_idx = max(0, len(closes) - period)
period_closes = closes[start_idx:]
ma = np.mean(period_closes)
ma_values.append(ma)
if len(ma_values) < len(context.ma_periods):
return
max_ma = max(ma_values)
min_ma = min(ma_values) |
|