OrderSend를 사용하여 MT5에서 올바르게 작동하는 방법 - 페이지 5

 
Andrey Khatimlianskii :

나는 그림을 보았다. 모든 것이 교환에 대해 명확합니다(지정가 주문 포함).

당신은 외환 및 시장 주문에 대해 모릅니다. 공습 경보 해제.

시장가 주문과 동일(거래소에서)

추가됨

시장 주문이 전송되면 티켓을 받으면 기록으로 이동하고

그에게 무슨 일이 일어 났는지보십시오. OnTradeTransaction 에서도 볼 수 있습니다.

 TRADE_TRANSACTION_HISTORY_ADD
 
Andrey Khatimlianskii :

그러나 "OrderSend가 티켓을 반환하면 실행됩니다"는 어떻습니까?

여전히 역사를 마주해야 합니까, 아니면 이벤트를 기다려야 합니까? 글쎄, 그것이 이 스레드에 관한 것입니다!

바르게. 그리고 내가 "현금 데스크"에 말하지 않은 것은 무엇입니까?

어드바이저도 예시로 올렸어요 (거래소용)

 
Andrey Khatimlianskii :

예, 일반적으로 모든 것이 그다지 관련이 없습니다.) 하지만 참여해 주셔서 감사합니다.

문제는 "동기식" OrderSend가 고문이 계정에 미치는 영향을 확인하기 전에 종료된다는 것입니다(내역에 거래가 없고 위치가 변경되지 않음).

그리고 정상적인 작동을 위해서는 이벤트를 기다리는 형태(매우 편리한 기능! 하지만 이 경우는 아님) 또는 기록 검색(기다림 포함)의 형태로 목발을 가져와야 합니다.

실제로 FOREX에 문제가 있습니다(FOREX에 동일한 어드바이저 출시).

 2016.10 . 14 02 : 18 : 20.229 Trades   '3941932' : buy limit 1.00 GBPUSD at 1.22374
2016.10 . 14 02 : 18 : 20.276 Trades   '3941932' : accepted buy limit 1.00 GBPUSD at 1.22374
2016.10 . 14 02 : 18 : 20.292 Trades   '3941932' : order # 102956267 buy limit 1.00 / 1.00 GBPUSD at market done in 62.769 ms
2016.10 . 14 02 : 18 : 20.292 Trades   '3941932' : failed cancel order # 102956267 buy limit 1.00 GBPUSD at 1.22374 [Invalid request]
2016.10 . 14 02 : 18 : 20.292 Trades   '3941932' : cancel order # 102956267 buy limit 1.00 GBPUSD at 1.22374
2016.10 . 14 02 : 18 : 20.354 Trades   '3941932' : accepted cancel order # 102956267 buy limit 1.00 GBPUSD at 1.22374
2016.10 . 14 02 : 18 : 20.354 Trades   '3941932' : cancel # 102956267 buy limit 1.00 GBPUSD at market done in 66.823 ms

2016.10 . 14 02 : 18 : 20.229 TestOrders (GBPUSD,H1)  OnChartEvent Send Order Sync mode
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  SendOrderSyncMode Order sent in sync mode
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  RemoveOrderSyncMode Order not sent (remove) in sync mode.
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_ADD
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  OnTradeTransaction Order update state = ORDER_STATE_PLACED
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  OnTradeTransaction Order plased done. Ticket = 102956267
2016.10 . 14 02 : 18 : 20.292 TestOrders (GBPUSD,H1)  RemoveOrderAsyncMode Order sent (remove) in async mode
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_DELETE
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_HISTORY_ADD
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Order remove done. Ticket = 102956267
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10 . 14 02 : 18 : 20.354 TestOrders (GBPUSD,H1)  OnTradeTransaction Order get ticket done. Ticket = 102956267
 

그러나 비동기 모드(FOREX)에서는 모든 것이 잘 작동합니다.

 2016.10 . 14 02 : 31 : 26.145 Trades   '3941932' : sell limit 1.00 GBPUSD at 1.22604
2016.10 . 14 02 : 31 : 26.206 Trades   '3941932' : accepted sell limit 1.00 GBPUSD at 1.22604
2016.10 . 14 02 : 31 : 26.208 Trades   '3941932' : order # 102958649 sell limit 1.00 / 1.00 GBPUSD at market done in 63.027 ms
2016.10 . 14 02 : 31 : 26.208 Trades   '3941932' : cancel order # 102958649 sell limit 1.00 GBPUSD at 1.22604
2016.10 . 14 02 : 31 : 26.271 Trades   '3941932' : accepted cancel order # 102958649 sell limit 1.00 GBPUSD at 1.22604
2016.10 . 14 02 : 31 : 26.273 Trades   '3941932' : cancel # 102958649 sell limit 1.00 GBPUSD at market done in 64.700 ms

