Loading ...

回测K线周期问题

Author: zergor, Created: 2021-09-11 16:52:23, Updated: 2021-09-11 16:57:13

代码如下: '''backtest start: 2021-08-01 00:00:00 end: 2021-08-31 23:59:00 period: 1d basePeriod: 1h exchanges: [{“eid”:“Futures_CTP”,“currency”:“FUTURES”,“balance”:50000}] '‘’

#定义合约 contracttype = ‘rb888’ #变量定义 HH = 0 #N周期内最高价的最大值 LL = 0 #N周期内最低价的最小值 HC = 0 #N周期内收盘价的最大值 LC = 0 #N周期内收盘价的最小值 N = 5 #K线指标周期 Kup =0.5 #上轨系数 Kdown =0.5 #下轨系数 upTriggerPrice = 0 #上轨触发价 downTriggerPrice = 0 #下轨触发价 bar_arr = [] #获取的周期K线数据 arrlen = 0 #获取的K线数量
N_bar_arr=[] #截取N周期K线

exchange.SetContractType(‘rb888’)
#DUAL THRUST指标计算 def DUAL_THRUST(): global N,HH,LL,LC,HC,N_bar_arr,arrlen bar_arr=exchange.GetRecords(PERIOD_D1) lasttime = 0 arrlen=len(bar_arr) if arrlen>N and bar_arr[arrlen-1]!=lasttime: lasttime=bar_arr[arrlen-1].Time Log(‘new K’) HH = TA.Highest(bar_arr,N,‘High’)

def main(): #Log(exchange.GetAccount())

#主循环,执行策略
while True :
    DUAL_THRUST()
    Sleep(1000)        

在DUAL THRUST函数中,按D1参数获取数据。按照在知乎网站上的文章,通过lasttime来判断新K线。那Log出来因该是每一根K一个Log。但实际运行是几秒就出一个Log。是什么原因呢?大神能否帮忙分析下? 回测日志: img

网络文章: img


More

zergor 补充一下,回测设置上K线周期是1天,基本K线周期是1分

zergor 我明白你的意思了。但我觉得这个回测机制或者这个GetRecoders函数有缺陷。既然手册里说明GetRecoerds是获取指定K线周期的数据,那么就应该返回这个K线走完固定之后的数据。但实际情况是在当前K线上,返回的是底层基础K线的数据。那么就造成在回测时,第一根K线就按模拟周期返回了底层K线数据。 我觉得应该有个currentBar函数来获取当前K线的实时数据。 也或许是我还没搞明白你们API的功能。

小草 GetRecords获取到K线,只不过最后一根会随着回测时间变动,走完后就固定了

zergor 那我是不是可以理解为,getRecord获取的数据其实是tick,而不是tick数据合成后的K Bar? 那有没有函数来直接获取K Bar呢?

小草 上次回你了.FMZ的回测机制不是一根K线产生一个回测点,而是基于底层K线周期加模拟数据。具体原理参考 https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B