intstart(){//---- Запоминаем значения индикатора для дальнейшего анализа//---- Обратите внимание - используем 1-й и 2-й бары. Это даёт задержку в 1 бар //---- (т.е. сигнал появится позже), но защищает от многочисленных открытий и закрытий//---- позиций в течении бараdoubleMACD_1 = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
doubleMACD_2 = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
int_GetLastError = 0, _OrdersTotal = OrdersTotal();
//---- перебираем все открытые позицииfor(intz = _OrdersTotal - 1; z >= 0; z -- ){//---- если при выборе позиции возникла ошибка, переходим к следующейif( !OrderSelect(z, SELECT_BY_POS)){_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError);
continue;
}//---- если позиция открыта не по текущему инструменту, пропускаем еёif(OrderSymbol() != Symbol())continue;
//---- если MagicNumber не равен _MagicNumber, пропускаем эту позициюif(OrderMagicNumber() != _MagicNumber)continue;
//---- если открыта БАЙ-позиция,if(OrderType() == OP_BUY){//---- если МАКД пересёк 0-ю линию вниз,if(NormalizeDouble(MACD_1, Digits + 1) < 0.0 &&
NormalizeDouble(MACD_2, Digits + 1) >= 0.0){//---- закрываем позициюif( !OrderClose(OrderTicket(), OrderLots(), Bid, 5, Green)){_GetLastError = GetLastError();
Alert("Ошибка OrderClose № ", _GetLastError);
return(-1);
}}//---- если сигнал не изменился, выходим - пока рано открывать новую позицию
两边都有一叠挂单。如果任何一个挂单被触发,那么在另一边,最外层的挂单被删除。在截图中,我展示了如果买入订单被触发,最外层的空单被删除会发生什么。
如果有一个仓位被触发,我已经做了。但如果不是一个而是三个同时触发呢?也就是说,我应该以某种方式估计被触发的挂单数量并关闭相反信号的挂单。
什么是最好的方法?也许,有人已经实现了这个观点?我没有决定将这个问题发布到一个单独的分支。 也许,对于那些更了解这一点的人来说,这将是非常简单的。
如果我们只需要删除最低的一个头寸,我们可以在循环中找到一个以最低价格开出的头寸并将其删除,但如果有几个头寸,我们应该怎么做?我很想听听那些已经有订单网格经验的人的意见。
这里有一个问题--有人在不同的处理器上测试过MT-5测试器的速度吗?
如果有,请给我一个链接。或者至少告诉我,在速度方面,AMD和INTEL的顶级处理器哪个更好?
当然,我们谈论的是台式机,而不是笔记本电脑或超级计算机。:-)
这里有一个问题--有人在MT-5测试仪上对不同的处理器做了任何速度测试吗?
如果有,请给我一个链接。或者至少告诉我,在速度方面,AMD和INTEL的顶级处理器哪个更好?
当然,我们谈论的是台式机,而不是笔记本电脑或超级计算机。:-)
关于五的一切都在这里:https://www.mql5.com/ru/forum
维克多,当低的那个被删除后,下一个已经成为最低级的那个也会被同样的条件删除。迅速是为了你;对于程序来说,最重要的是不在同一个刻度上,但这也是可以的!试试吧!
鲍里斯,那是可以理解的。我刚才在想这个问题。我想我们必须做一个从0 到存储触发订单值的变量 的循环,并运行寻找所需订单的功能,然后在循环的每一次传递中关闭它。我不知道如何解决这个程序在当前时刻被执行的问题。
顺便说一下,最好是使用标准搜索功能搜索最极端的订单,然后将订单开仓时间 和价格的值传递给平仓的功能,对吗?
两边都有一叠挂单。如果任何一个挂单被触发,那么在另一边,最外层的挂单被删除。在截图中,我展示了如果买入订单被触发,最外层的空单被删除会发生什么。
如果有一个仓位被触发,我已经做了。但如果不是一个而是三个同时触发呢?也就是说,我应该以某种方式估计被触发的挂单数量并关闭相反信号的挂单。
什么是最好的方法?也许,有人已经实现了这个观点?我没有决定将这个问题发布到一个单独的分支。 也许,对于那些更了解这一点的人来说,这将是非常简单的。
如果我们只需要删除最低的一个头寸,我们可以在循环中找到一个以最低价格开出的头寸并将其删除,但如果有几个头寸,我们应该怎么做?好吧,我很想听听那些有处理订单网格经验的人的意见。
如果我没有弄错的话,我是想借助一些挂单的对子来做一个好的动作。
删除算法 :
1)在开放的职位列表中挖掘,并写下(记住)他们的槽位。
2)在已设定的挂单列表中查看,并从姿势列表中检查出匹配的 "慢",如果它们匹配 - 删除挂单。
而且不再有痛苦。
例如,如果你是一个老程序员,或者你对编码一无所知,或者用不同的方式做所有事情太时髦了???? а ?
这里有一个问题--有人在不同的处理器上测试过MT-5测试器的速度吗?
如果有,请给我一个链接。或者至少告诉我,在速度方面,AMD和INTEL的顶级处理器哪个更好?
当然,我们谈论的是台式机,而不是笔记本电脑或超级计算机。:-)
在5号机上使用云端进行测试,忘记你的处理器,即使它是多核和快速的。真正加快了许多倍的速度。但你必须支付一分钱。事实上,这里在某些时候已经有了一个讨论
大家好!
我的问题似乎很简单,但我挖遍了所有的文章,却找不到答案--return(-1)运算符 是如何工作的?它把控制权传给了哪里?例如,在这个代码中。
else return(0);
在括号里有零,没有括号,一切似乎都很清楚。但是(-1)呢?
谢谢你的答复。:)
鲍里斯,这很有道理。我刚才在想这个问题。我认为我们应该从0 开始循环到一个 存储触发订单值的变量,并运行搜索所需订单的函数,然后在循环的每次迭代中关闭它。但我不太清楚如何解决目前执行的这个程序。
而且,顺便说一下,最好是用标准搜索功能搜索最极端的订单,然后将开仓时间值和价格传给函数,以关闭订单,对吗?