用默认的双均线系统 我把
klines = api.get_kline_serial(SYMBOL, duration_seconds=60*60*24, data_length=LONG + 2) 这儿改成日线
SHORT = 3 # 短周期
LONG = 30 # 长周期
测试jd2005 经过10多次对比数据 测试长20190801到20200118
其它代码保持 不变
像2019.9.17按说应该出买入信号 没有出 然后最2019.12.3系统 出了买入 但是2019.12.9应该卖出信号也没有了
其它几个品牌也有这个问题
已经卡在这个上面来回测试两天了 请指出是数据不准还是代码的问题

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘leptonlee’
from tqsdk import TqApi, TqAccount
from tqsdk.tafunc import ma
# 变量初始化
C_TIMES = 0
last_short_avg = 0
last_long_avg = 0
short_avg = 0
long_avg = 0
# 正常运行策略代码
SYMBOL = “SHFE.fu2005”
api = TqApi(TqAccount(“H海通期货”, “320102”, “123456”))
print(“策略开始运行”)
data_length = 600 # k线数据长度
klines = api.get_kline_serial(SYMBOL, duration_seconds=60, data_length=data_length)
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], “datetime”): # 产生新k线:重新计算ma
C_TIMES = C_TIMES + 1
xx = ma(klines.close, 5)
if C_TIMES > 1:
last_short_avg = short_avg
last_long_avg = long_avg
short_avg = klines.close.iloc[-1] # 短周期
long_avg = xx.b.iloc[-1] # 长周期
# 均线下穿,做空
if short_avg last_long_avg:
target_pos.set_target_volume(-1)
print(“均线下穿,做空”)
# 均线上穿,做多
if short_avg > long_avg and last_short_avg < last_long_avg:
target_pos.set_target_volume(1)
print("均线上穿,做多")
else:
short_avg = klines.close.iloc[-1] # 短周期
long_avg = xx.b.iloc[-1] # 长周期
上边的例程是可以运行的,把账户改一下,把下边的做空条件改一下,就可以,这是舍弃了第一次循环数据的,结果都是没问题的。做空条件 在两个变量中间 short_avg last_long_avg 也就是这两变量中间 增加被屏蔽的小于号 long_avg and last_short_avg 大于号,然后在开盘时间就可以实际正常运行。注意if C_TIMES 比前一个条件if缩进一级 后边的两个条件比if C_TIMES 缩进一级,后边两个条件是同一级。这个格式在帖子上显示不出来。最后的else 和if C_TIMES 是一起的。
比较一下上边的例程和原来提供例程的交易信号数量,就会发现原来提供例程遗漏了很多交易信号。
先在外面赋值一次 所有信号就都正常了 可以不去判断第一次
你提供一个能直接运行的完整代码吧, 怕还有其他操作并没有把代码贴上来就不好分析了