okmijn 发表于 2020-8-13 22:46:10

A函数公式不发单有人懂吗?麻烦帮忙解决可有偿

Params
        Numeric J1(55);

Vars
        NumericSeries MA;
        Numeric GG;
Begin
        If(BarStatus==0) SetGlobalVar(0,0);
        MA=Average(C,55);
        GG=Highest(H,2);
        PlotNumeric("MA",MA);
               
        If(Barstatus <> 2 Or AccountDataExist()==false) return;
               
        if(BarStatus==2)
        {
        If(Q_AskPrice > ma and GetGlobalVar (0) <> 1 AND A_BuyPosition==0 )
        {
        //A_SendOrder(Enum_Sell,Enum_Exit,1,Q_AskPrice);      
        A_SendOrder (Enum_Buy,Enum_Entry,1,Q_AskPrice )        ;
             SetGlobalVar (0,1);
        }
      
        If(Q_BidPrice<=ma AND GetGlobalVar (0)==1)
        {
                //A_SendOrder(Enum_Buy,Enum_Exit,1,Q_BidPrice);
                A_SendOrder ( Enum_Sell,Enum_Exit,1,Q_BidPrice);      
                SetGlobalVar (0,0);
        }
        }
End

追涨杀跌 发表于 2020-8-14 16:18:51

本帖最后由 追涨杀跌 于 2020-8-14 16:20 编辑

您好。您的问题,我之前就回复过您,而且我是做过测试后再回复您的,单从发单角度策略是没有问题的。
但策略本身的逻辑是否有问题,我确实没有细测。说实话,每个客户写个策略碰到问题就丢给我们调试,我们再多的工作人员也忙不过来,这也绝不是解决问题的正确服务方式,这点希望您多理解。
之后我看您还是不断地在论坛发帖、到客服群询问,虽然这种方式我并不认同。但为了解决您的问题, 就只有花点时间在极速版上做下测试,看看到底是什么原因。测试结果见下图:


从测试的交易记录看 ,满足条件后,发单确实是没有问题的。但9点21分54秒后为什么就没有继续发单呢,仔细看消息中心,可以发现是有一个报错的。
所以,后面不发单,原因还是出在策略本身。
因为您发出买入开仓单后,SetGlobalVar (0,1); 这是没问题的,因为如果不设置,在A_BuyPosition改变之前,就有可能会重复地买入。
但买入指令后并不意味着回报就立即回来了,所以卖出平仓时,是需要判断一下是否A_BuyPosition>0的
而您现在的代码里并没有判断,所以,在9:21:54正好价格上穿完均线,马上又下穿均线,就发出了买入开仓指令,还没等成交,又立即发出了卖出平仓指令,而这时买入的回报还没回来,卖出平仓自然就报错了。但GlobalVar(0)又被您改成0了。后面买入的回报回来了,就演变成了,A_BuyPosition=1,GlobalVar(0)=0,这种出乎意外的情形了
后面就很好理解了,因为开仓和平仓条件都不能满足了,也就不会再发单了。按照这个分析,后面一个条件中,应该改成
If(Q_BidPrice<ma AND GetGlobalVar (0)==1 And A_BuyPosition==1)

因时间关系,我只能测试至此,如还有问题,后面只能靠您自己继续调试了。

okmijn 发表于 2020-8-14 21:27:17

追涨杀跌 发表于 2020-8-14 16:18 static/image/common/back.gif
您好。您的问题,我之前就回复过您,而且我是做过测试后再回复您的,单从发单角度策略是没有问题的。
但策 ...

谢谢老师  给您添麻烦了,不发单的问题已经解决了是因为映射的问题,我用888合约映射主力   所以一直不发单   
感谢
页: [1]
查看完整版本: A函数公式不发单有人懂吗?麻烦帮忙解决可有偿