为什么平仓的时候会多2手出来,造成平不了仓?

K线图显示也是平仓61手,但是资金帐户里面却发了63手平仓单子,没有平到仓

我感觉你的手数计算信号闪烁了。你是不是用close计算交易手数的。 如果是平仓想要全平,手数直接写0就可以了。如果自己计算没算对反而要出错

回复:TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin(); TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue()); TurtleUnits = IntPart(TurtleUnits); // 对小数取整 手数是上面这个,下面是开仓和平仓 If(MarketPosition == 0) { If( cond7 && cond2 && cond5 && TurtleUnits >= 1) { // 开多单 myEntryPrice =CLOSE[1]; myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 preEntryPrice = myEntryPrice; Buy(TurtleUnits,myEntryPrice); SendOrderThisBar = True; Commentary("preEntryPrice="+Text(preEntryPrice)); } If( cond8 && cond4 && cond6 && TurtleUnits >= 1) { // 开空单 myEntryPrice =CLOSE[1]; myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 preEntryPrice = myEntryPrice; SellShort(TurtleUnits,myEntryPrice); SendOrderThisBar = True; } } If(MarketPosition == 1) // 有多仓的情况 { If(ls3==1 && cond6 && cond4 ) /*&& A1>A1[1] */ { myExitPrice = CLOSE[1]; myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替&& ls3==1 && A1>A1[1] SELL(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); }Else { If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1) { If(Open >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。 { myEntryPrice = Open; preEntryPrice = myEntryPrice; Buy(TurtleUnits,myEntryPrice); SendOrderThisBar = True; } while(High >= preEntryPrice + 0.5*N && CurrentEntries < nEntries) // 以最高价为标准,判断能进行几次增仓 { myEntryPrice = preEntryPrice + 0.5 * N; preEntryPrice = myEntryPrice; if(False == Buy(TurtleUnits,myEntryPrice)) { break; } SendOrderThisBar = True; } } If(LOW<Data1.DonchianLo) { myExitPrice = Max(low,Data1.DonchianLo-MinPoint); myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 Sell(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); } } } Else If(MarketPosition ==-1) // 有空仓的情况 { If( ls6==1 && cond5 && cond2 ) { myEntryPrice =CLOSE[1]; myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); }Else { If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1) { If(Open <= preEntryPrice - 0.5*N && CurrentEntries < nEntries) // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。 { myEntryPrice = Open; preEntryPrice = myEntryPrice; SellShort(TurtleUnits,myEntryPrice); SendOrderThisBar = True; } while(Low <= preEntryPrice - 0.5*N && CurrentEntries < nEntries) // 以最低价为标准,判断能进行几次增仓 { myEntryPrice = preEntryPrice - 0.5 * N; preEntryPrice = myEntryPrice; if(False == SellShort(TurtleUnits,myEntryPrice)) { break; } SendOrderThisBar = True; } } If(High>Data1.Donchianhi) { myExitPrice = Min(High,Data1.Donchianhi+MinPoint); myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替 BuyToCover(0,myExitPrice); // 数量用0的情况下将全部平仓 Commentary("myExitPrice="+Text(myExitPrice)); } } Commentary("CurrentEntries = " + Text(CurrentEntries)); } }