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
但是
您看价格
不复权的铁怎么会有四位数


我都是自己重构
这个怎么重构...
嘶 我还只能照着帮助文档画瓢
自己写框架什么的 也遥远了....