做了一个多图层的交易策略,图层0为指数的日K线,图层1为指数的30分钟K线,图层2以上均为当月期权买购合约,周期与1号图层相同,均为30分钟,如下图
核心代码如下:
OnInit()
{
//与数据源有关
Range[0:DataCount-1]
{
//=========数据源相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
}
}
OnBar(ArrayRef<Integer> indexs)
{
Range[0:0]
{
//计算出Buyline 和 Sellline,Buyline 和SellLine为全局变量
//根据Buyline计算出需要的option_c_code
}
Range[1:1]
{
PlotNumeric(上轨,BuyLine,0,Red);
PlotNumeric(下轨,SellLine,0,Blue);
Commentary(虚一档看涨期权是: + option_c_code);
}
//如果在10:00分没有向上突破,且昨日有持仓,则平仓
If (data1.time == 0.1 and Data1.High[1] <= BuyLine)
{
Range[2:datacount-1]//轮询各个期权合约
{
If(currentcontracts > 0) //如果任一合约持有仓位,则平仓
{
FileAppend(c:\\\\DT_Option_Debug,data1.time= + Text(data1.Time) + CurrentDate= + DateToString(CurrentDate) + CurrentTime= + TimeToString(CurrentTime)
+ Data1.High[1]= + Text(Data1.High[1]) + Buyline= + Text(BuyLine) + SellLine= + Text(SellLine) + 此时价格为
+ Text(data1.close) + ,未向上突破buyline,平仓所有看涨期权 );
SellForIndexOption(CurrentContracts,open);//自编函数
data1.PlotString(Cover,平仓,low,red);
}
}
}
实盘跑出的结果非常奇怪,出现了不少问题,先提第一个问题,CurrentTime和time相距甚远
如第一个红框,currentTime是14:26分,data1图层是中证1000指数的30分钟K线,time应该是0.140000才对,但却为0.1,即上午10:00的K 线,不合常理。下面第二个框也是如此,time变成了0.13,是我没有正确理解多图层的机制吗?
异常数据出现的原因,应该是因为在实盘加载策略时,加载了一部分历史K线的原因,导致currenttime和time时间不同。打扰老师了@wangkaiming
currenttime是系统时间,你晚上去加载就是晚上的时间
time是K线时间,不会改变
你在下午2:30去加载,curtime就是2:30的,K线时间该是几点就是几点
我早上就开始启动策略,程序在14:26分触发了阀值,即指数的最新价>buyline。由于指数用的是30分钟K线,此时data1.time应该是0.1400才对,为什么会是0.1?而且从最后一张截图可以看到,每个tick到来后,data1.time都是不统一的,有0.1,0.13,0.133,0.11,这是为何?
老师能再帮忙分析一下吗