版主好,在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
下面是交易日志,最后有几行,但是截图发不上来,不过不是重要信息。
这样改下
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
这是我修改后的代码,似乎还是无效,请帮我看看到底怎么改进?
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
这是运行日志


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
修改过后还是不行,求教
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
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
加入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

