大神帮我看下程序出现更多信号的问题

我做的一个程序,请大神帮我看下: 设当前K线(开盘价+收盘价)/2的值为K1,前一根K线(开盘价+收盘价)/2的值为K2,再前一根K线(开盘价+收盘价)/2的值为K3。 如果(K2-K3)大于0,且K2为阳线:如果当前无持仓,则做多一手;如果持有空单,先平仓再做多一手;如果持有多单,则不操作。 如果(K2-K3)小于0,且K2为阴线:如果当前无持仓,则做空一手;如果持有多单,先平仓再做空一手;如果持有空单,则不操作。 Vars Numeric K2; Numeric K3; Numeric diff; Numeric signalExecuted; // 用Numeric代替Boolean Events OnBar(ArrayRef<Integer> indexs) { // 重置信号执行状态(每根K线开始时重置) signalExecuted = 0; // 确保至少有3根K线 If (CurrentBar < 2) Return; // 计算K2(前一根K线中点)和K3(前两根K线中点) K2 = (Open[1] + Close[1]) / 2; K3 = (Open[2] + Close[2]) / 2; diff = K2 - K3; // 多头信号:K2-K3 > 0 且 K2为阳线 If (diff > 0 && Close[1] > Open[1]) { // 如果已执行过信号,跳过(避免重复触发) If (signalExecuted == 1) Return; // 1. 先平空(如果持有空单) If (MarketPosition == -1) { SellShort(0, Close); // 平空 signalExecuted = 1; // 标记已执行 } // 2. 再开多(如果未持有多单) If (MarketPosition != 1) { Buy(1, Close); // 开多 signalExecuted = 1; // 标记已执行 } } // 空头信号:K2-K3 < 0 且 K2为阴线 Else If (diff < 0 && Close[1] < Open[1]) { // 如果已执行过信号,跳过 If (signalExecuted == 1) Return; // 1. 先平多(如果持有多单) If (MarketPosition == 1) { Sell(0, Close); // 平多 signalExecuted = 1; // 标记已执行 } // 2. 再开空(如果未持空单) If (MarketPosition != -1) { SellShort(1, Close); // 开空 signalExecuted = 1; // 标记已执行 } }} 问题是:有的地方出现了四笔交易,根据设计,应该每个信号两笔交易。请大神帮我看下问题出在哪儿,谢谢!!

如果反手会出两个信号的,一个信号是平,另一个信号是开你这个模型问题很大。图表机制,开仓bar不可以平仓的