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

 
prostotrader :

즐기다.

이것은 좋은 예입니다. 그런데 여기 저를 괴롭히는 질문이 있습니다. OnTradeTransaction()이 주문 처리 시 데이터를 반환하지 않으면 어떻게 됩니까? 글쎄, 그들은 어떻게 든 길을 잃을 수 있습니다. 서버가 보냈지만 터미널이 수락하지 않았습니다. 전송된 모든 주문의 100%에 대해 OnTradeTransaction() 함수에 대한 필요한 수의 호출을 수신하고 모든 유형의 트랜잭션 보고서가 터미널에 도달한다는 것이 얼마나 보장됩니까(저는 주로 transaction.type = TRADE_TRANSACTION_REQUEST에 관심이 있습니다).

결국 이 응답을 받지 못하면(예: 연결 끊김으로 인해) 플래그를 제거하지 않고 모든 것이 중지됩니다.

 
fxsaber :

나는 그것을 확인하지 않았지만 OrderSend 후에 모든 EA가 OnTradeTransaction에 대한 해당 이벤트를 수신할 수 있습니다.

그런 다음 목발없이 하나의 기호에 대한 여러 고문에 대해 모든 것이 결정됩니다.

확인했습니다! 그대로!
 
Oleg Shenker :

이것은 좋은 예입니다. 그런데 여기 저를 괴롭히는 질문이 있습니다. OnTradeTransaction()이 주문 처리 시 데이터를 반환하지 않으면 어떻게 됩니까? 글쎄, 그들은 어떻게 든 길을 잃을 수 있습니다. 서버가 보냈지만 터미널이 수락하지 않았습니다. 전송된 모든 주문의 100%에 대해 OnTradeTransaction() 함수에 대한 필요한 수의 호출을 수신하고 모든 유형의 트랜잭션 보고서가 터미널에 도달한다는 것이 얼마나 보장됩니까(저는 주로 transaction.type = TRADE_TRANSACTION_REQUEST에 관심이 있습니다).

결국 이 응답을 받지 못하면(예: 연결 끊김으로 인해) 플래그를 제거하지 않고 모든 것이 중지됩니다.

OnTradeTransaction 이벤트 이전에는 발생하지 않은 경우가 여러 번 있었습니다.

그래서 0.5초 주기로 타이머를 사용하여 주문 상태를 확인하는 함수를 작성했습니다.

구현은 일반적인 EA 코드를 복잡하게 하지만 인터넷을 통해 작업할 때 100% 보장은 없습니다.

모든 것이 시계처럼 작동합니다.

추가됨

여기에서 수표 구현에 대한 아이디어를 얻었습니다.

https://www.mql5.com/ru/blogs/post/557544

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2015.04.29
  • Mikhail Filimonov
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsyncМихаил | 23 апреля, 2015В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события TradeTransaction...
 
prostotrader :

OnTradeTransaction 이벤트 이전에는 발생하지 않은 경우가 여러 번 있었습니다.

그래서 0.5초 주기로 타이머를 사용하여 주문 상태를 확인하는 함수를 작성했습니다.

구현은 일반적인 EA 코드를 복잡하게 하지만 인터넷을 통해 작업할 때 100% 보장은 없습니다.

모든 것이 시계처럼 작동합니다.

추가됨

여기에서 수표 구현에 대한 아이디어를 얻었습니다.

https://www.mql5.com/ru/blogs/post/557544

그 사람이 열린 문을 뚫고 각 거래에 대한 특별한 마법 코드를 만드는 것 같습니다. 주문을 고유하게 식별할 수 있는 order_id가 있습니다.

아니면 내가 아이디어를 얻지 못했습니까?

 
Oleg Shenker :

그 사람이 열린 문을 뚫고 각 거래에 대한 특별한 마법 코드를 만드는 것 같습니다. 주문을 고유하게 식별할 수 있는 order_id가 있습니다.

아니면 내가 아이디어를 얻지 못했습니까?

예, order_id가 있지만 불행히도 때때로 이벤트가 OnTradeTransaction 에 오지 않습니다.

(개인적으로 나는 여러 번 겪었습니다)

그런 다음 order_id를 "푸시"할 위치는 무엇입니까?

추가됨

글쎄요, 오늘 서버 응답이 지연되었습니다.

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
 
prostotrader :

예, order_id가 있지만 불행히도 때때로 이벤트가 OnTradeTransaction 에 오지 않습니다.

(개인적으로 나는 여러 번 겪었습니다)

그런 다음 order_id를 "푸시"할 위치는 무엇입니까?

