请老师帮助看看 (文华财经wh9)

投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
 请老师帮助看一下,为什么我每次开仓都是两手。
再者,我下面定义的NB是指分钟周期上的当前K线吗


    if(Close > REF(High, 1))                    
    {
       Buy(1,Limit_Order);
    }

    if(Close < REF(Low,1))        
    {       
      Sellshort(1,Limit_Order);
    }

   TBAP = A_BuyAvgPrice(); //取得持仓栏中该合约多头持仓均价
   TSAP = A_SellAvgPrice();
   TBP = A_BuyPosition();
   TSP = A_SellPosition();
   LatestPrice = Q_Last;

   NB = BarsLast(Minute<>Ref(Minute,1))+1;
   BB = CountSig(Buy,NB);
   SS = CountSig(SellShort,NB);

    If(F_CurrentSig == Sig_Buy)
    {   
        if(TBP == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit"));
        }
        else if(TBP != 0 && LatestPrice > TBAP * 1.0015 && BB == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit"));
        }
    }

    If(F_CurrentSig == Sig_SellShort)
    {
        if(TSP == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
        }
        else if(TSP != 0 && LatestPrice < TSAP * 0.9985 && SS == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
        }
    }

技术人员回复
日期:2018-5-24 11:09
 您模型是算法和趋势模型写在一起了

如果您没用SignalNoTrading 限制,每次开仓趋势模型和算法都会下单,也就是开2手

如下模型开始时定义一下即可

Setting
   SignalNoTrading:1;//启用只出信号不下单;
投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
不好意思,没有给您贴完全,这个是我的模型,我用了您说的那个SignalNoTrading:1;

Data
    
    data0:"CF901";

Params

Vars    

   
    Numeric LatestPrice;

    Numeric NB;
    Numeric BB;
    Numeric SS;
    Numeric TBP;
    Numeric TSP;
    Numeric TBAP;
    Numeric TSAP;
    Numeric Turn;
    Numeric OverallProfit;
    Numeric TotalPosition;
    Numeric UnitPrice;

Setting

    SignalNoTrading:1;   
    AddTimes:1000;


Begin

    if(Close > REF(High, 1))                     
    {
       Buy(1,Limit_Order);
    }

    if(Close < REF(Low,1))         
    {        
      Sellshort(1,Limit_Order);
    }


   TBAP = A_BuyAvgPrice();
   TSAP = A_SellAvgPrice();
    TBP = A_BuyPosition();
    TSP = A_SellPosition();

    LatestPrice = Q_Last;

   NB = BarsLast(Minute<>Ref(Minute,1))+1;
   BB = CountSig(Buy,NB);
    SS = CountSig(SellShort,NB);

    If(F_CurrentSig == Sig_Buy)
    {    
        if(TBP == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit"));
        }
        else if(TBP != 0 && LatestPrice > TBAP * 1.0015 && BB == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit"));
        }
    }

    If(F_CurrentSig == Sig_SellShort)
    {
        if(TSP == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
        }
        else if(TSP != 0 && LatestPrice < TSAP * 0.9985 && SS == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
        }
    }

End 
技术人员回复
日期:2018-5-24 11:25
 我们测试下,下午给您回复
投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
 谢谢

技术人员回复
日期:2018-5-24 14:18
 这么试试

还有问题就和模型编写考虑不全有关,因为是反手指令,其实下单是2部分的平仓+开仓

建议您把思路完整说下,重新给您写下

Data
    
    data0:"CF901"; 

Params

Vars    

    
    Numeric LatestPrice;

    Numeric NB;
    Numeric BB;
    Numeric SS;
    Numeric TBP;
    Numeric TSP;
    Numeric TBAP;
    Numeric TSAP;
    Numeric Turn;
    Numeric OverallProfit;
    Numeric TotalPosition;
    Numeric UnitPrice;

Setting

    SignalNoTrading:1;   
    AddTimes:1000;

Begin

    if(Close > REF(High, 1))                     
    {
       Buy(1,Limit_Order);
    }

    if(Close < REF(Low,1))         
    {        
      Sellshort(1,Limit_Order);
    }


   TBAP = A_BuyAvgPrice();
   TSAP = A_SellAvgPrice();
    TBP = A_BuyPosition();
    TSP = A_SellPosition();

    LatestPrice = Q_Last;

   NB = BarsLast(Minute<>Ref(Minute,1))+1;
   BB = CountSig(Buy,NB);
    SS = CountSig(SellShort,NB);

    If(F_CurrentSig == Sig_Buy&&GetGlobalVar(0)==1) 
    {    
        if(TBP == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit")); 
SetGlobalVar(0,1);
        }
        else if(TBP != 0 && LatestPrice > TBAP * 1.0015 && BB == 0)
        {
        data0.A_SendOrder(Enum_Buy,Enum_Entry,1,Price("RiseLimit"));
SetGlobalVar(0,1);
        }
    }

    If(F_CurrentSig == Sig_SellShort&&GetGlobalVar(0)==0)
    {
        if(TSP == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
SetGlobalVar(0,1);
        }
        else if(TSP != 0 && LatestPrice < TSAP * 0.9985 && SS == 0)
        {
        data0.A_SendOrder(Enum_Sell,Enum_Entry,1,Price("FallLimit"));
SetGlobalVar(0,1);
        }
    }
If ((BarsSellShort==1||BarsBuy==1)&&GetGlobalVar(0)==1)
{
SetGlobalVar(0,0);
}

End  
 
投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
老师您好,我的思路是这样的:

1. 多头开仓条件A:(突破前高,并且MA5在MA10以上),开一手多仓;在条件A下,如果最新价突破均价1%以上,加一手多仓;如果条件合适,可以连续加仓;

2. 空头开仓条件B:跌破前低,并且MA5在MA10以下,开一手空仓;在条件B下,如果最新价跌破均价1%以上,加一手空仓;如果条件合适,可以联系加仓;

3. 平仓条件C:在持仓条件下(可能同时拥有多空仓,或者只有持单边仓),只要该合约的(多头持仓浮盈+空头持仓浮盈)的数值 大于(该合约总持仓量 * 30)的数值,就平掉所有持仓

4. 每根K线上只有一次操作:或开仓,或加仓,或平仓。如果有过上述任何一种操作,则当前K线不会再次进行其他操作。

5. 如果在主界面主观手动加仓,或减仓,或平仓,希望程序能够正确识别。即如果有手动加仓,那么上述的平仓条件里的持仓浮盈就要大于(程序单跟手动单的所有多空仓*30)的数值。

我已经在WH8通过模组出信号,算法下单的方式解决了上述问题。现在也在考虑套利程序化,所以需要转到MQ上来。

谢谢老师的帮助。

 
技术人员回复
日期:2018-5-24 21:49
 我们分析下,明日给您回复
投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
 谢谢。我尝试了您的方法,现在貌似不是一次开两手了。可是加仓条件成立后,信号出现了,可是并没有委托发出。请帮忙看看怎么回事。谢谢

图片点击可在新窗口打开查看
投资者咨询:请老师帮助看看 (文华财经wh9)
来源:文华财经  日期:2018-5-24 10:53
 还有老师,请问这个 GetGlobalVar跟SetGlobalVar 的用途是什么?我尝试在软件的‘函数列表’里和 软件右上角》帮助》软件说明书》常见问题里面寻找答案,源于编程知识浅薄,实在看不明白,还请老师帮忙解释一下。我也尝试在论坛的历史帖子里面找,也不是很幸运。

谢谢