MQL5

MT5用インジケータデータ取得スクリプト

以前ヒストリカルデータをCSV形式で書き出すスクリプトをこちらの記事で紹介しました。
今回はそのスクリプトにインジケーターの値も一緒に出力するようにしてみました。
ほんの数行追加するだけでできます。今回はRSIの値を出力していますが、他のインジケータでも同じように書けばできますので、興味のある人はこの記事のソースを参考に作ってみてください。

ソースコード

#property copyright "shanch2@gmail.com"
#property link      ""
#property version   "1.00"

#property script_show_inputs

input datetime StartTime = "2012-01-01";
input datetime EndTime;
input ENUM_TIMEFRAMES tf = PERIOD_CURRENT;

void OnStart()
{
   Create();
   MessageBox("Done!");
}
  
void Create()
{
   string fileName = Symbol() + StringSubstr(EnumToString(tf), StringFind(EnumToString(tf), "_")) + ".csv";
   
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, ',');

   int iStart = iBarShift(NULL, tf, StartTime);
   int iEnd;
   if(EndTime == 0)
   {
      iEnd = iBarShift(NULL, tf, TimeCurrent());
   }
   else
   {
      iEnd = iBarShift(NULL, tf, EndTime);
   }

   // RSI
   int hRSI = iRSI(NULL, tf, 14, PRICE_CLOSE);
   double RSI[];
   ArraySetAsSeries(RSI, true);
   CopyBuffer(hRSI, 0, iEnd, iStart - iEnd + 1,RSI);

   FileWrite(handle, "DateTime", "Open", "High", "Low", "Close", "RSI");
   
   for(int i=iStart; i>= iEnd; i--)
   {
      datetime dt = iTime(NULL, tf, i);
      double open = iOpen(NULL, tf, i);
      double high = iHigh(NULL, 0, i);
      double low = iLow(NULL, 0, i);
      double close = iClose(NULL, tf, i);

      FileWrite(handle, dt, open, high, low, close, RSI[i]);
   }
   
   IndicatorRelease(hRSI);

   FileClose(handle);
}

変更したのは以下で赤く囲った部分だけです。
とても簡単ですね!