# -*- coding: utf-8 -*- __author__ = 'chengzhi' from datetime import date from tqsdk import TqApi, TqBacktest, TargetPosTask from tqsdk.tafunc import time_to_str ''' 如果当前价格大于5分钟K线的MA15则开多仓 如果小于则平仓 回测从 2018-05-01 到 2018-10-01 ''' # 在创建 api 实例时传入 TqBacktest 就会进入回测模式 api = TqApi(backtest=TqBacktest(start_dt=date(2020, 1, 13), end_dt=date(2020, 1, 13))) # 获得 m1901 5分钟K线的引用 klines = api.get_kline_serial("SHFE.cu2003", 5 * 60, data_length=15) # 创建 m1901 的目标持仓 task,该 task 负责调整 m1901 的仓位到指定的目标仓位 target_pos = TargetPosTask(api, "SHFE.cu2003") while True: api.wait_update() if api.is_changing(klines): ma = sum(klines.close.iloc[-15:]) / 15 print("最新价", klines.close.iloc[-1],"time",time_to_str(klines.iloc[-1].datetime), "MA", ma) if klines.close.iloc[-1] > ma: print("最新价",klines.close.iloc[-1],"大于MA:",ma," 目标多头5手") # 设置目标持仓为多头5手 target_pos.set_target_volume(5) elif klines.close.iloc[-1] < ma: print("最新价小于MA: 目标空仓") # 设置目标持仓为空仓 target_pos.set_target_volume(0)
如果按照规则描述:
K线序列 (例如上面例子中的ka1, ka2) 总是按周期推进. 每根K线在创建时和结束时各更新一次:
这样的话,回测demo在每根K线上如果满足条件的话,就要执行2次开仓,显然不符合策略逻辑
请问如何更改为 上一根K线完结,以上根K线收盘价和均线值,作为条件。如条件满足,在当根K线开盘时候开仓?
west 已回答的问题 2020年1月14日
demo中只有一根K线。
K线每一次更新就触发一次is_changing(),相当于模拟行情在更新,”每根K线在创建时和结束时各更新一次”是两次更新,这个不会导致同时在一次更新中执行2次开仓
west 已回答的问题 2020年1月14日