추가됨

자, 오늘 서버 응답이 지연되었습니다.

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...

다른 날 "매복"을 했습니다.

2016.12 . 23 15 : 04 : 02.865 TriArbTrader_8- 4 (EURGBP,H1)     1111 DealSell           3 orders are sent.
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Retcode = 10009 . Slippage = 1631 .
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Position is closed in 59699 mksec.
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Retcode = 10009 . Slippage = 1631 .
2016.12 . 23 15 : 04 : 02.924 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURUSD Position is closed in 59712 mksec.
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction GBPUSD Retcode = 10009 . Slippage = 1379 .
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction GBPUSD Position is closed in 127691 mksec.
2016.12 . 23 15 : 04 : 02.992 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction All reposts are checked. Direction = 0
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction Unexpected transaction request.
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURGBP Retcode = 10009 . Slippage = - 40993 .
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction EURGBP Position is closed in 1339448077 mksec.
2016.12 . 23 15 : 04 : 02.993 TriArbTrader_8- 4 (EURGBP,H1)     1111 OnTradeTransaction All reposts are checked. Direction = - 1

로그에 명확하게 기록된 3개의 주문이 전송되었습니다. 그 후 OnTradeTransactions() TRADE_TRANSACTION_TYPE 함수가 네 번 호출되었습니다.

기능 코드는 검사로 시작합니다.

void OnTradeTransaction ( const MqlTradeTransaction & transaction,
                         const MqlTradeRequest &     request,
                         const MqlTradeResult &      results)
   {
     if (transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL )
      {
       if (request.magic == ExpertMagic)
         {

즉, 지문이 있는 내부에는 자체 전문가 스탬프가 있는 TRADE_TRANSACTION_REQUIEST만 통과할 수 있습니다.

지원 서비스는 처음에 내가 두 명의 동일한 Expert Advisors(로그로 판단할 때 동일한 차트에 있음)가 있다는 것을 확신시키기 시작했습니다. 그런 다음 그들은 "바보야, 코드의 오류를 수정하십시오."라고 말했습니다.

요컨대 그들에 따르면 이것은 있을 수 없습니다. 그러나 로그에서 이벤트가 네 번 발생했음이 분명합니다.

 
prostotrader :

예, order_id가 있지만 불행히도 때때로 이벤트가 OnTradeTransaction 에 오지 않습니다.

(개인적으로 나는 여러 번 겪었습니다)

그런 다음 order_id를 "푸시"할 위치는 무엇입니까?

추가됨

글쎄요, 오늘 서버 응답이 지연되었습니다.

2016.12 . 28 14 : 04 : 56.442   (MXI- 3.17 ,M1)  CheckOrders: Задержка ответа сервера. Ожидание продолжается...
2016.12 . 28 14 : 04 : 56.443   (GOLD- 3.17 ,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...

그리고 왜 시세 표시기가 주문을 검색할 수 없는지 명확하지 않습니까? 결국 보낸 주문 중 어느 것이 TradeTransaction에 오지 않았는지 확인하는 것은 쉽습니다. 그런 다음 내역에서 이 티켓으로 주문 상태를 확인하세요.

개인적으로 시도한 것은 주문 내역에서 FILLED 상태의 주문만 있었습니다.

 
Oleg Shenker :

그리고 왜 시세 표시기가 주문을 검색할 수 없는지 명확하지 않습니까? 결국 보낸 주문 중 어느 것이 TradeTransaction에 오지 않았는지 확인하는 것은 쉽습니다. 그런 다음 내역에서 이 티켓으로 주문 상태를 확인하세요.

개인적으로 시도한 것은 주문 내역에서 FILLED 상태의 주문만 있었습니다.

예, 주문이 내역에 없을 수 있기 때문에(예 : 보류 중인 주문 등)

추가됨

그리고 코드가 잘못되었습니다.

 
prostotrader :

예, 주문이 내역에 없을 수 있기 때문에(예 : 보류 중인 주문 등)

추가됨

그리고 코드가 잘못되었습니다.

거기에 무슨 문제가 있습니까? 두 줄의 코드에서 얼마나 많은 실수를 할 수 있습니까?

 
Oleg Shenker :

거기에 무슨 문제가 있습니까? 두 줄의 코드에서 얼마나 많은 실수를 할 수 있습니까?

둘이 아니라 하나 :)

if (transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL )

TRADE_TRANSACTION_REQUEST는 OrderSendAsymc를 사용 하여 주문 티켓을 받을 때 필요합니다.