//+------------------------------------------------------------------+ //| 스크립트 프로그램 시작 함수 | //+------------------------------------------------------------------+ void OnStart() { //--- 모든 계정 주문 목록에 의한 루프 int total=OrdersTotal(); for(int i=0; i<total; i++) { //--- 루프 인덱스를 통해 리스트에서 주문 티켓 가져오기 ulong ticket=OrderGetTicket(i); if(ticket==0) continue; //--- 주문 유형을 가져오고 선택한 주문의 실제 속성 목록에 대한 헤더를 표시합니다. string type=OrderTypeDescription((ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE)); PrintFormat("Integer properties of an active pending order %s #%I64u:", type, ticket); //--- 헤더 아래에서 선택한 주문의 모든 정수 속성을 인쇄 OrderPropertiesIntegerPrint(17); } /* 결과: Integer properties of an active pending order Buy Limit #2812945317: Ticket: 2812945317 Time setup: 2024.09.04 19:17:16 Type: Buy Limit State: Placed Time expiration: 0 Time done: 0 Time setup msc: 2024.09.04 19:17:16.686 Time done msc: 0 Type filling: Return Type time: Time GTC Magic: 0 Reason: Client Position ID: 0 Position By ID: 0 */ } //+------------------------------------------------------------------+ //| 저널에서 선택한 주문의 정수 속성 표시 | //+------------------------------------------------------------------+ void OrderPropertiesIntegerPrint(const uint header_width=0) { uint w=0; string header=""; long value=0; //--- 주문 티켓을 저널에 표시 OrderPropertyPrint("Ticket:", header_width, ORDER_TICKET); //--- 주문 시간을 저널에 표시 OrderPropertyPrint("Time setup:", header_width, ORDER_TIME_SETUP); //--- 주문 유형을 저널에 표시 OrderPropertyPrint("Type:", header_width, ORDER_TYPE); //--- 주문 상태를 저널에 표시 OrderPropertyPrint("State:", header_width, ORDER_STATE); //--- 주문 유효 기간을 저널에 표시 OrderPropertyPrint("Time expiration:", header_width, ORDER_TIME_EXPIRATION); //--- 주문 실행/만료 시간을 저널에 표시 OrderPropertyPrint("Time done:", header_width, ORDER_TIME_DONE); //--- 1970년 1월 1일 이후 실행 명령을 내린 시간을 밀리초 단위로 저널에 표시 OrderPropertyPrint("Time setup msc:", header_width, ORDER_TIME_SETUP_MSC); //--- 1970년 1월 1일 이후 주문 실행/만료 시간을 밀리초 단위로 저널에 표시합니다. OrderPropertyPrint("Time done msc:", header_width, ORDER_TIME_DONE_MSC); //--- 실행 유형을 저널의 잔여로 표시합니다. OrderPropertyPrint("Type filling:", header_width, ORDER_TYPE_FILLING); //--- 주문 수명을 저널에 표시 OrderPropertyPrint("Type time:", header_width, ORDER_TYPE_TIME); //--- 주문을 수행한 EA의 ID를 저널에 표시 OrderPropertyPrint("Magic:", header_width, ORDER_MAGIC); //--- 주문 이유 또는 출처를 저널에 표시 OrderPropertyPrint("Reason:", header_width, ORDER_REASON); //--- 실행 중 주문에 설정된 포지션 ID를 저널에 표시 OrderPropertyPrint("Position ID:", header_width, ORDER_POSITION_ID); //--- 저널에 ORDER_TYPE_CLOSE_BY 유형 주문에 대한 반대 포지션 ID를 표시 OrderPropertyPrint("Position By ID:", header_width, ORDER_POSITION_BY_ID); } //+------------------------------------------------------------------+ //| 저널에 주문 정수 속성 값을 표시 | //+------------------------------------------------------------------+ void OrderPropertyPrint(const string header, uint header_width, ENUM_ORDER_PROPERTY_INTEGER property) { string svalue=""; long lvalue=0; if(!OrderGetInteger(property, lvalue)) PrintFormat("Cannot get property %s, error=%d", EnumToString(property), GetLastError()); else { switch(property) { case ORDER_TICKET : case ORDER_MAGIC : case ORDER_POSITION_ID : case ORDER_POSITION_BY_ID : svalue=(string)lvalue; break; case ORDER_TIME_SETUP : case ORDER_TIME_EXPIRATION : case ORDER_TIME_DONE : svalue=(lvalue!=0 ? TimeToString((datetime)lvalue, TIME_DATE|TIME_MINUTES|TIME_SECONDS) : "0"); break; case ORDER_TIME_SETUP_MSC : case ORDER_TIME_DONE_MSC : svalue=(lvalue!=0 ? TimeMscToString(lvalue) : "0"); break; case ORDER_TYPE : svalue=OrderTypeDescription((ENUM_ORDER_TYPE)lvalue); break; case ORDER_STATE : svalue=OrderStateDescription((ENUM_ORDER_STATE)lvalue); break; case ORDER_TYPE_FILLING : svalue=OrderTypeFillingDescription((ENUM_ORDER_TYPE_FILLING)lvalue); break; case ORDER_TYPE_TIME : svalue=OrderTypeTimeDescription((ENUM_ORDER_TYPE_TIME)lvalue); break; case ORDER_REASON : svalue=OrderReasonDescription((ENUM_ORDER_REASON)lvalue); break; default : svalue="Unknown property"; break; } //--- 헤더 너비가 0과 같은 함수에 전달되면 너비는 헤더 줄 크기 + 1 uint w=(header_width==0 ? header.Length()+1 : header_width); PrintFormat("%-*s%-s", w, header, svalue); } } //+------------------------------------------------------------------+ //| 주문 유형 설명을 반환 | //+------------------------------------------------------------------+ string OrderTypeDescription(const ENUM_ORDER_TYPE type) { switch(type) { case ORDER_TYPE_BUY : return("Buy"); case ORDER_TYPE_SELL : return("Sell"); case ORDER_TYPE_BUY_LIMIT : return("Buy Limit"); case ORDER_TYPE_SELL_LIMIT : return("Sell Limit"); case ORDER_TYPE_BUY_STOP : return("Buy Stop"); case ORDER_TYPE_SELL_STOP : return("Sell Stop"); case ORDER_TYPE_BUY_STOP_LIMIT : return("Buy Stop Limit"); case ORDER_TYPE_SELL_STOP_LIMIT : return("Sell Stop Limit"); default : return("Unknown order type: "+(string)type); } } //+------------------------------------------------------------------+ //| 주문 상태 설명 반환 | //+------------------------------------------------------------------+ string OrderStateDescription(ENUM_ORDER_STATE state) { switch(state) { case ORDER_STATE_STARTED : return("Started"); case ORDER_STATE_PLACED : return("Placed"); case ORDER_STATE_CANCELED : return("Canceled"); case ORDER_STATE_PARTIAL : return("Partial"); case ORDER_STATE_FILLED : return("Filled"); case ORDER_STATE_REJECTED : return("Rejected"); case ORDER_STATE_EXPIRED : return("Expired"); case ORDER_STATE_REQUEST_ADD : return("Request Add"); case ORDER_STATE_REQUEST_MODIFY : return("Request Modify"); case ORDER_STATE_REQUEST_CANCEL : return("Request Cancel"); default : return("Unknown state: "+(string)state); } } //+------------------------------------------------------------------+ //| 주문 볼륨 채우기 정책 설명 반환 | //+------------------------------------------------------------------+ string OrderTypeFillingDescription(const ENUM_ORDER_TYPE_FILLING type) { switch(type) { case ORDER_FILLING_FOK : return("Fill or Kill"); case ORDER_FILLING_IOC : return("Immediate or Cancel"); case ORDER_FILLING_BOC : return("Book or Cancel"); case ORDER_FILLING_RETURN : return("Return"); default : return("Unknown type filling: "+(string)type); } } //+------------------------------------------------------------------+ //| 주문 만료일 설명 반환 | //+------------------------------------------------------------------+ string OrderTypeTimeDescription(const ENUM_ORDER_TYPE_TIME type) { switch(type) { case ORDER_TIME_GTC : return("Time GTC"); case ORDER_TIME_DAY : return("Time Day"); case ORDER_TIME_SPECIFIED : return("Time Specified"); case ORDER_TIME_SPECIFIED_DAY : return("Time Specified Day"); default : return("Unknown type time: "+(string)type); } } //+------------------------------------------------------------------+ //| 주문 접수 이유 설명 반환 | //+------------------------------------------------------------------+ string OrderReasonDescription(const ENUM_ORDER_REASON reason) { switch(reason) { case ORDER_REASON_CLIENT : return("Client"); case ORDER_REASON_MOBILE : return("Mobile"); case ORDER_REASON_WEB : return("Web"); case ORDER_REASON_EXPERT : return("Expert"); case ORDER_REASON_SL : return("Stop Loss"); case ORDER_REASON_TP : return("Take Profit"); case ORDER_REASON_SO : return("Stop Out"); default : return("Unknown reason: "+(string)reason); } } //+------------------------------------------------------------------+ //| 말리세컨드로 시간을 반환 | //+------------------------------------------------------------------+ string TimeMscToString(const long time_msc, int flags=TIME_DATE|TIME_MINUTES|TIME_SECONDS) { return(TimeToString(time_msc/1000, flags) + "." + IntegerToString(time_msc %1000, 3, '0')); } |