時間足を文字列へ変換関数 PeriodToString

MetaTrader 4
GogoJungle
2019/08/02 21:51
31

プログラム内で時間足を使用する場合にはint型で扱う場合がほとんどです。
しかしチャートの表示やログや外部ファイルへ出力する際にint型のままですと、ユーザーは直感的に分かり辛いかと思われます。
例えば「1440」は日足チャートを表していますが、MQL4プログラミングに慣れていなければ何を表している数値か判断できません。

PeriodToStringはint型の時間足を文字列へ変換するための関数です。
「1440」であれば「日足」といった具合に、トレーダーが見て分かりやすい文字列へ変換します。

string PeriodToString(
   int period
);

パラメータ
period
時間足をint型で入力

戻り値
トレーダーにとって分かりやすい形式に変換された文字列

ソースコード

string PeriodToString(int period){
   string value = "";
   
   if(period == 0){
      period = Period();
   }
   
   switch(period){
      case PERIOD_M1:  value = "1分足 (M1)";   break;
      case PERIOD_M5:  value = "5分足 (M5)";   break;
      case PERIOD_M15: value = "15分足 (M15)"; break;
      case PERIOD_M30: value = "30分足 (M30)"; break;
      case PERIOD_H1:  value = "1時間足 (H1)"; break;
      case PERIOD_H4:  value = "4時間足 (H4)"; break;
      case PERIOD_D1:  value = "日足 (D1)";    break;
      case PERIOD_W1:  value = "週足 (W1)";    break;
      case PERIOD_MN1: value = "月足 (MN1)";   break;
      default: break;
   }
   return(value);
}

サンプル
Period()を実行してint型で取得した現在のチャートの時間足を、PeriodToString関数で変換して表示する例です。
サンプルプログラム内では、英語圏のユーザー向けに日本語の文字を使用しない、PeriodToStringEnも例として載せております。

#property copyright "Copyright 2016, gogojungle"
#property link      "http://labo.fx-on.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

int OnInit(){
   Comment(PeriodToString(Period()) + "¥n" + PeriodToStringEn(Period()));
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
}

string PeriodToString(int period){
   string value = "";
   
   if(period == 0){
      period = Period();
   }
   
   switch(period){
      case PERIOD_M1:  value = "1分足 (M1)";   break;
      case PERIOD_M5:  value = "5分足 (M5)";   break;
      case PERIOD_M15: value = "15分足 (M15)"; break;
      case PERIOD_M30: value = "30分足 (M30)"; break;
      case PERIOD_H1:  value = "1時間足 (H1)"; break;
      case PERIOD_H4:  value = "4時間足 (H4)"; break;
      case PERIOD_D1:  value = "日足 (D1)";    break;
      case PERIOD_W1:  value = "週足 (W1)";    break;
      case PERIOD_MN1: value = "月足 (MN1)";   break;
      default: break;
   }
   return(value);
}

string PeriodToStringEn(int period){
   string value = "";
   
   if(period == 0){
      period = Period();
   }
   
   switch(period){
      case PERIOD_M1:  value = "1 minute (M1)";    break;
      case PERIOD_M5:  value = "5 minutes (M5)";   break;
      case PERIOD_M15: value = "15 minutes (M15)"; break;
      case PERIOD_M30: value = "30 minutes (M30)"; break;
      case PERIOD_H1:  value = "1 hour (H1)";      break;
      case PERIOD_H4:  value = "4 hours (H4)";     break;
      case PERIOD_D1:  value = "1 day (D1)";       break;
      case PERIOD_W1:  value = "1 week (W1)";      break;
      case PERIOD_MN1: value = "1 month (MN1)";    break;
      default: break;
   }
   return(value);
}
PeriodToString.zip

コメント

関連項目

検索結果がありません。