PositionSelect(Symbol());
// Check of het model al LONG zit. if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
{
// Check of het model al de maximale size in positie zit. if(PositionGetDouble(POSITION_VOLUME) >= MAX_Trade_Size)
{
return;
}
}
// De sum van de BID/LAST staticdouble dPriceSum;
double dOldPriceSum = dPriceSum;
// To be used for getting recent/latest price quotesMqlTick Latest_Price;
SymbolInfoTick(Symbol() ,Latest_Price);
dPriceSum = Latest_Price.bid + Latest_Price.last;
// Check if the price is (not)changed.if(dPriceSum == dOldPriceSum)
{
return;
}
这似乎是一个可能的解释,但如果是这样的话,就不正常了。你是否使用异步模式?如果不是,你的EA必须等待服务器的回复,然后才继续处理下一个tick。
如果我理解得好,这是一个随机的问题,你不能重现它?
你可以尝试在m_Trade的声明后添加这一行,以打印更多的调试信息。
你好
自从我在帖子https://www.mql5.com/en/forum/14327 中描述的解决方案以来,我 又有了一次双倍交易。
我认为问题在于PositionSelect(Symbol())函数的执行速度(太慢)。也许,新的点数来的太快了,EA在收到PositionSelect(Symbol())的回应之前就发送了一个新的订单。在我的代码中,如果当前头寸大小等于或大于允许的最大头寸大小,理论上不可能发送新的/双倍订单,见代码。
在宏观经济新闻事件中,经纪商X的实时服务器(ECN)会产生如此多的刻度,对于你在metaquotes的模拟服务器上看到的每一个刻度,这个服务器会产生20、30或40个刻度
我的EA自动扭转双倍头寸以获得正确的头寸大小作为额外的备份。
....
在宏观经济新闻事件中,经纪人X的实时服务器(ECN)会产生如此多的刻度,对于你在metaquotes的模拟服务器上看到的每一个刻度,这个服务器会产生20、30或40个刻度
....
我的EA自动扭转双倍头寸以获得正确的头寸大小作为额外的备份。
是的,这是因为DOM是活动的。
谢谢你的意见。你和其他人一样在同一个经纪商上有这个问题,还是独立于经纪商?
什么是 "DOM"?
只有在这个经纪商服务器上,自从这个主题https://www.mql5.com/en/forum/14327,我从来没有在模拟(Metaquotes)服务器上经历过它。
在此之前,经纪人X的服务器产生大约相等数量的ticks作为Metaquotes服务器。
什么是 "DOM"?
只有在这个经纪商服务器上,自从这个主题https://www.mql5.com/en/forum/14327,我从来没有在模拟服务器上经历过它。
在这之前,经纪人X的服务器产生的ticks数量与Metaquotes服务器大致相同。
DOM=市场深度,当它被激活时,会有很多Tick事件。
有可能禁用它吗?
有可能禁用它吗?
我已经通过只允许在价格本身发生变化的情况下出现点子,将传入点子的数量降到最低。
我已经通过只允许在价格本身发生变化的情况下出现点子,将传入点子的数量降到最低。
如果买入价在变化,或者出价增加1点,最后减少1点怎么办?一个 "正常 "的刻度是买入价和/或卖出价的变化。
这是个好问题。也许我应该只使用投标价格的变化。
图表上的BAR也是基于出价的?
对于我的EA的触发信号,我只对1分钟BAR所依据的价格变化感兴趣。