//+------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+------------------------------------------------------------------+ 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; } //--- ヘッダーの幅が関数に渡され、ゼロと等しい場合、幅はヘッダー行のサイズ+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')); } |