已解决7.03K 浏览
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

如果认为数据不一样请指出,具体哪个时间段的哪个数据和交易所不一样,如果我们数据有问题有奖

关于你叙述的问题,就是因为回测会有自己一套的行情生成规则,Kline只会在开始和结束各生成一次,请参考文档,如果觉得kline日线和预期不一样,则可以使用复盘机制,或订阅tick数据去判断

https://doc.shinnytech.com/pysdk/latest/usage/backtest.html

小龙 方 发表新评论 2020年1月20日

这个问题的存在是很明显的,就是CROSSUP指令无法正常给出信号,而CROSSUP指令实际就是两个连续数据进行组合比较的函数。不知道是不是实时数据与回测数据的差异,回测数据可能没问题,但是实时数据一定是有问题的,随便使用一个10秒钟的实时数据在模拟账户交易,信号以收盘价与5单位的收盘移动平均作对比,会发现很多交易信号会遗漏掉。

这个问题通过在时间变动条件后加入循环赋值,可以解决。问题好像是KLINES序列数据 固定周期数据与实际接收序列数据混用造成的。
if api.is_changing(klines.iloc[-1], “datetime”): # 产生新k线:重新计算ma
xx = ma(klines.close, 5)
last_short_avg = short_avg
last_long_avg = long_avg
short_avg = klines.close.iloc[-1] # 短周期
long_avg =xx.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("均线上穿,做多")

上面这样可以实现正常信号跟踪,原来例程是有问题的。

帖子发出显示的内容和发出的内容为什么不一样??,#均线下穿,做空 下面的一句if语句显示时漏掉了中间的几个字符。这句完整的是和下一个做多的条件一样,只是比较符方向相反,实际显示的却是if short_avg = last_long_avg: 改了几遍显示还是错的,好像就是无法输入显示 ,不知帖子有什么问题。所以加这一条评论说明。

好像是论坛上帖子中小于号和大于号中间括起来内容,这样的一串字符在帖子上是不显示的,不知道是什么原因,上边做空条件显示错误,刚好就是屏蔽掉了”小于号 long_avg and last_short 大于号“这一串字符

你这个例子上面顺序是不是要调一下 last_short_avg 和last_long_avg 不然第一次没有赋值啊

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