求助贴 麻烦老师帮忙看看

1.我用(longCurrentContracts /shortCurrentContracts,价格)平仓,发出来的平仓数与持仓数不对应。比如我开仓数是100,按照我的交易指令应该平仓是100,而实际却发出了101,导致可平仓位置不足,平仓没成功。问了客服老师,客服说是因为我计算手数时候用了A函数。但是我计算手数是根据账户的动态权益是判断的,如果不用A函数的话怎么实现呢?麻烦老师帮忙看看,到底是什么问题。
            SS=(A_CurrentEquity()*risk)/(c[1]*MarginRatio()*ContractUnit());
           SS= IntPart(SS);  

老师麻烦帮忙看下该怎样修改
老师麻烦给看看锁仓问题
请老师帮忙看看代码的错误
老师,麻烦帮忙看看这个现象是信号闪烁导致的吗?
老师,麻烦你帮我看看这个是怎么回事呢?
麻烦老师给看看这段代码怎么写?
基础数据下载失败,麻烦帮忙看看
求老师帮忙看看
请教!!!麻烦老师帮我看看代码的问题
全新手咨询,麻烦大神看看

老师,我还是不是很明白,您能帮我看一下我的代码问题吗?

Params

    Numeric ma1(5);

    Numeric ma2(15);

    Numeric ma3(30);

    Numeric  risk(0.05);

Vars

    

series<Numeric> JX1;

series<Numeric> JX2;

series<Numeric> dJX1;

series<Numeric> dJX2;

Numeric SS;

series<Numeric> zsx;

series<Numeric> YK;

series<Numeric> myEntryPrice;

series<Numeric> myExitPrice;

 

series<Numeric> ZHJE;//保证金外的账户权益

Numeric MinPoint; //最小变动

 

Defs

//此处添加公式函数

 

Events

//此处实现事件函数

 

//初始化事件函数,策略运行期间,首先运行且只有一次

OnInit()

{ma1>0&&ma2>0&&MA3>0;

 SetCommissionRate(BitOr(Enum_Rate_FreeOfExitToday,Enum_Rate_ByFillAmount),5);

 SetSlippage(Enum_Rate_PointPerHand,2);  

     AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓

}

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBar(ArrayRef<Integer> indexs)

{Range[0:DataSourceSize() - 1]

        MinPoint = MinMove*PriceScale*3;

            SS=(A_CurrentEquity()*risk)/(c[1]*MarginRatio()*ContractUnit());

            SS= IntPart(SS);

             YK=PositionProfit();

            ZHJE=A_CurrentEquity()-(A_CurrentEquity()*risk);//除保证金外的账户权益

            zsx=-(zhje*0.015);//  

             JX1=AverageFC(c[1],ma1);

             djx1=AverageFC(c[2],ma1);

             PlotNumeric("MA1",JX1);

             PlotNumeric("dMA1",dJX1);

             JX2=AverageFC(c[1],ma2);

             djx2=AverageFC(c[2],ma2);

             PlotNumeric("MA2",JX2);

             PlotNumeric("dMA2",dJX2);

             JX3=AverageFC(Close[1],ma3);

             PlotNumeric("MA3",JX3);

             myExitPrice = IIF(L[1] < Open, L[1],o-MinPoint);

             myEntryPrice = IIF(H[1] > Open, H[1],o+MinPoint);

    If(crossover(dJX1,dJX2))

   {

  

   buy(ss,myEntryPrice);

   PlotString("m1","开多",L);

     }

     

    if(CrossUnder(JX1,JX2)&&BarsSinceEntry >= 1)

    {

   Sell(longCurrentContracts(),myExitPrice);

   PlotString("m2","平多",L);

    }

    If(CrossUnder(dJX1,dJX2))

    Sellshort(ss,myExitPrice);

     PlotString("m2","开空",L);}

    If(Crossover(JX1,JX2) And BarsSinceEntry >= 1)

    BuyToCover(shortCurrentContracts(),myExitPrice);

    PlotString("m2","平空",L);}

//止损设置

  If(MarketPosition == 1 And BarsSinceEntry >= 2)

  {If(zsx>YK)

{

Sell(longCurrentContracts(),L-MinPoint);

    PlotString("zs1","多仓止损",L);

 

}

}

If(MarketPosition == -1 And BarsSinceEntry >= 2)

{

If(zsx>YK)

{

BuyToCover(shortCurrentContracts(),H+MinPoint);

         PlotString("zs2","空仓止损",L);

 

}

}}

你这个思路不是很奇怪吗,开仓才需要根据权益计算手数,如果是平仓的后不是应该获取持仓数据直接由几手平几手吗?

比如你账户持仓有100,注意这个是账户持仓,不是图表持仓,不是currentcontracts。

那么你可以用getposition函数获取当前的持仓函数结构体,然后根据当前可平持仓来发平仓单。

但是如果你要用持仓数据来发单,必须要注意用好状态变量来防止重复发平仓单。

建议没有较为丰富的开发经验,不要使用a_开头的函数

好的谢谢,老师。我回去好好想想