HistoryDealSelect

내역에서 적절한 함수를 통해 추가로 호출할 거래를 선택합니다. 함수가 성공적으로 완료되면 true가 반환됩니다. 함수가 실패하면 false가 반환됩니다. 에러에 대한 더 많은 사항에 대해서는 GetLastError()을 호출하십시오.

bool  HistoryDealSelect(
   ulong  ticket      // 거래 티켓
   );

매개 변수

ticket

[in]  거래 티켓.

반환값

성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

참고

주문, 포지션을 혼동하지 마십시오. 각 거래는 주문 실행의 결과이고 각 포지션은 하나 이상의 거래의 요약 결과입니다.

HistoryDealSelect()는 참조할 수 있는 거래 목록을 mql5-program에서 지우고 HistoryDealSelect()의 실행이 성공적으로 완료된 경우 단일 거래를 복제합니다. HistorySelect() 함수로 선택한 모든 거래를 수행해야 하는 경우 HistoryDealGetTicket()를 사용하는 것이 좋습니다.

예:

#define   TICKET    2620919264   // 예를 들어 터미널 계정 히스토리에서 가져온 알려진 거래의 티켓
 
long      ExtTicket=TICKET;      // 지정된 티켓을 스크립트의 테스트에 대한 매크로 대체 변수로 설정합니다.
                                 // 또는 EA의 OnTradeTransaction() 핸들러에서 거래를 처리합니다:
//+------------------------------------------------------------------+
//| Expert TradeTransaction handler                                  |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransactiontrans,
                        const MqlTradeRequestrequest,
                        const MqlTradeResultresult)
  {
   //--- 거래가 히스토리에 특정 거래를 추가하는 경우
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      //--- 티켓으로 거래를 선택하고 해당 데이터를 가져와서 저널에 거래 설명을 표시합니다.
      HistoryDealSelectProcess(trans.deal);
     }
  }
 
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                          |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 티켓으로 거래를 선택하고 해당 데이터를 가져오고 저널에 거래 설명을 표시합니다.
   HistoryDealSelectProcess(ExtTicket);
   /*
  결과:
   (Position ID #2645974677EURUSD Deal Out 0.10 Buy #2620919264 by order #2646028969 at 1.091782024.07.15 18:16:32.570
   */
  }
//+------------------------------------------------------------------+
//| 티켓별로 거래을 선택하고 저널에 거래 데이터를 인쇄합니다.               |
//+------------------------------------------------------------------+
void HistoryDealSelectProcess(const ulong deal_ticket)
  {
//--- deal_ticket에 지정된 티켓으로 과거 거래를 선택합니다.
   ResetLastError();
   if(!HistoryDealSelect(deal_ticket))
     {
      PrintFormat("HistoryDealSelect(%I64u) failed. Error %d"deal_ticketGetLastError());
      return;
     }
 
//--- 거래가 성공적으로 선택되면 해당 데이터를 가져오고 저널에 거래 설명을 표시합니다.
   ENUM_DEAL_TYPE    deal_type  = (ENUM_DEAL_TYPE)HistoryDealGetInteger(ExtTicketDEAL_TYPE);
   ENUM_DEAL_ENTRY   deal_entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(ExtTicketDEAL_ENTRY);
   ENUM_DEAL_REASON  deal_reason= (ENUM_DEAL_REASON)HistoryDealGetInteger(ExtTicketDEAL_REASON);
   long              deal_time  = HistoryDealGetInteger(ExtTicketDEAL_TIME_MSC);
   long              deal_order = HistoryDealGetInteger(ExtTicketDEAL_ORDER);
   long              deal_pos_idHistoryDealGetInteger(ExtTicketDEAL_POSITION_ID);
   string            deal_symbolHistoryDealGetString(ExtTicketDEAL_SYMBOL);
   double            deal_volumeHistoryDealGetDouble(ExtTicketDEAL_VOLUME);
   double            deal_price = HistoryDealGetDouble(ExtTicketDEAL_PRICE);
   int               digits     = (int)SymbolInfoInteger(deal_symbolSYMBOL_DIGITS);
   
   PrintFormat("(Position ID #%I64d) %s Deal %s %.2f %s #%I64u by order #%I64d at %.*f, %s",
               deal_pos_iddeal_symbolDealEntryDescription(deal_entry), deal_volume,
               DealTypeDescription(deal_type), ExtTicketdeal_orderdigitsdeal_price,
               TimeMscToString(deal_time));
  }
//+------------------------------------------------------------------+
//| 거래 타입 설명을 반환                                               |
//+------------------------------------------------------------------+
string DealTypeDescription(const ENUM_DEAL_TYPE type)
  {
   switch(type)
     {
      case DEAL_TYPE_BUY                     :  return("Buy");
      case DEAL_TYPE_SELL                    :  return("Sell");
      case DEAL_TYPE_BALANCE                 :  return("Balance");
      case DEAL_TYPE_CREDIT                  :  return("Credit");
      case DEAL_TYPE_CHARGE                  :  return("Additional charge");
      case DEAL_TYPE_CORRECTION              :  return("Correction");
      case DEAL_TYPE_BONUS                   :  return("Bonus");
      case DEAL_TYPE_COMMISSION              :  return("Additional commission");
      case DEAL_TYPE_COMMISSION_DAILY        :  return("Daily commission");
      case DEAL_TYPE_COMMISSION_MONTHLY      :  return("Monthly commission");
      case DEAL_TYPE_COMMISSION_AGENT_DAILY  :  return("Daily agent commission");
      case DEAL_TYPE_COMMISSION_AGENT_MONTHLY:  return("Monthly agent commission");
      case DEAL_TYPE_INTEREST                :  return("Interest rate");
      case DEAL_TYPE_BUY_CANCELED            :  return("Canceled buy deal");
      case DEAL_TYPE_SELL_CANCELED           :  return("Canceled sell deal");
      case DEAL_DIVIDEND                     :  return("Dividend operations");
      case DEAL_DIVIDEND_FRANKED             :  return("Franked (non-taxable) dividend operations");
      case DEAL_TAX                          :  return("Tax charges");
      default                                :  return("Unknown deal type: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| 포지션 변경 메서드 반환                                             |
//+------------------------------------------------------------------+
string DealEntryDescription(const ENUM_DEAL_ENTRY entry)
  {
   switch(entry)
     {
      case DEAL_ENTRY_IN      :  return("In");
      case DEAL_ENTRY_OUT     :  return("Out");
      case DEAL_ENTRY_INOUT   :  return("Reverce");
      case DEAL_ENTRY_OUT_BY  :  return("Out by");
      case DEAL_ENTRY_STATE   :  return("Status record");
      default                 :  return("Unknown deal entry: "+(string)entry);
     }
  }
//+------------------------------------------------------------------+
//| 말리세컨드로 시간을 반환                                            |
//+------------------------------------------------------------------+
string TimeMscToString(const long time_mscint flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS)
  {
   return(TimeToString(time_msc/1000flags) + "." + IntegerToString(time_msc %10003, '0'));
  }

참고 항목

HistorySelect(), HistoryDealGetTicket(), Deal Properties