[Oanda]程式交易_可以让MT4中的所有部位更加快速结算的方法
让MT4中的所有部位更加快速结算的方法说明与外汇自动程式交易编码教学MT4不能把所有部位同时平仓。
如果想尽快把所有部位都结算的话,使用EA或脚本是一个更快的方法。
使用OnTimer
当市场价格急剧变动时,因为tick的速度太快,OnTick()函数有时会跟不上MT4的变动。
有时也不想浪费时间去等待tick。
使用OnTimer()函数的话,会按照一定规律变动,所以,开始速度会加快。
OnTimer()的动作时间可以在EventSetTimer()函数和EventSetMillisecondTimer()函数中设置。
EventSetTimer()函数可以按秒单位来设置,而EventSetMillisecondTimer()函数可以按毫秒单位来设置。
如果把EventSetMillisecondTimer()函数设置为7以下的话,会因为Windows的计时器事件而产生10ms的延迟。
所以,设置8以获得最快动作。
如果在结算处理中加入if的话速度将会变慢,所以,不会确认订单结算的成功与失败。
等一系列部位结算后,如果还有未平仓部位的话,结算处理将会在8ms以内再次启动。
源码)
int i,R;
input int Slippage=5;
void OnInit(void){EventSetMillisecondTimer(8);}
void OnDeinit(const int reason){EventKillTimer();}
void OnTimer(){
for(i=OrdersTotal()-1;i>=0;i–)
{
R=OrderSelect(i,0);
R=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage);
}
}虽然源码较短,但是为了快速处理,加入了以下3种技术。
[*]EventSetMilliseconfTimer(8) 是最快动作
[*]OnTimer()函数比OnTick()函数有更大机率提前启动
[*]因为加入if会费时,透过重复动作来避免
部位结算的开始时间与使用OnTick()函数时相比,平均要快30ms左右。
问:EventSetMillisecondTimer()函数设置多少可以最快结算?
答:设置8以获得最快动作。
原文转自:OANDA官网
**** Hidden Message *****
页:
[1]