做空策略同一根K线重复开平?做多却完全没问题

StopPrice=EntryPrice+StopLength*MinMove*PriceScale; //系统入场 If(MarketPosition !=-1) { If(Low <= DispBottom[1]) { SellShort(0,Min(Open,DispBottom[1])); //强制开空 } } //系统出场 If(MarketPosition == -1) { If (High>=StopPrice) {BuyToCover(0,StopPrice);} If(BarsSinceEntry >0 && High >= DispTop[1]) {BuyToCover(0,Max(Open,DispTop[1]));} //买平 } } 这段代码如果不在 If (High>=StopPrice)括号里加入 BarsSinceEntry >0这个条件 那么每根K线都会不停进出,检查了好几次,都满足不了条件,但是还是运行 结果如下 真是让人头皮发麻 如果加了BarsSinceEntry >0 那么如果当前K线的止损点位达到了 还是不会出 要硬扛到第二根去止损 与其相对的做多策略,却没有任何问题 StopPrice=EntryPrice-StopLength*MinMove*PriceScale; //系统入场 If(MarketPosition !=1 ) { If(High >= DispTop[1]) { Buy(0,Max(Open,DispTop[1])); } } //系统出场 If(MarketPosition == 1) { If (Low<=StopPrice) { Sell(0,Min(StopPrice,DispBottom[1]));} If(BarsSinceEntry > 0 && Low <= DispBottom[1]) { Sell(0,Min(Close,DispBottom[1]));} 执行结果如下

你在&ldquo;//系统出场&rdquo;这句下面,写一句 Commentary("StopPrice= " + Text( StopPrice)); 把鼠标放到K线上,看看输出的StopPrice是多少,你一秒钟就能明白为什么它会当根k线平仓。因为你的StopPrice,在当根K线上,是一个很小的值,你的H永远大于这个StopPrice,它当然要平仓,完全符合逻辑。 怎么改? 把 StopPrice=EntryPrice+StopLength*MinMove*PriceScale; 这一句,放到开仓语句下面,平仓语句上面即可。也就是放到&ldquo;//系统出场&rdquo;这句的位置。 做多为什么看上去一切正常呢?因为你开仓那根K线上,StopPrice可能是个负数,L永远不会小于它,所以不会平仓。 实际上你这个在做多的情况下也不正常,因为你想要他实现当根K线该止损的时候还是要止损,但是你去看看你过去的所有做多的信号,有任何一个交易在当根K线止损了吗?恐怕没有。

代码有先后顺序,你先开了空,然后判断平空 然后平空又满足,自然就平空去了 关于当根K线止损的问题,建议放到下一根 因为K线系统无法解释K线内部的情况

回复:为什么先开多就没有问题了

回复:那个条件不可能达到的 因为是写的止损价格是1000, 但她还是不停开平 ,做多策略就没有这个问题