SetBasePeriod() 影响 复权设置
SetBasePeriod() 设置的基础运行周期和订阅周期一致的时候对图层单独设置的复权就失效了以下是测试代码 OnInit()
{
// SubscribeBar(Symbol, "1d", BeginDateTime);
SubscribeBar(Symbol, "1h", BeginDateTime);
data0.AddDataFlag(Enum_Data_RolloverForWard());
SetBasePeriod("1h");
Range[0:DataCount - 1]
{
// AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
}
}
OnBar(ArrayRef<Integer> indexes)
{
range[0:DataSourceSize - 1]
{
Commentary("Rollover=" + text(Rollover));
}
}
失效是怎么个失效法啊这个东西是设置基础运行颗粒度的这个设置 有图层区分的一般是每个图层都设置一样的颗粒度如果不设置,需要多个图层除了周期参数不一样,其他参数,包括开始结束日期,是否复权,切割方式等全部一致才行
回复:用了SetBasePeriod() 后,且set的基础运行周期和数据源小周期一致时对图层单独设置的复权就失效了,失效的体现:commentary出来的rollover数据变成了一致的但他们不应该是一致的,因为同样的标的,不同的复权设置,rollover不应该一样比如:data0——1d,复权data1——15m,不复权SetBasePeriod() 无论是“1h”还是“1m”,commentary出来的rollover都是正确值只有在SetBasePeriod() 是“15m”时,才会不正确如果说,SetBasePeriod() 会让数据源的复权方式强制一致那么,又无法解释set的基础运行周期 与任意数据源不一致的时候,rollover又不受影响。
回复:哦 您说 “这个设置 有图层区分的” ,我又忘了这茬了试试这个代码:Events
OnInit()
{
SubscribeBar(Symbol, "1d", BeginDateTime);
data0.AddDataFlag(Enum_Data_RolloverBackWard()); //改成后复权
Range[0:DataCount - 1]
{
SetBasePeriod("15m");
}
}
OnBar(ArrayRef<Integer> indexes)
{
range[0:DataSourceSize - 1]
{
Commentary("Rollover=" + text(Rollover));
if(BitHas(DataFlag, Enum_Data_RolloverForWard()))
Commentary("行情标志:前复权" );
else if(BitHas(DataFlag, Enum_Data_RolloverBackWard))
Commentary("行情标志:后复权" );
Else
Commentary("行情标志:不复权" );
Commentary("最高价=" + text(high));
}
}data0 加载 i9888,上下图层的合约和周期一致基础运行周期均为 “15m”出现的问题:commentay出来的 上面复权,下面不复权也就是说,如果我需要用到rollover的话,上面取rollover,下面直接取1但是您看价格不复权的铁怎么会有四位数
回复:
我都是自己重构
回复:这个怎么重构...嘶 我还只能照着帮助文档画瓢 自己写框架什么的 也遥远了....