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가 티켓을 반환하면 실행됩니다"는 어떻습니까?
여전히 역사를 마주해야 합니까, 아니면 이벤트를 기다려야 합니까? 글쎄, 그것이 이 스레드에 관한 것입니다!
바르게. 그리고 내가 "현금 데스크"에 말하지 않은 것은 무엇입니까?
어드바이저도 예시로 올렸어요 (거래소용)
예, 일반적으로 모든 것이 그다지 관련이 없습니다.) 하지만 참여해 주셔서 감사합니다.
문제는 "동기식" OrderSend가 고문이 계정에 미치는 영향을 확인하기 전에 종료된다는 것입니다(내역에 거래가 없고 위치가 변경되지 않음).
그리고 정상적인 작동을 위해서는 이벤트를 기다리는 형태(매우 편리한 기능! 하지만 이 경우는 아님) 또는 기록 검색(기다림 포함)의 형태로 목발을 가져와야 합니다.
실제로 FOREX에 문제가 있습니다(FOREX에 동일한 어드바이저 출시).
그러나 비동기 모드(FOREX)에서는 모든 것이 잘 작동합니다.
물론 모든 사람이 메시지를 받게 됩니다. 그러나 그들은 누군가가 이전에 동일한 메시지를 받지 못했고 새로운 주문 보내기를 시작하지 않았다는 것을 알지 못할 것입니다.
새로운 생각.
조언자 - 동기화 장치를 작성 하십시오. OrderSend가 이루어지면 데이터가 해당 EA로 전송되고 응답할 때까지 기다립니다.
그러나 슬립 버전과의 차이점은 동일한 계란입니다. 일반적으로 불행히도 귀하의 옵션이 가장 좋습니다.
시장가 주문과 동일(거래소에서)
추가됨
시장 주문이 전송되면 티켓을 받으면 기록으로 이동하고
그에게 무슨 일이 일어 났는지보십시오.
OrderSend()는 절대 동기 함수입니다. 티켓을 받으면 모든 것이 충족됩니다.
아래는 예시입니다
추가되었으며 여기에 로그가 있습니다.
https://www.mql5.com/en/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())에서 주문을 삭제하는 것은
SendOrserSyncMode 함수 , 그러나 이것은 발생하지 않았습니다.
2016.10 . 십사 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)에서 이벤트를 수신한 후 주문을 조작할 수 있습니다.
하나의 심볼에 두 명의 Expert Advisor가 있는 경우?
예, 하나의 기호에 두 명의 고문이 있습니다.
{
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; // Тикет встречной позиции
};
"비소유" 포지션, 주문 및 거래를 선별합니다.