structMqlTradeRequest { ENUM_TRADE_REQUEST_ACTIONS action; // Тип выполняемого действия ulong magic; // Штамп эксперта (идентификатор magic number) ulong order; // Тикет ордера string symbol; // Имя торгового инструмента double volume; // Запрашиваемый объем сделки в лотах double price; // Цена double stoplimit; // Уровень StopLimit ордера double sl; // Уровень Stop Loss ордера double tp; // Уровень Take Profit ордера ulong deviation; // Максимально приемлемое отклонение от запрашиваемой цены ENUM_ORDER_TYPE type; // Тип ордера ENUM_ORDER_TYPE_FILLING type_filling; // Тип ордера по исполнению ENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действия datetime expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED) string comment; // Комментарий к ордеру ulong position; // Тикет позиции ulong position_by; // Тикет встречной позиции };
我已经看到了这幅画。对于证券交易所来说,一切都很清楚(有限价单)。
对于外汇和市场订单,你错过了重点。一切都很清楚。
这与市场订单是一样的(在交易所)。
由以下人员添加
如果我们发送一个市场订单,那么当我们收到票据时,我们带着它去看历史,然后
我们去看历史,看看它发生了什么。你也可以看一下OnTradeTransaction
TRADE_TRANSACTION_HISTORY_ADD
那么 "如果OrderSend返回了票据,它就被执行 "呢?
我们终究是应该奔向历史,还是等待事件的发生?嗯,这就是这个主题的意义所在!!。
正确。我在 "票房 "中没有说什么?
我甚至发布了一个EA(针对交易所)作为例子
是的,总而言之,这不是很符合主题 )但感谢你的意见。
这是关于 "同步 "OrderSend在EA看到它对账户的影响之前就结束了(历史上没有交易,也没有头寸变化)。
而为了正常工作,我们不得不拿出拐杖,其形式是等待事件(这是一个非常方便的功能!但在这种情况下不是)或搜索历史(也有等待)。
的确,外汇有一个问题(我在外汇上运行了同一个专家顾问)。
但在异步模式(FOREX)下,它工作正常。
当然,每个人都会得到这个消息。但他们不会知道有人在一拍之前还没有收到同样的信息,也没有触发新的订单发送。
新的想法。
编写一个EA同步器。一旦作出OrderSend,数据就会被发送到这个EA,并等待它的回应。
虽然,与滑动变体的区别是相同的鸡蛋。总而言之,你的变体是最佳的,不幸的是。
与市场订单相同(在交易所)。
添加
如果发送的是市场订单,一旦我们收到票据,我们就会随着它进入历史,并
看看它发生了什么。
OrderSend()是一个绝对同步的函数--如果收到票据,一切都会执行。
下面是一个例子
已添加,这里是日志
https://www.mql5.com/ru/forum/38456/page85#comment_2888263
我感谢你提供的链接。但我的问题有点不同。相反,这不是一个问题,而是一个赞成当场检查订单状态而不等待OnTrade()事件处理的论点。
你一定没有看过这个例子的代码。
{
if(order_ticket>0)
{
if(OrderSelect(order_ticket))
{
RemoveOrderSyncMode(order_ticket);
}
else
{
Print(__FUNCTION__," Order not select! Ticket = ",order_ticket);
}
}
}
在同步模式(OrderSend())下,订单的删除应该是在来自于 "S "的响应之后。
SendOrserSyncMode函数,但它没有发生。
2016.10.14 02:18:20.292 交易'3941932': 取消订单失败 #102956267 买入限额 1.00 GBPUSD at 1.22374 [无效请求]
这里是错误所在。根据文件,如果我们收到了票据,那么订单就已经放在交易系统中了。
但它(在FOREX)没有做到,删除发生在RemoveOrderAsyncMode 函数的主体中, 即
在OnTradeTransaction中收到信息后
添加
为了回答最高领导人的问题,在使用OrderSend()发送订单后。
该订单可以在OntradeTransaction(OnTrade)中收到事件后被处理。
看来,开发商会解决这个问题。
添加
现在我看了FORTS - 这个问题也在那里
2016.10.17 18:45:19.081 Trades '1007932': accepted buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.081 Trades '1007932': buy limit 1.00 GAZR-12.16 at 12847 placed for execution
2016.10.17 18:45:19.091 Trades '1007932': order #52178167 buy limit 1.00 / 1.00 GAZR-12.16 at 12847 done in 17.440 ms
2016.10.17 18:45:19.091 Trades '1007932': failed cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847.00000 [Invalid request]
2016.10.17 18:45:19.091 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.098 Trades '1007932': accepted cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847
2016.10.17 18:45:19.099 Trades '1007932': cancel order #52178167 buy limit 1.00 GAZR-12.16 at 12847 placed for execution in 7.215 ms
2016.10.17 18:45:19.074 TestOrders (GAZR-12.16,M1) OnChartEvent Send Order Sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) SendOrderSyncMode Order sent in sync mode
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderSyncMode Order not sent (remove) in sync mode.
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_ADD
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_PLACED
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order plased done. Ticket = 52178167
2016.10.17 18:45:19.091 TestOrders (GAZR-12.16,M1) RemoveOrderAsyncMode Order sent (remove) in async mode
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.098 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order get ticket done. Ticket = 52178167
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10.17 18:45:19.099 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_DELETE
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Transaction type: TRADE_TRANSACTION_HISTORY_ADD
2016.10.17 18:45:19.108 TestOrders (GAZR-12.16,M1) OnTradeTransaction Order remove done. Ticket = 52178167
为了回答顶级交易者的问题,在使用OrderSend()发送一个订单后。
你可以在OntradeTransaction(OnTrade)中收到事件后对订单进行操作。
在同一符号上有两个EA的情况下?
是的,同一个符号上的两个EA。
{
ENUM_TRADE_REQUEST_ACTIONS action; // Тип выполняемого действия
ulong magic; // Штамп эксперта (идентификатор magic number)
ulong order; // Тикет ордера
string symbol; // Имя торгового инструмента
double volume; // Запрашиваемый объем сделки в лотах
double price; // Цена
double stoplimit; // Уровень StopLimit ордера
double sl; // Уровень Stop Loss ордера
double tp; // Уровень Take Profit ордера
ulong deviation; // Максимально приемлемое отклонение от запрашиваемой цены
ENUM_ORDER_TYPE type; // Тип ордера
ENUM_ORDER_TYPE_FILLING type_filling; // Тип ордера по исполнению
ENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действия
datetime expiration; // Срок истечения ордера (для ордеров типа ORDER_TIME_SPECIFIED)
string comment; // Комментарий к ордеру
ulong position; // Тикет позиции
ulong position_by; // Тикет встречной позиции
};
剔除 "错误 "的头寸、订单和交易。