[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)

投资者咨询:[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)
来源:文华财经  日期:2018-7-6 22:39

版主好,在MQ测试版上测试A_Sendorder函数,但是有的时候会多次下单,在论坛里看了一些方法,经测试还是不行,改用A_IsNoOrderByCode函数,也是不行,请帮我看看出了什么问题?如何修改?谢谢。

(请忽略下面的action,这是原本添加的下单过滤,但是也是不行)

 

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 
 NumericSeries action;//交易动作(0无 1开多 -1开空 2平多 -2平空)
 NumericSeries test;//测试
Begin
 
   
 //信号

 action=0;
 
  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0)
        {
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
 Else
   action=0;
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0)
        {
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
Else
   action=0;
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0)
        {
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
Else
   action=0;
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0)
        {
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
Else
   action=0;
 
End

 

下面是交易日志,最后有几行,但是截图发不上来,不过不是重要信息。

 

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

技术人员回复
日期:2018-7-7 10:40

这样改下

 

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 
 NumericSeries action;//交易动作(0无 1开多 -1开空 2平多 -2平空)
 NumericSeries test;//测试
Begin
 
  
 //信号


 
  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0&&GetGlobalVar(0)==0)
        {
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
   SetGlobalVar(0,1);
        }


  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0&&GetGlobalVar(2)==1)
        {
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
   SetGlobalVar(2,0);
        }


  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0&&GetGlobalVar(2)==0)
        {
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
   SetGlobalVar(2,1);
        }

  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0&&GetGlobalVar(0)==1)
        {
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
   SetGlobalVar(0,0);
        }

End

 
投资者咨询:[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)
来源:文华财经  日期:2018-7-6 22:39
 

这是我修改后的代码,似乎还是无效,请帮我看看到底怎么改进?

 

 

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 
 NumericSeries action;//交易动作(0无 1开多 -1开空 2平多 -2平空)
 NumericSeries test;//测试
Begin
 
   
 //信号

 action=0;
 SetGlobalVar(0,0);
 
  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
 Else
   action=0;
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0 And GetGlobalVar(0)<>-1)
        { 
         SetGlobalVar(0,-1);
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
Else
   action=0;
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
Else
   action=0;
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
Else
   action=0;
 
End

 

 

 

 这是运行日志

 



图片点击可在新窗口打开查看

图片点击可在新窗口打开查看
投资者咨询:[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)
来源:文华财经  日期:2018-7-6 22:39
 顶一下
技术人员回复
日期:2018-7-9 10:14
如下语句删除一下:

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 
 NumericSeries action;//交易动作(0无 1开多 -1开空 2平多 -2平空)
 NumericSeries test;//测试
Begin
 
   
 //信号

// action=0;
 //SetGlobalVar(0,0);//表示每次加载都重新赋值为0了
 
  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
 Else
  // action=0;
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0 And GetGlobalVar(0)<>-1)
        { 
         SetGlobalVar(0,-1);
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
Else
 //  action=0;
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
Else
  // action=0;
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
//Else
   //action=0;//一直返回为0 ,写不写都是一样的 
 
End

 

   
投资者咨询:[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)
来源:文华财经  日期:2018-7-6 22:39

修改过后还是不行,求教

 

 

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 NumericSeries test;//测试
Begin
 
   
 //信号

  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0 And GetGlobalVar(0)<>-1)
        { 
         SetGlobalVar(0,-1);
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
 
End

技术人员回复
日期:2018-7-9 10:45
Buy与A_SendOrder写一个就行了

请参考:


Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
Params
 //此处添加参数

Vars
 //此处添加变量
 NumericSeries test;//测试
Begin
 
   
 //信号

  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Buy;
       //  data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0 And GetGlobalVar(0)<>-1)
        { 
         SetGlobalVar(0,-1);
         BuyToCover;
         //data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         SellShort;
        // data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Sell;
         //data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
 
End

投资者咨询:[求助]MQ,关于A_Sendorder多次下单的问题 (文华财经wh9)
来源:文华财经  日期:2018-7-6 22:39
 Buy只是在图表上显示信号,而且我这样写完全是参考curmaincode函数的示例编写的。a_sendorder重复下单是否能够解决?
技术人员回复
日期:2018-7-9 11:33
 请稍后,我们下午测试后在给您回复
技术人员回复
日期:2018-7-9 14:12

加入SignalNoTrading函数控制模组出信号并下单,参考:

 

Data
 data0:"CurMainCode";
Setting
 Trade_Other:Auto;
SignalNoTrading:0;
Params
 //此处添加参数

Vars
 //此处添加变量
 NumericSeries test;//测试
Begin
 
  
 //信号

  If(Close>Close[1] And data0.A_BuyPosition()==0 And data0.A_IsNoOrderByCode(Enum_BuyEntry)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Buy;
         data0.A_SendOrder(Enum_Buy,Enum_Entry,1,data0.Price("Ask1"));//交易
        }
  If(Close>Close[1] And data0.A_SellPosition()<>0 And data0.A_IsNoOrderByCode(Enum_BuyExit)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         BuyToCover;
         data0.A_SendOrder(Enum_Buy,Enum_Exit,data0.A_SellPosition(),data0.Price("Ask1"));//交易
        }
  If(Close<Close[1] And data0.A_SellPosition()==0 And data0.A_IsNoOrderByCode(Enum_SellEntry)==0 And GetGlobalVar(0)<>-1)
        {
         SetGlobalVar(0,-1);
         SellShort;
         data0.A_SendOrder(Enum_Sell,Enum_Entry,1,data0.Price("Bid1"));//交易
        }
  If(Close<Close[1] And data0.A_BuyPosition()<>0 And data0.A_IsNoOrderByCode(Enum_SellExit)==0 And GetGlobalVar(0)<>1)
        {
         SetGlobalVar(0,1);
         Sell;
         data0.A_SendOrder(Enum_Sell,Enum_Exit,data0.A_BuyPosition(),data0.Price("Bid1"));//交易
        }
 
End