重新提问: 获取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’]) 回测参数设置如下:
运行结果如下;
为什么日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线数据,但是模拟回测结果如下:
这是为什么?百思不得其解。