Loading ...

关于获取的K线周期问题

Author: zergor, Created: 2021-09-09 20:25:24, Updated: 2021-09-10 14:19:45

重新提问: 获取K线数据代码如下: def linktoexchange(): global N_bar_arr exchange.SetContractType(contracttype) bar_arr = exchange.GetRecords(606024) period = exchange.GetPeriod()/60/60 x=len(bar_arr) if x>N: N_bar_arr=bar_arr[x-N:N] Log(“K线周期:”, period , “小时”) Log(‘K线数量:’,x) Log(‘日期:’, _D(bar_arr[0][‘Time’]/1000),‘第一K线开盘价:’,bar_arr[0][‘Open’]) Log(‘日期:’, _D(bar_arr[-1][‘Time’]/1000),‘最后K线开盘价:’,bar_arr[-1][‘Open’]) 回测参数设置如下: img

运行结果如下; img img

为什么日K的数量要超过选取的时间范围内的数量?为什么选取的BAR的日期不是回测时间范围内的?

正在尝试编写的策略代码如下: '''backtest start: 2021-06-11 00:00:00 end: 2021-09-08 00:00:00 period: 1d basePeriod: 1d exchanges: [{“eid”:“Futures_CTP”,“currency”:“FUTURES”,“balance”:50000}] '‘’

#DUAL THRUST指标设计 contracttype = ‘rb888’ def DUAL_THRUST(): #变量定义 HH = 0 #N周期内最高价的最大值 HL = 0 #N周期内最低价的最大值 HC = 0 #N周期内收盘价的最大值 LC = 0 #N周期内收盘价的最小值 N = 5 #K线指标周期 Kup =0.5 #上轨系数 Kdown =0.5 #下轨系数 upTriggerPrice = 0 #上轨触发价 downTriggerPrice = 0 #下轨触发价

#获取指定合约K线数据
exchange.SetContractType(contracttype)
bar_arr = exchange.GetRecords()
period = exchange.GetPeriod()
Log("K线周期:", period , "小时")

#计算指标
if len(bar_arr)>N:
    N_bar = bar_arr[-(N+1):-1]
for i in range(N):
    Log(N_bar[i]['Time'],N_bar[i]['Open'],)

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

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

期望运行之后,能得到最后N个K线数据,但是模拟回测结果如下: img

这是为什么?百思不得其解。


More

小草 没有数据计算结果为null,可能忽略了,检查下K线长度

小草 你说的这种是按K线回测,精度太低.FMZ的回测机制参考 https://www.fmz.com/bbs-topic/4158#%E5%9B%9E%E6%B5%8B%E6%9C%BA%E5%88%B6

zergor 还是搞不太明白。比如我在回测设置里设置K线周期为1天,那么得到的K线数据因该是一天天的BAR,我直接按索引取某天的高、低等价格就行了吧,另外log信息里周期应该是1天才对啊。怎么总是按毫秒来计算?