2016.10 . 14 02 : 31 : 26.145 TestOrders (GBPUSD,H1)  OnChartEvent Send Order Acync mode
2016.10 . 14 02 : 31 : 26.145 TestOrders (GBPUSD,H1)  SendOrderAsyncMode Order sent in async mode
2016.10 . 14 02 : 31 : 26.207 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_ADD
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  OnTradeTransaction Order get ticket done. Ticket = 102958649
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  OnTradeTransaction Order update state = ORDER_STATE_PLACED
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  OnTradeTransaction Order plased done. Ticket = 102958649
2016.10 . 14 02 : 31 : 26.208 TestOrders (GBPUSD,H1)  RemoveOrderAsyncMode Order sent (remove) in async mode
2016.10 . 14 02 : 31 : 26.272 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_UPDATE
2016.10 . 14 02 : 31 : 26.272 TestOrders (GBPUSD,H1)  OnTradeTransaction Order update state = ORDER_STATE_REQUEST_CANCEL
2016.10 . 14 02 : 31 : 26.272 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_ORDER_DELETE
2016.10 . 14 02 : 31 : 26.273 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_REQUEST
2016.10 . 14 02 : 31 : 26.273 TestOrders (GBPUSD,H1)  OnTradeTransaction Order get ticket done. Ticket = 102958649
2016.10 . 14 02 : 31 : 26.273 TestOrders (GBPUSD,H1)  OnTradeTransaction Transaction type: TRADE_TRANSACTION_HISTORY_ADD
2016.10 . 14 02 : 31 : 26.273 TestOrders (GBPUSD,H1)  OnTradeTransaction Order remove done. Ticket = 102958649
 
Andrey Khatimlianskii :
물론 모든 사람이 메시지를 받게 됩니다. 그러나 그들은 누군가가 이전에 동일한 메시지를 받지 못했고 새로운 주문 보내기를 시작하지 않았다는 것을 알지 못할 것입니다.

새로운 생각.

조언자 - 동기화 장치를 작성 하십시오. OrderSend가 이루어지면 데이터가 해당 EA로 전송되고 응답할 때까지 기다립니다.

그러나 슬립 버전과의 차이점은 동일한 계란입니다. 일반적으로 불행히도 귀하의 옵션이 가장 좋습니다.

 
prostotrader :

시장가 주문과 동일(거래소에서)

추가됨

시장 주문이 전송되면 티켓을 받으면 기록으로 이동하고

그에게 무슨 일이 일어 났는지보십시오.

CTrade::ResultDeal() 이 0을 반환하고 CTrade::ResultOrder()가 0을 반환할 때 이론적으로 가능합니까? 예를 들어 TRADE_RETCODE_TIMEOUT이 있습니다.
 
prostotrader :

OrderSend()는 절대 동기 함수입니다. 티켓을 받으면 모든 것이 충족됩니다.

아래는 예시입니다

추가되었으며 여기에 로그가 있습니다.

https://www.mql5.com/en/forum/38456/page85#comment_2888263

링크 주셔서 감사합니다. 하지만 질문은 조금 달랐다. 오히려 질문이 아니라 OnTrade() 이벤트가 처리될 때까지 기다리지 않고 그 자리에서 주문 현황을 확인하자는 주장이었다.
 
Oleg Shenker :
링크 주셔서 감사합니다. 하지만 질문은 조금 달랐다. 오히려 질문이 아니라 OnTrade() 이벤트가 처리될 때까지 기다리지 않고 그 자리에서 주문 현황을 확인하자는 주장이었다.

예제 코드를 보지 않았습니다.

if (SendOrderSyncMode())
           {
             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.074 Trades   '1007932' : buy limit 1.00 GAZR- 12.16 at 12847
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
 
prostotrader :

토픽 스타터의 질문에 답하고, OrderSend() 명령어로 주문을 보낸 후,

OntradeTransaction(OnTrade)에서 이벤트를 수신한 후 주문을 조작할 수 있습니다.

하나의 심볼에 두 명의 Expert Advisor가 있는 경우?
 
fxsaber :
하나의 심볼에 두 명의 Expert Advisor가 있는 경우?

예, 하나의 기호에 두 명의 고문이 있습니다.

struct MqlTradeRequest
  {
   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;       // Тикет встречной позиции
  };

"비소유" 포지션, 주문 및 거래를 선별합니다.

사유: