요새. 실행 질문 - 페이지 15

 

좋은 오후, 레나트!

FORTS(실제)의 다음 상황에 대해 말씀해 주시겠습니까?

유리에는 8권의 가격이 있습니다. 이 권은 두 명의 기자가 작성했습니다(각 4명은 동일한 가격)

지정가 주문으로 이 볼륨(8)을 구매(판매)합니다.

다음이 발생합니다.

1. 주문이 완전히 채워 지면 OnTradeTransaction 에서 다음을 얻습니다.

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED

2. 주문이 두 번째 상대방의 볼륨으로 채워지면 OnTradeTransaction에서 다음을 얻습니다.

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

3. 주문이 첫 번째 상대방의 볼륨으로 채워지면 OnTradeTransaction에서 다음을 얻습니다.

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED

왜요? 실제로 두 번째와 세 번째 경우에는 명령이 부분적으로 집행되었습니다.

2015.03.02 17:10:26.204 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1
2015.03.02 17:10:26.234 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1 placed for execution in 23 ms
2015.03.02 17:10:26.254 Trades  'xxxxx': deal #9801184 sell 4.00 GOLD-6.15 at 1222.1 done (based on order #11413991)

2015.03.02 17:10:26.254 Forts_trader (GOLD-6.15,H1)     OnTradeTransaction: ордер удалён. Билет = 11413991


 

나는 이 주문에 대해 수표를 썼고, 결과는 다음과 같습니다.

이것은 터미널의 1060 빌드와 서버의 1035 빌드에서 발생했습니다.

저녁(메인)청산 후 단말기가 1085로 업데이트 되었지만,

원인이 밝혀질 때까지 거래를 중단했습니다.

데모(1085 - 1085)에서 오류를 재현할 수 없습니다(주문서에 빠른 변경 없음).

 

그의 모든 명령의 역사를 "상승"시켰습니다.

1035, 1060 및 1085 빌드에 오류가 있습니다.

 

첫 번째 경우 주문은 하나의 거래로 완전히 채워지고 채워지지 않은 잔액은 인출되지 않습니다. 주문이 가득 찼습니다. 로그에는 귀하가 제공한 항목이 하나 있습니다.

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED


두 번째 경우에는 주문이 부분적으로 실행되고 미실행 잔액이 인출됩니다. 이것은 주문 작성 정책을 설정했기 때문에 발생합니다. - ORDER_FILLING_IOC :

주문에 지정된 한도 내에서 시장에서 사용할 수 있는 최대 수량에 대해 거래를 하기로 합의하는 것을 의미합니다. 전체 실행이 불가능한 경우, 가용 수량만큼 주문이 실행되며 , 채워지지 않은 주문 수량은 취소 됩니다.


귀하의 경우 주문은 1222.1의 가격으로 8 로트에 대한 것이었습니다. 증권 거래소에서 주문할 당시 1222.1 이하 가격의 카운터 오더 수량은 4랏이었습니다. 그 결과 4개의 랏이 하나의 딜 형태로 체결되었습니다(4개의 랏이 하나의 카운터 오더로 표현되었기 때문입니다). 나머지 주문은 철회되었습니다. 주문이 취소되었습니다.

귀하가 제공한 로그에 따르면:

부분적으로 채워진 주문:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

그런 다음 나머지가 제거되었습니다. 취소된 주문:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED
 
Renat :

첫 번째 경우 주문은 하나의 거래로 완전히 채워지고 채워지지 않은 잔액은 인출되지 않습니다. 주문이 가득 찼습니다. 로그에는 귀하가 제공한 항목이 하나 있습니다.



두 번째 경우에는 주문이 부분적으로 실행되고 미실행 잔액이 인출됩니다. 이것은 주문 작성 정책을 설정했기 때문에 발생합니다. - ORDER_FILLING_IOC :

주문에 지정된 한도 내에서 시장에서 사용할 수 있는 최대 수량에 대해 거래를 하기로 합의하는 것을 의미합니다. 전체 실행이 불가능한 경우, 가용 수량만큼 주문이 실행되며 , 채워지지 않은 주문 수량은 취소 됩니다.


귀하의 경우 주문은 1222.1의 가격으로 8 로트에 대한 것이었습니다. 증권 거래소에서 주문할 당시 1222.1 이하 가격의 카운터 오더 수량은 4랏이었습니다. 그 결과 4개의 랏이 하나의 딜 형태로 체결되었습니다(4개의 랏이 하나의 카운터 오더로 표현되었기 때문입니다). 나머지 주문은 철회되었습니다. 주문이 취소되었습니다.

