已解决7.05K 浏览
0

用默认的双均线系统  我把

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应该卖出信号也没有了
其它几个品牌也有这个问题

已经卡在这个上面来回测试两天了  请指出是数据不准还是代码的问题

west 已回答的问题 2020年1月20日
0

请问直接使用你这段代码能重现吗

west 发表新评论 2020年2月3日

你提供一个能直接运行的完整代码吧, 怕还有其他操作并没有把代码贴上来就不好分析了

#!/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 是一起的。

比较一下上边的例程和原来提供例程的交易信号数量,就会发现原来提供例程遗漏了很多交易信号。

先在外面赋值一次 所有信号就都正常了 可以不去判断第一次

您正在查看3个答案中的1个,单击此处查看所有答案。