前提・実現したいこと
MQL4を用いてヒストリカルデータを常時取得し、csvファイルに記載したい。
発生している問題・エラーメッセージ
インジケーターを挿入したタイミングでのみしかcsv出力を行うことができません。
時間足のろうそくが完成したタイミングでcsvを頻繁に更新したいです。
該当のソースコード
MQL4
1#property strict 2 3input int MaxBars = 1000;//出力したいデータ量を入力(ろうそくの本数) 4input string WriteFileName = "Test.csv"; //出力したいファイル名を入力 5int filehandle = FileOpen(WriteFileName, FILE_CSV | FILE_WRITE, ","); 6 7int OnCalculate(const int rates_total, 8 const int prev_calculated, 9 const datetime &time[], 10 const double &open[], 11 const double &high[], 12 const double &low[], 13 const double &close[], 14 const long &tick_volume[], 15 const long &volume[], 16 const int &spread[]){ 17 18 int limit = Bars - IndicatorCounted() - 1; 19 limit = MathMin(limit,MaxBars); 20 21 if (filehandle > 0) { 22 FileWrite(handle, ServerAddress(), Symbol(), Period()); 23 FileWrite(handle, "DATE","TIME","HIGH","LOW","CLOSE","OPEN","VOLUME"); 24 25 for(int i = limit; i>=0;i--){ 26 FileWrite(filehandle, TimeYear(Time[i]) + "/" +TimeMonth(Time[i]) + "/" + 27 TimeDay(Time[i]) , TimeHour(Time[i]) + ":" + TimeMinute(Time[i]) ,Open[i], 28 Close[i], High[i], Low[i],Volume[i] ); 29 } 30 31 FileClose(filehandle); 32 Comment(WriteFileName+" はMQL4>File フォルダに出力されました。 "+TimeToStr(TimeCurrent(), TIME_SECONDS) ); 33 } 34 return(rates_total); 35}
試したこと
ティック更新で処理をしようとしました。
グローバルで始値、終値、高値、安値、時間、出来高に対して配列宣言を行い
もともとの組み込まれている
Open[i]のような配列ではなく、新たにiOpen(NULL , 0 , i)を代入してやってみました。
しかし、こちらの場合csv出力するとファイルが破損して開くことができませんでした。
補足情報(FW/ツールのバージョンなど)
MetaEditorを用いて記載しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 05:10