通过rollover函数,每根Bar打印出来的除权系数怎么都是1?
Params
/*
可增加后续交易策略需要的参数
*/
Vars
Series<Numeric> RealOpen(0,60); //真实合约的开盘价
Series<Numeric> RealHigh(0,60); //真实合约的最高价
Series<Numeric> RealLow(0,60); //真实合约的最低价
Series<Numeric> RealClose; //真实合约的收盘价
Numeric Lots; //交易手数
Global Numeric i;
/*
可增加后续交易策略需要的变量
*/
Events
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataCount()-1]
{
Commentary(Text(Rollover()));
//除权换月时刻的换仓处理
If(Rollover<>Rollover[1] And Rollover[1]<>InvalidNumeric)
{
PlotBool("换月",True);
Commentary("原合约收盘价:"+Text(Close[1]/Rollover[1]));
Commentary("新合约收盘价:"+Text(Close[1]/Rollover));
lots=Max(1,Round(Abs(CurrentContracts*Rollover/Rollover[1]),IIF(Category==0,-2,0)));
If(MarketPosition==1)
{
Sell(0,Close[1]/Rollover[1],Enum_Signal_UnCorrectPrice);
Buy(lots,Close[1]/Rollover,Enum_Signal_UnCorrectPrice);
}Else
If(MarketPosition==-1)
{
BuyToCover(0,Close[1]/Rollover[1],Enum_Signal_UnCorrectPrice);
SellShort(lots,Close[1]/Rollover,Enum_Signal_UnCorrectPrice);
}
}
//真实价格
If(Rollover<>InvalidNumeric)
{
RealOpen=Open/Rollover;
RealHigh=High/Rollover;
RealLow=Low/Rollover;
RealClose=Close/Rollover;
}
Else
{
RealOpen=Open;
RealHigh=High;
RealLow=Low;
RealClose=Close;
}
/*
可增加后续交易策略需要的代码
*/
PlotKline(RealOpen,RealHigh,RealLow,RealClose);
If(MarketPosition<>1)
Buy(100,Open/Rollover,Enum_Signal_UnCorrectPrice);
}
}
加载到888合约上,启用复权设置,然后输出在观察一下试一试呢
指数合约不得行吗
不可以,000没有除权,也不需要
这个可以用于模拟盘换仓或者实盘吗?还有就是换仓时两个合约成交价格是用当时的开盘价,还是其他价格?
OnInit()
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
Bool ret = SetSwapPosVolType(2); //设置自动换仓量类型
Commentary("SetSwapPosVolType:" + IIFString(ret, "True", "False"));
Print("SetSwapPosVolType:" + IIFString(ret, "True", "False"));
}
不管是实盘还是模拟,只能用于历史回测,实时情况不可以自动换月呢
用这个rollover可以用于实盘或模拟盘移仓换月吗
Commentary(Text(Rollover()));
//除权换月时刻的换仓处理
If(Rollover<>Rollover[1] And Rollover[1]<>InvalidNumeric)