본문 바로가기
트레이딩

메타트레이더. MQL4. OrderSend error 130. 해결방법.

by 리치굿맨 2018. 7. 22.


 

개요

 

MQL4 의 주문함수 OrderSend 실행시 정상적으로 접수되지 못하고 실패하고 오류번호 130 반환 되는 경우들 각각의 원인 및 해결책 정리. 

참고 : 함수 OrderSend() 상세보기 -> http://igotit.tistory.com/1749 의 OrderSend 설명부.



 
 


 



 

오류 원인 1 : Stop Loss, Take Profit 가격 제한에 의한 OrderSend 실패

 
 

거래 브로커에서 지정되어 있는 최소폭 Stops level 이하의 가격으로 설정하면 OrderSend 실패한다. 

메타트레이더에서 종목별 Stops level 확인방법 및 개념 상세보기 : http://igotit.tistory.com/1754  의 항목 중 Stops level 부분 볼것. 


동영상. 

- OrderSend error 130 by Stop Loss, Take Profit range fault.

- 본 예에서는 OrderSend 함수의 인자 중 Stop Loss 값과 Take Profit 값이 contract specification 에서의 Stops level 이하인 값으로 설정되어 OrderSend 실패하는 상황. 




해결책. 


동영상. 

- 상기 오류 상황에서 Stop Loss 값과 Take Profit 값을 Stops level 보다 큰 값을 지정하여 OrderSend 오류 해결하여 정상 주문 수행되게 함. 




 


 



 

오류 원인 2 : 시장가 주문에서 손절,익절 비허용 브로커에 의한 OrderSend 실패

 
 
시장가 주문시에는 손절, 익절을 허용하지 않는 브로커(ECN 브로커들이 전부 이럼)가 있다. 


해결책. 

1. 시장가 주문하려면 손절, 익절 가격을 0으로 설정해서 OrderSend  함수 호출한다. 
- 예 : OrderSend(Symbol(),OP_BUY,1,Ask,10,0,0))
- 본 주문체결된 주문의 손절, 익절 주문은 설정되지 않는다.

2. 상기1 주문의 손절, 익절 주문 즉시 설정되게 하는 법. 
- 시장가 주문 직후 주문 수정함수인 OrderModify 호출하여 손절, 익절 주문 가능하다. 

코드예. 

 

 int order_id; 

 bool bRsltOrderModify; 


 order_id = OrderSend(Symbol(),OP_BUY,1,Ask,10,0,0)); 


 if(order_id > 0) // 시장가 주문 성공. 

 {

   bRsltOrderModify = OrderModify(order_id, 0, Ask-0.001, Ask+0.001);

   if(!bRsltOrderModify)

  {

     Alert("Fail OrderModify : ORDER ID = ", order_id); 

  }

 }



 


 


 

오류 원인 3 :  가격의 실수 자리수 오류.  

 

가격의 실수자리수가 4자리, 5자리 로 딱 떨어지지 않게 처리되어 주문 오류 발생하는 경우가 있다. 

해결책. 

가격의 자리수를 강제로 확정짓는 NormailizeDouble(가격, Digits); 호출하여 반환값을 주문함수의 가격에 입력한다. 
 
 


 






본 글 포함된 상위 정리글.

 

메타트레이더 4 체계정리. 활용법/지식 :  http://igotit.tistory.com/1756


 






///1753

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT