Liang Liu:
为什么下面这段代码平多单有效,平空单总不成功提示无效请求呢?
void OnStart()
{
MqlTradeRequest MyTrade={};
MqlTradeResult MyResult={};
MqlTick MyTick;
SymbolInfoTick(Symbol(),MyTick);
int total=PositionsTotal();
ZeroMemory(MyTrade);
ZeroMemory(MyResult);
for(int i=total-1;i>=0;i--)
{
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
ulong position_ticket=PositionGetTicket(i);
MyTrade.position=position_ticket;
MyTrade.action=TRADE_ACTION_DEAL;
MyTrade.magic=001;
MyTrade.symbol=Symbol();
MyTrade.volume=0.01;
if(type==POSITION_TYPE_BUY)
{
MyTrade.type=ORDER_TYPE_SELL;
MyTrade.price=MyTick.bid;
}
else if(type==POSITION_TYPE_SELL)
{
MyTrade.type=ORDER_TYPE_BUY;
MyTrade.price=MyTick.ask;
}
MyTrade.deviation=100;
MyTrade.type_filling=ORDER_FILLING_FOK;
MyTrade.comment="Test";
}
if(!OrderSend(MyTrade,MyResult))
Print(MyResult.retcode," ",MyResult.ask," ",SymbolInfoInteger(Symbol(),SYMBOL_DIGITS)," ",0.01);
}
为什么用ENUM_POSITION_TYPE取得的type变量总是0(POSITION_TYPE_BUY)?即使持仓是空单,也是0,就是这导致程序判断持仓总是多单,执行平多单(开空单)操作,从而令平空单失败。哪位给说说为啥会这样?
因为在获取type的时候,得先选中订单,例如PositionSelectByTicket,PositionGetSymbol 或者 PositionSelect.
这在帮助文件都写了,仔细看……
为什么下面这段代码平多单有效,平空单总不成功提示无效请求呢?
void OnStart()