OrderCheck

OrderCheck() 함수는 필요한 거래 작업을 실행할 충분한 자금이 있는지 확인합니다. 검사 결과는 MqlTradeCheckResult 구조의 필드에 배치됩니다.

bool  OrderCheck(
   MqlTradeRequest&       request,      // 요청 구조
   MqlTradeCheckResult&   result        // 결과 구조
   );

매개 변수

요청

[in]  필요한 거래 작업을 설명하는 MqlTradeRequest 유형의 구조에 대한 포인터.

결과

[in,out]  검사 결과가 배치될 MqlTradeCheckResult 유형의 구조에 대한 포인터.

반환값

자금이 작업에 충분하지 않거나 파라미터가 잘못 입력되면 함수는 False를 반환합니다. 구조의 기본 검사(포인터 검사)에 성공하면 true를 반환합니다. 그러나 이것은 요청된 거래 작업이 성공적으로 실행될 것이라는 징후는 아닙니다.. 함수 실행 결과에 대한 자세한 설명은 결과 구조 필드를 분석하십시오.

오류에 대한 정보를 얻으려면 GetLastError() 함수를 호출하십시오.

예:

#define   DEVIATION     5              // 가격에서 허용된 편차
#define   VOLUME        1.0            // 주문 볼륨
#define   EXPERT_MAGIC  123            // MagicNumber
#define   DIRECTION     ORDER_TYPE_BUY // 진입한 가격 방향 (ORDER_TYPE_BUY or ORDER_TYPE_SELL)
 
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 요청, 확인 및 결과 구조를 선언하고 초기화
   MqlTradeRequest     request={};
   MqlTradeCheckResult check  ={};
   MqlTradeResult      result ={};
   
//---거래 요청 매개변수 준비
   PrepareRequest(_SymbolDIRECTIONVOLUMErequest);
   
//--- 거래 요청 매개변수 확인
   ResetLastError();
   bool res=OrderCheck(requestcheck);
   if(!res)
     {
      PrintFormat("Trade request verification completed with error %d\nServer retcode: %u, comment: %s"GetLastError(), check.retcodecheck.comment);
      return;
     }
     
//--- 거래 요청 확인이 성공했습니다 - 거래 요청 확인 구조 필드에 대한 설명을 표시
   Print("Trade request verification completed successfully");
   MqlTradeCheckResultPrint(check14);
   
//--- 거래 요청 전송
   if(!OrderSend(requestresult))
      Print("OrderSend error "GetLastError());    // 요청을 보낼 수 없으면 오류 코드를 표시
      
//--- 운용에 대한 정보
   PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u"result.retcoderesult.dealresult.order);
   /*
   클라이언트 터미널에서 자동 거래가 비활성화 된 결과
   Trade request verification completed with error 4752
   Server retcode10027commentAutoTrading disabled by client
   
   자동 거래를 활성화하고 폐장한 시장에서 다시 확인
   Experts   automated trading is enabled
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       1104.79 USD
   Margin free:  9674.71 USD
   Margin level975.71 %
   Comment:      Done
   OrderSend error 4756
   Trade request resultretcode=10018deal=0order=0
   
   시장에서 확인
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       110.46 USD
   Margin free:  10669.04 USD
   Margin level9758.74 %
   Comment:      Done
   Trade request resultretcode=10009deal=2777010968order=2802818813
   */
  }
//+------------------------------------------------------------------+
//| 거래 요청을 위한 매개변수 준비                                       |
//+------------------------------------------------------------------+
void PrepareRequest(const string symbolconst ENUM_ORDER_TYPE order_typeconst double volumeMqlTradeRequest &request)
  {
   ENUM_ORDER_TYPE type=(DIRECTION !=ORDER_TYPE_BUY ? ORDER_TYPE_SELL : DIRECTION);
   double price=(DIRECTION==ORDER_TYPE_BUY ? SymbolInfoDouble(Symbol(), SYMBOL_ASK) : SymbolInfoDouble(Symbol(), SYMBOL_BID));
//--- 매개 변수 요청
   request.action    = TRADE_ACTION_DEAL// 거래 운영 유형
   request.symbol    = symbol;            // 심볼
   request.volume    = volume;            // 볼륨
   request.type      = type;              // 주문 유형
   request.price     = price;             // 시가
   request.deviation = DEVIATION;         // 가격에서 허용된 편차
   request.magic     = EXPERT_MAGIC;      // 주문 매직넘버
  }
//+------------------------------------------------------------------+
//| 거래 요청 필드 출력                                                 |
//| 저널에서 결과 검증                                                  |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &checkconst uint header_width=0)
  {
//--- 계좌 통화와 계좌 통화의 소수 자릿수를 획득
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   int    digits  =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
   
//--- 헤더 텍스트와 헤더 필드의 너비를 정의합니다.
//--- 헤더 너비가 0과 같은 함수에 전달되면 너비는 헤더 줄 크기 + 1이 됩니다.
   string header="Retcode:";
   uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- 저널에 지정된 너비의 헤더와 함께 반환 코드를 표시
   PrintFormat("%-*s%-u"wheadercheck.retcode);
   
//--- 저널에서 거래 작업을 실행한 후 잔액 값을 표시
   header="Balance:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.balancecurrency);
   
//--- 저널에서 거래 작업을 실행한 후 자산 가치를 표시
   header="Equity:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.equitycurrency);
      
//--- 저널에서 거래 작업을 실행한 후 유동 이익 값을 표시
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.profitcurrency);      
      
//--- 필요한 거래 작업에 필요한 마진 금액을 저널에 표시
   header="Margin:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margincurrency);      
      
//--- 거래 작업을 수행한 후 남은 자산 가치를 저널에 표시
   header="Margin free:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margin_freecurrency);      
      
//--- 저널에서 필요한 거래 작업을 완료한 후 설정할 마진 수준을 표시
   header="Margin level:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.2f %%"wheadercheck.margin_level);      
      
//--- 응답 코드에 대한 코멘트와 오류 설명을 저널에 표시
   header="Comment:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-s"wheadercheck.comment);      
  }

참고 항목

OrderSend(), Trade Operation Types, Trade Request Structure, Structure of Request Check Results, Structure of a Trade Request Result

OSZAR »