bar的数量影响开平仓信号
在1秒周期下大于日线开盘价10个点就做多小于就做空,bar数量一多开平信号就会出错
在1秒周期下大于日线开盘价10个点就做多小于就做空,bar数量一多开平信号就会出错
上面是代码,可以复现,就是简单的在1秒周期下,大于日开盘价+3个点做多,小于开盘价3个点做空。尾盘清仓。图表信号经常会出错,例如黄金,2023年7月11日 图表信号显示出错,多重启机次TBQ又能恢复正常。经过客服远程帮助,客服说是:bar数不同导致了正常和不正常, 5万bar 调到2万bar 同一时间的历史信号就改变了。本来开仓5-6次,会开仓几百上千次。
回复:因为你用了opend函数这个函数是用单元图层目前的数据去推算日线数据你如果是秒线,一分钟60根,一小时3600根,黄金一天算9个小时,32400根bar。如果你设置五万根,那么当前的交易数据是全的,可以正确的得到opend结果如果你设置两万根,那么小于黄金一天的数据,那么交易数据就不全,就得不到正确的opend结果,导致你信号全部错乱。opend这个函数是开源的,你用之前应该先明确好这个函数的算法。
//------------------------------------------------------------------------// 简称: gpc_20230705// 名称: gpc_20230705// 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params Numeric lots(1); Numeric stopzs(3);//大于小于开盘价多少点位开仓 Numeric stopzy(0.8); //盈利开盘价的百分比止盈 numeric zy(48); //止盈跳数Vars Numeric MinPoint;Events OnInit() { array<Numeric> timepoint; timepoint[0] = 0.145700; SetTriggerBarClose(timepoint); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { MinPoint = MinMove * PriceScale; If(MarketPosition <> 1 && close[1] >= (OpenD(0) + stopzs*MinPoint) ) { buy(lots,Open); Commentary(\"开多单\"); } If(MarketPosition <> -1 && close[1] <= (OpenD(0) - stopzs*MinPoint) ) { SellShort(lots,Open); Commentary(\"开空单\"); } } //下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组 OnBarClose(ArrayRef<Integer> indexs) { if(time == 0.145700) { sell(0,close); BuyToCover(0,close); switchnum = 0; Commentary(\"收盘平仓\"); } }
听起来没什么头绪,要实际勘察