//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ 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); //--- выводим в журнал время установки ордера на исполнение в миллисекундах с 01.01.1970 OrderPropertyPrint("Time setup msc:", header_width, ORDER_TIME_SETUP_MSC); //--- выводим в журнал время исполнения или снятия ордера в миллисекундах с 01.01.1970 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); //--- выводим в журнал идентификатор эксперта, выставившего ордер OrderPropertyPrint("Magic:", header_width, ORDER_MAGIC); //--- выводим в журнал причину или источник выставления ордера OrderPropertyPrint("Reason:", header_width, ORDER_REASON); //--- выводим в журнал идентификатор позиции, выставляемый на ордере при его исполнении OrderPropertyPrint("Position ID:", header_width, ORDER_POSITION_ID); //--- выводим в журнал идентификатор встречной позиции для ордеров типа ORDER_TYPE_CLOSE_BY 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; } //--- если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 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')); } |