// AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
这行代码会影响正常的 rollover数据
需求:订阅多周期,一个复权,一个不复权,为了都得到真实价格,所以需要用到rollover
但加入自动换仓这行代码后,不复权的rollover数据就不对了
这个算bug吗,能修吗?
或者我的用法不对,该如何正确使用


不是,这个东西本来是给后复权用的,你这里前复权......我也不知道会发生什么
你既然是自动化模型为什么要用前复权呢
改成后复权也是不对的
测试代码:
Events
OnInit()
{
SubscribeBar(Symbol, "1h", BeginDateTime);
// data0.AddDataFlag(Enum_Data_RolloverForWard());
data0.AddDataFlag(Enum_Data_RolloverBackWard()); //改成后复权
Range[0:DataCount - 1]
{
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
}
}
OnBar(ArrayRef<Integer> indexes)
{
range[0:DataSourceSize - 1]
{
Commentary("Rollover=" + text(Rollover));
}
}
订阅888
只对data0做了复权,data1没动,且系统没有专门设置不复权的代码
那不设置就是默认不复权
加载公式后,在K上打开策略单元设置,也能看到两个数据源的复权是不一样的
那么rollover在两个数据源上是不一样的
但实际执行结果就是,有了“自动换仓”后,rollover就变成一样的了...
明白了你的意思了,恭喜你发现了华点
研发的反馈是,判断是否自动换仓,是需要引用rollover数据的,换句话说,系统判断是否出现自动换仓也是依靠rollover是否变化来判断的。
引用这个数据前可以先判断一下本图层是否后复权
难道是我对“自动换仓”这个代码的使用理解有误
我理解的“Enum_Data_AutoSwapPosition()”是用来给系统回测做标识
即:在这里自动切换但盈亏比例前后一起算,不是分开算。
额,不确定这个表述是否准确,但我理解他只是影响策略报告的盈亏次数统计数,不影响实际交易的数据。
而如果加了这行代码 ,影响了rollover,那么在写策略的时候,我要计算出准确的价格写到buy sell,就成了一个薛定谔的事情。这只是其一
还会在复权的数据源上用rollover算真实的数据算出一些指标和阈值,又不对了
不是,你引用了自动换仓后,图上会额外标记出平仓和开仓信号的。为了标记这个信号,需要确认是哪根bar,这里的逻辑就需要rollover判断了
你可以用dataflag查询行情标志,查查里面是否有复权标记

我要被绕晕了
研发这个意思 是围绕,“自动换仓”信号,是由rollover决定的
我反馈的是意思,“自动换仓”信号把rollover数据破坏了 ,导致代码用到rollover数值时计算的结果是错的
那有一种可能导致的分歧:不是“自动换仓”信号破坏的rollover数据
但我只测出这个
所以我重新问,如果我既要用““自动换仓”信号”,又要用rollover获得正确的数值,该怎么弄
又学会新东西了 ,原来bithas是这么用的呀
您看我用这个BitHas判断后commentary的东西,是不是离谱了
判断出不复权,但是rollover却不等于1

晕了?判断一下是不是复权,如果复权就用rollover,不复权就用1不就行了么
哦 您是给的实用方案哦 我以为是在解释这个没问题...
好的 先这么用
我刚刚想到一个问题
如果是自动换仓必须要用rollover ,那么不复权会不会不自动换仓
加载公式看看,也还是会换仓
然后我好像理解您在说什么了
您是说:
研发的意思是,自动换仓必须依赖rollover这个值
所以,一旦设置了自动换仓,无论是否复权,rollover就必须随换合约变化
所以,这不是bug,是底层依赖关系,不能改
我理解对吧
理论上
必然影响
啊 为什么呀