4.41K 浏览
0

while True:
api.wait_update()
if api.is_changing(quote, “last_price”):
kdj = KDJ(klines, 9, 3, 3)      # 获取KDJ  klines是15分钟均线
k = list(kdj[“k”])
k1 = int(k[-1]*10)/10
k2 = int(k[-2]*10)/10
print(datetime.now(), ‘当前价:’+str(quote.last_price), ‘k1=’+str(k1), ‘k2=’+str(k2))

以上代码输出结果是:
2020-04-17 11:29:14.327548 当前价:16065.0 k1=47.5 k2=59.5
2020-04-17 11:29:18.333792 当前价:16070.0 k1=47.5 k2=59.5
2020-04-17 11:29:30.374437 当前价:16065.0 k1=47.5 k2=59.5
2020-04-17 11:29:31.340563 当前价:16060.0 k1=46.5 k2=59.5
2020-04-17 11:29:32.415674 当前价:16065.0 k1=46.5 k2=59.5
2020-04-17 11:29:36.823657 当前价:16070.0 k1=47.5 k2=59.5
2020-04-17 11:29:37.832679 当前价:16065.0 k1=48.5 k2=59.5
2020-04-17 11:29:44.818700 当前价:16070.0 k1=48.5 k2=59.5

以上是模拟真实交易的写法,但是在回测的时候,该如何使用KDJ指标呢?之前我试过,输出的KDJ值在K线更新以后都是统一的值,好像无法实时回测当时的KDJ值,不知道是不是写法错了

另外,如果说把K线时间改为1分钟,那么上面代码中 k2的值是不是表示上一分钟K线生成时的K值?

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

回测的时候和盘中的时候使用KDJ指标的方法没有变化,只是行情可能有差异,详细请查看文档中关于回测部分行情的生成规则:https://doc.shinnytech.com/tqsdk/latest/usage/backtest.html#id5

你的代码里:

if api.is_changing(quote, “last_price”):
kdj = KDJ(klines, 9, 3, 3)      # 获取KDJ  klines是15分钟均线

这两句是判断quote行情有更新的时候计算KDJ,但是KDJ是使用K线的价格来计算的,比如15分钟线,只有最后一根K线的close、high、low(KDJ计算时需要用到的数据)有一些变化,而前面14根K线的数据都不会再变了。所以你会看到KDJ没变化。

郑 朱灿 发表新评论 2020年4月20日

理解了,非常感谢

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