如何在23:00精准重置所有自定义索引?代码问题求助
代码问题排查与解决方案
问题点分析
- 条件判断逻辑错误:
rest_bar = timestamp(year, month, dayofmonth, 23, 0, 0)仅生成了当天23点的时间戳,但if rest_bar并未判断当前时间是否匹配该时间戳,相当于直接判定时间戳本身为真(永远成立),导致重置逻辑持续触发。 - 赋值运算符误用:
A == 0和D == 0是比较运算符,仅用于判断值是否相等,无法完成赋值重置,正确写法应为A = 0和D = 0。 - 数组操作逻辑矛盾:若
A = B + C得到的是单个数值,后续A[0] + A[1] + A[2]的数组索引操作会直接报错;若A是需维护的累计数组,代码缺少初始化和长度控制逻辑,无法生成有效数组元素。 - 时间戳生成歧义:部分平台的
timestamp()函数需明确传入当前日期的年/月/日参数,否则可能生成固定日期的时间戳,导致时间匹配失败。
可行解决方案
通用修正代码(以量化交易平台场景为例)
# 初始化数组A(首次运行时创建) if 'A' not in globals(): A = [] # 计算当期A值并维护数组长度(保留最近3个周期数据) current_A = B + C A.append(current_A) if len(A) > 3: A.pop(0) # 计算D值 D = sum(A) if len(A) >= 3 else 0 # 生成当天23:00的时间戳 from datetime import datetime now = datetime.now() target_time = datetime(now.year, now.month, now.day, 23, 0, 0) # 精准匹配23:00时刻执行重置 if datetime.now().hour == 23 and datetime.now().minute == 0 and datetime.now().second < 5: A = [] D = 0
传统程序化平台适配(如文华财经/通达信)
若使用这类平台的内置语法,可简化时间判断逻辑:
// 假设A为单值变量,若为数组需提前定义长度 A = B + C; D = A[0] + A[1] + A[2]; // 直接匹配23:00时间 if(TIME == 2300) { A = 0; D = 0; }
内容的提问来源于stack exchange,提问作者Louis Jj
相关产品推荐
相关产品推荐

