質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

Q&A

0回答

1244閲覧

MetaTrader4のヒストリカルデータを複数の時間軸で、毎足完成ごとにcsv出力したい(コンパイルできずに困っています)

pppanda

総合スコア1

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

0グッド

0クリップ

投稿2021/07/08 13:54

前提・実現したいこと

MQL4を用いてヒストリカルデータを常時取得し、複数の時間軸でcsvファイルに記載したい。
(たとえば、5分足、15分足、1時間足、4時間足、日足など)

発生している問題・エラーメッセージ

インジケーターを使用した時間軸のみしか、データ取得ができない状態ですので、
いずれかの時間軸のチャートに反映させた場合に、複数の時間軸にてヒストリカルデータが取得できると幸いです。

該当のソースコード

#property strict

input int MaxBars = 1000;//出力したいデータ量を入力(ろうそくの本数)
input string WriteFileName = "Test.csv"; //出力したいファイル名を入力
int handle = INVALID_HANDLE;

int OnInit()
{
handle = FileOpen(WriteFileName, FILE_CSV | FILE_WRITE | FILE_SHARE_READ, ",");
if (handle == INVALID_HANDLE) {
return INIT_FAILED;
}

FileWrite(handle, ServerAddress(), Symbol(), Period()); FileWrite(handle, "DATE", "TIME", "OPEN", "HIGH", "LOW", "CLOSE", "VOLUME"); return INIT_SUCCEEDED;

}

void OnDeinit(const int)
{
FileClose(handle);
}

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[])
{
static datetime prevTime = 0;

datetime currTime = iTime(NULL, PERIOD_CURRENT, 0); if(currTime == prevTime) { return rates_total; } prevTime = currTime; int limit = Bars - IndicatorCounted() - 1; limit = MathMin(limit, MaxBars); for(int i = limit; i >= 1; i--) { FileWrite(handle, StringFormat("%04d/%02d/%02d", TimeYear(Time[i]), TimeMonth(Time[i]), TimeDay(Time[i])), TimeToString(Time[i], TIME_MINUTES), Open[i], High[i], Low[i], Close[i], Volume[i]); } FileFlush(handle); Comment(WriteFileName + " はMQL4>File フォルダに出力されました。 " + TimeToStr(prevTime, TIME_SECONDS) ); return(rates_total);

}

試したこと

以前質問があった下記のコードを基に修正を加えようとしましたが、
periods[] = {PERIOD_M5, PERIOD_M15, PERIOD_H1, PERIOD_H4, PERIOD_D1};として、
そのあとArraySize関数をつかってコードを書いておりましたが、コンパイル自体失敗している状態です。

https://teratail.com/questions/299550?link=qa_related_pc

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問