MarketPosition状态和实际开仓问题

测试了一下MarketPosition的状态变化,在onbar里面进行了开仓操作,按教程MarketPosition是在同一根bar中状态不会变,测试确实是这样。

但是有个问题,就是按条件来开仓,每个tick都进去执行了一次,但最终的结果是实际只开仓了一次,并且也没有报闪烁,也就是说执行的过程与实际结果不匹配,百思不得其解,因为这个不搞清楚,会影响开仓代码的编写。请老师帮忙看看这个怎么解释?谢谢!


测试代码:

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{

Print(Bar Count: + Text(BarCount));

Print(TimeToString( CurrentTime) + 1 Flag: + Text(MarketPosition));

If(MarketPosition == 0 && BarCount >= 219)

{

Print(TimeToString( CurrentTime) + +++ Buy: + Text(MarketPosition));

Numeric ret = IIF( Buy(1, High), 1, 0);

Print(TimeToString( CurrentTime) + +++ Buy result: + Text(ret));

}

Print(TimeToString( CurrentTime) + 2 Flag: + Text(MarketPosition));

}

执行情况:

data-href=


消息:

data-href=


实际成交后的持仓:

data-href=


如何在多个策略之间传递MarketPosition状态
MarketPosition() 获取到的状态不对
委托映射和实际成交问题
交易策略界面显示的和期货账户实际的持仓不一致,MarketPosition获取持仓数值不对
请教MarketPosition的问题
关于marketposition的问题
关于MarketPosition() 获取到的状态不对 后续DEMO提供
关于图标平仓和实际平仓问题
股指开平互转后MarketPosition是什么状态
MarketPosition判断问题

marketposition是一个序列对象

序列对象得特点就是,每根bar上的初始值是上一根bar的值传递过来的。

所以一根bar上逐tick的多次执行,每次执行结果都是一样的

关于序列类型的具体机制可以看零基础里的解释

https://www.bilibili.com/video/BV1ZG411f7bt/?spm_id_from=333.999.0.0

序列对象我没有疑问,主要的疑问是以marketposition作为条件,为何buy执行了多次,但实际开仓却只有1次呢?试过如果在判断条件内加上global类型的变量加一,是会不断变化的,这说明确实会不断执行,那么为何buy没有报闪烁却最终只执行了一次呢?

https://www.bilibili.com/video/BV1hM4y1H7Tx/?spm_id_from=333.999.0.0

buy可以理解为只是在图表上标记信号,而具体的报单是由系统外部去读图上的信号再进行发单。

这个读信号发单会自动去识别是否是同一个信号多次出现,从而避免同一个信号发生多次报单的情况

明白了,感谢老师!