// Максимально быстро все закрывает. Возврат, когда действие подтверждено.bool CloseAll()
{
uint RequestID[];
for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
// Отправили асинхронный приказ
RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket());
return(Transactions.Waiting(RequestID)); // Дождались ответа от сервера на все асинхронные приказы
}
Асинхронные торговые приказы обладают огромным преимуществом - высокая скорость при массовой отправке. Однако, распространению таких приказов мешает некоторое неудобство - данные о результате приказа возможно увидеть только в OnTradeTransaction. Такое обстоятельство заставляет обывателя строить событийную модель своей ТС, если хочется...
错误。
谢谢你的留言。
纠正了。
优化的问题。在测试器中,每打一个勾,我都需要得到一个勾,以便进一步工作。我是这样做的。
很明显,这种变体的速度会比较慢。
但是SymbolInfoTick也比较慢,因为它的字符串参数不是通过引用传递的。
是否可以有常规的SymbolInfo*重载,其中字符串是通过引用传递的?
最好能有
在优化器中,这些函数被调用了数百亿次。
你是否建议添加GetNextEvent函数?
并非如此,我宁愿把这个函数称为HandleNextEvent,这是一个可能的签名。
bool HandleNextEvent (ENUM_EVENT_TYPE);当被调用时,类似于GetNextEvent,检查指定的ENUM_EVENT_TYPE是否存在于队列中,
,如果此事件存在,自动将控制权传递给相应处理程序的用户代码(OnChartEvent, OnTrade, OnTradeTransaction, ...(感谢fxsaber 的 补充))。
如果队列中有一个事件,则返回 true,否则返回 false。
可能的用例。
优化的问题。在测试器中,每打一个勾,我都需要得到一个勾,以便进一步工作。我是这样做的。
很明显,这种变体的速度会比较慢。
你在实践中检查过这种说法吗?它可能看起来正好相反。
MqlTick由未被初始化的原始数据类型组成。
相应地,在选择上根本不浪费时间,因为这是同样的 "sub esp "操作,只是大小不同。
结果,瓶颈可能在处理器的缓存上,用于从内存中读取数值的操作。
一般来说,我们应该测试一下))。
当该事件发生时,自动将控制权转移到相应处理程序的用户代码中。
可能的用例。
一个非常好的和有用的解决方案!
你在实践中检验过这一说法吗?结果可能恰恰相反。
在这里进行理论研究。我还没有检查过。但在字符串链接上的转移似乎是合适的。
一个可能的使用案例。
你没有任何意义。
根据签名和你的描述,终端应该调用一个函数来处理下一个事件,然后在调用handlenextevent的地方将控制权还给程序?
如果handlenextevent在处理过程中被再次调用怎么办?
那些没有通过参数中的过滤器的事件会发生什么? 它们被跳过吗? 它们会改变队列吗?
脚本根本就没有事件队列,既然有专家顾问和指标,为什么还要拄着拐杖加上去?
1)你在暗示某种无稽之谈。
2)根据签名和你的描述,终端应该通过函数调用下一个事件处理,然后将控制权返回到程序中的handlenextevent调用点?
3)如果在处理过程中再次调用handlenextevent怎么办?
4)不属于参数中的过滤器的事件会怎样? 它们会被跳过吗? 它们会改变顺序吗?
1)我的工作是提供,但是否是疯狂的东西--这取决于开发人员,而不是你,他们更清楚一点......
2)好的。如果我对处理一个特定的事件感兴趣,而不是对系统中的所有事件感兴趣,那么最好是能够只处理这种类型的事件,而让其他事件的处理保持正常。
3) 如果HandleNextEvent在处理过程中被再次调用--调用并处理。唯一可能发生的是堆栈溢出,但这是用户和代码的问题,不是开发者的问题。
4) 不属于过滤器的事件仍然在相同的序列中,当用户像往常一样将控制权返回给系统时,将被调用。
脚本根本就没有事件队列,既然有了EA和指标,为什么还要拄着拐杖加上去?
下面是 一个异步打开和关闭其头寸/订单的脚本的例子。
1)建议是我的工作,是否是一个两难的问题,不是由你决定的,而是由开发商决定的,他们更清楚一点...
如果你建议的东西更容易实施,那么实施的机会就更大。删除了你的选项,因为它几乎什么都没有给出。