void CloseSELL()
{
for(int k=OrdersTotal()-1;k>=0;k--)
{
RefreshRates();
if(OrderSelect(k, SELECT_BY_POS, MODE_TRADES)==false){break;}
else if(OrderType()==OP_SELL){OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),3,CLR_NONE);}
else if(OrderType()==OP_SELLSTOP || OP_BUYSTOP || OP_SELLLIMIT || OP_BUYLIMIT){OrderDelete(OrderTicket());}
}
return;
}
这种平仓法对十张单以上无法实现秒平,有什么办法呢?
秒平?要求很高啊。
可是我觉得,对于单量比较大的情况,MQL是根本做不到秒平的。因为他是按照过程执行必须要等前面的指令执行完毕才能执行下一项。
而类似OrderClose这样的交易函数,都需要等待市场(也可以说是服务器)来处理才能返回结果,只有返回了结果才能确认它已经执行完毕。
就MQL以外的情况来讲,我个人并不觉得秒平有多么重要,甚至没有任何意义的;
当然,MQL本身来讲(编程方面)来讲,如果楼主有可以实现秒平的方法,我也 比较 愿意学习一下~~
请大侠指点下,以下代码并不能算出在不同货币对中得出最大的可下订单量,问题出在哪里吖?
可用资金某一商品里最大可下订单量计算:
double LotsOptimized()
{
double lot;
if(Symbol()=="XAUUSD"){lot=NormalizeDouble(AccountFreeMargin()*4/(MarketInfo(Symbol(),MODE_ASK)),2);}
else if(Symbol()=="XAGUSD"){lot=NormalizeDouble(AccountFreeMargin()/(MarketInfo(Symbol(),MODE_ASK)*1.25),2);}
else {
for(lot=NormalizeDouble(AccountFreeMargin()/(2*MarketInfo(Symbol(),MODE_ASK)),2);lot>0;lot=lot-0.01)
{if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)>0){break;}}
}
if(Symbol()=="XAGUSD"&&lot>20){lot=20;}
else if(lot>100){lot=100;}
else if(lot<0){lot=0.0;}
return(lot);
}