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));
}
}