【下单】- 使用Buy函数下单后Portfolio信息和MarketPosition更新延迟
之前发过帖子询问过使用Buy函数时信号闪烁的问题,根据老师的回答"信号闪烁的判断标准就是,当信号出现以后,当前bar后续所有tick驱动,这个信号都必须保证出现,并且手数和价格参数不能改变。否则就会发出信号闪烁警报", 我的理解是在历史Bar上调用Buy函数应该不会出现信号闪烁(因为历史Bar不需要tick驱动),而且到了调用Buy函数后的下一根Bar时MarketPosition就应该更新了,今天测试的时候发现似乎Portfolio和MarketPosition的更新并没有那么快。问题复现:1.使用品种ag2504, 范围是最近30天2.测试代码如下Defs Bool PrintPortfolio() { Print("---------Portfolio @ Bar #" + Text(CurrentBar) + "--------"); Print("Portfolio_CurrentCapital:" + Text(Portfolio_CurrentCapital())); Print("Portfolio_CurrentEquity:" + Text(Portfolio_CurrentEquity())); Print("Portfolio_UsedMargin:" + Text(Portfolio_UsedMargin())); Print("MarketPosition:" + Text(MarketPosition)); Print("--------------------------\n"); Return True; } Events OnInit() { PrintClear(); Print("数据源策略函数测试"); } OnBar(ArrayRef<Integer> indexs) { If(BarStatus == 1) { If(CurrentBar % 7 == 0 AND MarketPosition == 0 ) { Buy(2,0); PrintPortfolio(); } Else If(CurrentBar == 8) PrintPortfolio(); } Else If(BarStatus == 2) { Print("*********运行至最后一根Bar***********"); PrintPortfolio(); } }预期的结果是:1. 仅在Bar Index = 7的时候下2手买单2. 在Bar Index = 8的时候可以看到MarketPosition = 13. 在最后一根Bar上看到 虚拟账户Portfolio的变化实际的结果是:1. 似乎在Bar Index = 7 和 Bar Index = 14时都调用了下单代码 (Bar Index = 14时 MarketPosition应该为1,If内代码不应该能被执行)2. 在Bar Index = 8的时候 Market Position = 0, 似乎Buy并没有生效3. 在Bar Index = 14时看到了Portfolio更新运行结果看下图我的问题是#1 在历史行情上似乎Buy函数调用后对于虚拟账户的Portfolio更新会延迟?#2 真实行情下Buy函数的行为是怎样的?#3 真实行情下策略单元绑定了真实账户,那么真实账户的下单操作会在什么时候触发呢?