귀하가 제공한 로그에 따르면:

부분적으로 채워진 주문:

그런 다음 나머지가 제거되었습니다. 취소된 주문:

그렇다면 DOCUMENTATION을 어떻게 해석해야 할까요?

요점은 OnTradeTransaction이 ORDER_STATE_CANCELED일 때 거래( TRADE_TRANSACTION_DEAL_ADD )에 대한 메시지를 받지 않는다는 것입니다 !

하지만 거래가 있었습니다!

 
Mikalas :

그렇다면 DOCUMENTATION을 어떻게 해석해야 할까요?

주문이 철회되었습니다 . 클라이언트는 집으로 보낼 수 있습니다.
 
Renat :
주문이 철회되었습니다 . 클라이언트는 집으로 보낼 수 있습니다.

요점은 OnTradeTransaction이 ORDER_STATE_CANCELED일 때 거래( TRADE_TRANSACTION_DEAL_ADD )에 대한 메시지를 받지 않는다는 것입니다 !

하지만 거래가 있었습니다!

그리고 PARTIAL(이것은 이벤트 개발을 위한 옵션 중 하나)을 어디에서 보았습니까? 취소만

그리고 기록에서 CANCELLED로 저장됩니다(그림 참조).

 

좋은 오후입니다, 레나트!

부분적으로 채워진 주문을 ORDER_STATE_CANCELED 주문 으로 기록에 저장하는 것이 옳다고 생각하십니까?

그리고 안에   OnTradeTransaction은 부분적으로 실행된 주문의 거래에 대한 확인을 받지 않아야 합니까?

플랫폼 작업의 현재 논리가 그대로 유지될 것인지, 아니면 가까운 장래에 변경할 준비가 되셨습니까?

 
kond777 :

좋은 오후, 레나트!

부분적으로 채워진 주문을 ORDER_STATE_CANCELED 주문 으로 기록에 저장하는 것이 옳다고 생각하십니까?

그리고 안에   OnTradeTransaction은 부분적으로 실행된 주문의 거래에 대한 확인을 받지 않아야 합니까?

플랫폼 작업의 현재 논리가 그대로 유지될 것인지, 아니면 가까운 장래에 변경할 준비가 되셨습니까?

직접 확인하셨습니까 아니면 Mikalas의 불완전한 설명에 반응한 것입니까? 순서는 결국 IOC 였습니다.

우리는 우리 측의 행동을 다시 확인했습니다.

1. "MQL5 조리법 - TradeTransaction 이벤트 처리" 기사에서 Expert Advisor를 설치했습니다.

2. 저액량 계기 SILV-3.15에 IOC 를 주문했습니다. 이 가격에 1랏만 있음에도 불구하고 주문은 16.48의 가격으로 11랏을 판매하기 위해 올려졌습니다.

다음을 얻었습니다.

터미널에서:


주문이 "취소됨" 상태라는 사실 외에도 요청된 11개 중 1개 로트가 채워진 것을 볼 수 있습니다. 이는 올바른 동작입니다.

전문가 로그에서:

2015.03.03 16:32:56.022 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2015.03.03 16:32:56.173 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.325 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2015.03.03 16:32:56.477 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.628 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD   <====== транзакция о сделке пришла
2015.03.03 16:32:56.779 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.930 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_DELETE
2015.03.03 16:32:57.082 tradeprocessor (SILV-3.15, H1 )   Тип торговой транзакции: TRADE_TRANSACTION_HISTORY_ADD

저것들. 거래 거래가 OnTradeTransaction()에 왔습니다. 거래가 오지 않았다면 터미널에서 거래를 전혀 보지 못했을 것입니다. TRADE_TRANSACTION_DEAL_ADD 거래가 실제로 오지 않는지 확인하십시오. Expert Advisor의 행동을 위의 Expert Advisor가 제안한 행동과 비교하십시오.

 

좋은 아침입니다 레나트!

OnTradeTransaction 이벤트의 도착을 보장 하지 않으므로 오지 않았습니다 (TRADE_TRANSACTION_DEAL_ADD).

그리고 TRADE_TRANSACTION_HISTORY_ADD 이벤트가 도착했을 때 주문 상태는   ORDER_STATE_CANCELED

다음은 "다리가 자랐습니다."입니다.

제 생각에는 주문(어떤 실행이든 상관없이)이 부분적으로 실행되면 그 상태는

기록에 ORDER_STATE_PARTIAL로 있어야 합니다.