大家 们分析一下下边的说法,对不:
1. 主要未来函数问题
问题1:在初始化阶段使用 context.previous_date
python
def initialize(context):
# ... 其他代码 ...
run_daily(get_stock_list, '09:28:00')
run_daily(buy, '09:28:10')
run_daily(buy, '14:50:00') # 周五下午建仓
# ...
在 initialize 函数中调用了需要未来数据的函数,但这不是最严重的问题。
问题2:最严重的未来函数 - get_stock_list 函数中的逻辑
python
def get_stock_list(context):
# ... 部分代码 ...
# 昨日涨停
hl0_list = get_hl_stock(initial_list, date)
# 前日曾涨停
hl1_list = get_ever_hl_stock(initial_list, date_1)
# 前前日曾涨停
hl2_list = get_ever_hl_stock(initial_list, date_2)
这里使用 get_hl_stock 和 get_ever_hl_stock 来获取涨停股票,这些函数在 09:28:00 执行时,实际上是在使用当天的完整数据来判断哪些股票涨停,这在实盘中是不可能的。
问题3:获取实时概念数据
python
def fetch_and_map_hot_concepts(date_str, concept_mapper):
"""
从同花顺API获取指定日期的热门概念数据
"""
# 这个函数在同一天运行时会获取当天最终的热门概念数据
# 但在实盘中,开盘前(09:28)无法知道当天哪些概念会热门
2. 其他潜在问题
使用前一天的收盘价和涨跌停价进行判断
python
def get_hl_stock(initial_list, date):
df = get_price(initial_list, end_date=date, frequency='daily',
fields=['close', 'high_limit'], count=1, panel=False,
fill_paused=False, skip_paused=False)
df = df.dropna()
df = df[df['close'] == df['high_limit']] # 这里使用了前一天的涨停数据
hl_list = list(df.code)
return hl_list
3. 建议的修复方案
方案1:改用历史数据回测
python
def get_stock_list(context):
# 改为使用更早的数据
date = context.previous_date - timedelta(days=1) # 再往前一天
# 或者使用可获取的历史数据
# 在09:28:00时,只能获取到昨天的数据,不能获取今天的数据
方案2:重新设计选股逻辑
避免在开盘前使用当天可能涨停的股票信息,应该:
基于历史数据进行筛选
不要使用当天的概念热度数据
在盘中根据实时表现调整选股
方案3:增加数据滞后
python
def get_stock_list(context):
# 确保使用足够滞后的数据
date = get_trade_days(end_date=context.previous_date, count=2)[0] # 使用前天数据
# 或者基于更早的涨停数据
# 避免使用"昨天涨停"这类需要当天收盘才能知道的信息
4. 具体修复建议
对于最严重的未来函数问题,建议修改:
python
def get_stock_list(context):
# 修改前:使用当天数据(有问题)
# date = context.previous_date # 这是当天!
# 修改后:使用历史数据
# 获取更早的交易数据,避免使用未来信息
trade_days = get_trade_days(end_date=context.previous_date, count=3)
date_2 = trade_days[0] # 前天
date_1 = trade_days[1] # 昨天
date = trade_days[2] # 今天(但实际使用时要注意)
# 在09:28:00时,只能基于前天和昨天的数据进行判断
# 不能使用"昨天涨停"这种需要收盘后才知道的信息
5. 结论
这段代码确实包含未来函数,主要体现在:
在开盘前使用了当天收盘后才能知道的信息(涨停、热门概念等)
实盘中无法在09:28获得当天的涨停股票列表
概念热度数据也是基于当天收盘后的统计
建议:如果你要在实盘中使用,必须重新设计选股逻辑,避免使用任何需要当天收盘数据才能获得的信息。应该完全基于历史数据进行决策,并在盘中根据实时价格进行调整。
2026-01-28