万次发单成交一次

请教,代码回测没问题,模拟盘实时行情成交时才出现,软件消息和委托成交,透视,监控,都是一次,很正常,就是print出来,发单了几万次,就成交一次,这正常还是不正常?能看出来大概什么问题?代码中有判断条件MarketPosition ==0,其它就是正常的if进仓条件,不是循环,没有闪烁。

发单几万次这就明显不可能,模拟账户一天最多发一万单。你先搞清楚你是发单几万次,还是执行了几万次信号判断

回复:If(lots >0) { Buy(lots,Open); myContracts = myContracts+1; cc =cc+1; Print(text(cc) +" "+ Text(date+time)+ " 做多:"+ Symbol +" "+ Text(lots) + " 总持仓数: "+ Text(myContracts)); }这是发单位置代码,再往上的信号判断用的是close[1]计算的结果,多图层,range来的,没有别的循环,我也奇怪,就是说在新bar的开启位置满足了信号,并进入发单代码,这个动作重复了3万多次,只是可能只成交了一次就停止了。Buy(lots,Open)和print在同一段中,那要么就是每次Buy没执行却执行了print,要么buy执行不成功MarketPosition还是0,如果是后者又只有lots和open两个变量,lots每次都是8,那难道open有问题?

回复:if((Close[1] < Max(StopLine,MidLine) or (close[1]<= avgLL and mopen ==1)) and MarketPosition==1) //平多 { Sell(0,Open); myContracts = myContracts-1; Print(Text(date+time)+"平多:"+ symbol+ " myContracts:"+ Text(myContracts) +" mkt"+ Text(MarketPosition)); }又来了,一直平多,实际已经成交了,还在不停的print,看看这个应该能找到原因,貌似是要这根线走完才会停止

回复:我觉得你还是先看下零基础课程把事件域驱动机制了解一下先

回复:MarketPosition明明已经是0了,为什么还能进入,是if里面不能这样嵌套and和or?

回复:哪一个视频啊,刚没找到,发个连接?

回复:找到了,我先学习下看

回复:https://video.tbquant.net/?menu=%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6%E9%87%8F%E5%8C%96

回复:你好,MarketPosition的值,在同一根K线上,是不是无法保留,比如信号来了执行buy进仓后MarketPosition值变为1,但下一个tick来时MarketPosition又变回0了,如此不断的重复,一直到新k线,MarketPosition才固定为1

回复:marketposition是序列类型,每根bar上的值以最后一次执行结果为准。所谓的到了新k线才固定,其实是以上一根bar的收盘状态执行结果

回复:好的,谢谢,那应该就是这个问题,MarketPosition作为序列变量在实时行情中,每次都是沿用上一根K线的值0,即使中途进仓变为1,但下一个tick又会重回原值0,直到该K线完成,收盘状态值能维持1,说明没有闪烁,新值1便传到新K线。那么问题来了,我这些print这么多,有没有问题呢?属于正常?是不是机制就是这样的,我理解的是,这根k线如果条件达到了进仓信号,后续就应该不停的进入发单代码,只是会执行很多次,但真正映射成交只会一次,不停的执行,如果能维持到该K线收盘,说明没问题,如果不能维持到低就信号消失,发生闪烁,是这样么?那就不用管吧? https://bbs.tbquant.net/thread/20250714114743554315 https://bbs.tbquant.net/thread/forum8841 跟这两家问题一模一样