我按照示例,写了一段简陋的代码,+10是模拟简单的取值后计算。如果是我代码的错误,请指出。
from tqsdk import TqApi,TqBacktest,TqReplay from datetime import date #设置合约代码 SYMBOL = "SHFE.rb2005" api = TqApi(backtest=TqBacktest(start_dt=date(2020, 3, 2), end_dt=date(2020, 3, 3))) #api = TqApi(backtest = TqReplay(date(2020,3,2))) quote = api.get_quote(SYMBOL) klines = api.get_kline_serial(SYMBOL, 60*15, 20) def dayinjiage(klines): x=klines.high+10 y=klines.open+10 z=klines.low+10 n=klines.close+10 print("取-2值",x.iloc[-2], y.iloc[-2], z.iloc[-2], n.iloc[-2]) print("取-1值",x.iloc[-1], y.iloc[-1], z.iloc[-1], n.iloc[-1]) dayinjiage(klines) while True: api.wait_update() # 每次生成新的K线时重新计算BOLL指标 if api.is_changing(klines.iloc[-1], "datetime"): print("--------------------------------新K线") dayinjiage(klines) # 每次最新价发生变化时进行判断 if api.is_changing(quote, "last_price"): print("新价") dayinjiage(klines)
打印出来的信息,截取自最后几行:
新价
取-2值 3434.0 3430.0 3428.0 3432.0
取-1值 3432.0 3432.0 3432.0 3432.0
新价
取-2值 3434.0 3430.0 3428.0 3432.0
取-1值 3432.0 3432.0 3432.0 3432.0
新价
取-2值 3434.0 3430.0 3428.0 3432.0
取-1值 3432.0 3432.0 3432.0 3432.0
新价
取-2值 3434.0 3430.0 3428.0 3432.0
取-1值 3441.0 3432.0 3426.0 3436.0
——————————–新K线
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
新价
取-2值 3441.0 3432.0 3426.0 3436.0
取-1值 3436.0 3436.0 3436.0 3436.0
——————————–新K线
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3435.0 3435.0 3435.0 3435.0
新价
取-2值 3441.0 3436.0 3431.0 3435.0
取-1值 3439.0 3435.0 3429.0 3431.0
WARNING – 回测结束
观察可知,当新K出现的瞬间,Klines的高开低收都相等,这时候计算指标并取.ilco[-1],将得到的错误的结果。当前新K计算的正确指标出现在最后一笔quote。
进行回测时,建议取值用.ilco[-2]
我也跟踪过天勤的实时行情,当新k出现时,高开低收相等,与回测不同在于,随着quote的推进,四个价会随着改变,会改变。
就是这样/