3.13K 浏览
0

发现回测过程中,任何指标都不会画上去。

from datetime import date
from tqsdk import TqApi, TqBacktest, TargetPosTask ,tafunc

'''
如果当前价格大于5分钟K线的MA15则开多仓
如果小于则平仓
回测从 2018-05-01 到 2018-10-01
'''
# 在创建 api 实例时传入 TqBacktest 就会进入回测模式
api = TqApi(backtest=TqBacktest(start_dt=date(2018, 5, 1), end_dt=date(2018, 5, 10)))
# 获得 m1901 5分钟K线的引用
klines = api.get_kline_serial("DCE.m1901", 5 * 60, data_length=15)
# 创建 m1901 的目标持仓 task,该 task 负责调整 m1901 的仓位到指定的目标仓位
target_pos = TargetPosTask(api, "DCE.m1901")
klines['x']=klines.close.rolling(15).mean()

while True:
    api.wait_update()
    if api.is_changing(klines.iloc[-1],'datetime'):
        ma = sum(klines.close.iloc[-15:]) / 15
        klines.loc[klines.index[-1],'x']=ma

        print("最新价", klines.close.iloc[-1], tafunc.time_to_datetime(klines['datetime'].iloc[-1]),"MA", ma)
        if klines.close.iloc[-1] > ma:
            print("最新价大于MA: 目标多头5手")
            # 设置目标持仓为多头5手
            target_pos.set_target_volume(5)
        elif klines.close.iloc[-1] < ma:
            print("最新价小于MA: 目标空仓")
            # 设置目标持仓为空仓
            target_pos.set_target_volume(0)

第25行

klines.loc[klines.index[-1],'x']=ma

只要注释掉,就正常运行,否则就只运行第一条就停止。

怎么解决?还是有什么机制我没弄明白。

ringo 已回答的问题 2020年6月29日
0

把画图部分放入循环内

ringo 已回答的问题 2020年6月29日