今回は、MetaTrader 5で最後にクローズしたトレードのデータをループを使わずに取得する方法をご紹介します。
- まず、現在の日の開始時間を設定する変数を作成します。(これは必須ではありません。)
- チャート出力用の他の変数を作成し、他のコードブロックでも使用できるようにします。(これも必須ではありません。)
- このコードをOnTick();関数内で使用すると、毎回のティックで結果が表示されます。また、バーごとに設定することも可能です。
// 変数の定義 string DayStart = "00:00"; // 日の開始時間 double LastClosed_Profit; // 最後のクローズしたトレードの利益 string TradeSymbol, TradeType; // エキスパートの初期化-------------------- int OnInit() { return(INIT_SUCCEEDED); } // エキスパートの非初期化------------------- void OnDeinit(const int reason) { } // エキスパートのOnTick-------------------------- void OnTick() { // 最後のクローズしたトレードをチェック。 CheckLastClosed(); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CheckLastClosed() { datetime HistoryTime = StringToTime(DayStart); // "日の始まりから現在までの履歴を取得 if(HistorySelect(HistoryTime,TimeCurrent())) { int Total = HistoryDealsTotal(); // 最後の取引チケット番号を取得し、選択します。 ulong Ticket = HistoryDealGetTicket(Total -1); // 必要な情報を取得します。 LastClosed_Profit = NormalizeDouble(HistoryDealGetDouble(Ticket,DEAL_PROFIT),2); TradeSymbol = HistoryOrderGetString(Ticket,ORDER_SYMBOL); // 売りトレードを特定します。 if(HistoryDealGetInteger(Ticket,DEAL_TYPE) == DEAL_TYPE_BUY) { TradeType = "売りトレード"; } // 買いトレードを特定します if(HistoryDealGetInteger(Ticket,DEAL_TYPE) == DEAL_TYPE_SELL) { TradeType = "買いトレード"; } // チャート出力。 Comment("\n","取引総数 - : ", Total, "\n","最後の取引チケット - : ", Ticket, "\n", "最後のクローズ利益 -: ", LastClosed_Profit, "\n", "最後の取引は -: ", TradeType); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
全トレード履歴(アカウントの最初から)を取得するには、HistorySelect();関数を以下のように使います。
// 全履歴を取得 HistorySelect(0,TimeCurrent());