コンパイルエラー: ')' - open parenthesis expectedについて

 

お世話になります。

MetaTrader 5用にカスタムインディケーターを作成していますが、コンパイル時に以下のエラーが発生してしまいます。

'Backtest Balance Display.mq5' Backtest Balance Display.mq5 1 1 ')' - open parenthesis expected Backtest Balance Display.mq5 39 49 1 errors, 0 warnings 2 1

コードの目的:

このインディケーターは、バックテストのバランスデータをチャート上に表示することを目的としています。具体的には、バックテストの結果として得られる日ごとのバランスデータをCSVファイルから読み取り、対応するチャートのバーにそのバランスを表示します。これにより、トレーダーはバックテストのパフォーマンスを視覚的に確認することができます。

問題のコード:

//+------------------------------------------------------------------+ //| Backtest Balance Display.mq5 | //| Copyright 2024, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" // インディケーターを別ウィンドウに表示する指定 #property indicator_separate_window // インディケーターバッファの数を1に設定 #property indicator_buffers 1 // インディケーターの色と幅を設定 #property indicator_color1 Red #property indicator_width1 2 // バランスデータを格納するための配列(バッファ) double BalanceBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { // バッファをインディケーターに関連付ける SetIndexBuffer(0, BalanceBuffer, INDICATOR_DATA); // インディケーターの短い名前を設定 IndicatorSetString(INDICATOR_SHORTNAME, "Backtest Balance Display"); // バランスデータが保存されているCSVファイルのパスを設定 string file_path = "balance_history.csv"; // CSVファイルを読み取りモードで開く int file_handle = FileOpen(file_path, FILE_READ | FILE_CSV | FILE_ANSI); if (file_handle == INVALID_HANDLE) { // ファイルが開けなかった場合のエラーメッセージ Print("ファイルを開くことができませんでした: ", file_path); return (INIT_FAILED); } // CSVファイルのヘッダー行をスキップする(ヘッダーは「Date」と「Balance」) FileReadString(file_handle); // ヘッダー Date FileReadString(file_handle); // ヘッダー Balance // ファイルの終わりに達するか、バーの数を超えるまでループ int i = 0; while (!FileIsEnding(file_handle) && i < Bars) { // ファイルから日付とバランスを読み込む string date_str = FileReadString(file_handle); double balance = FileReadNumber(file_handle); // 日付文字列をdatetime型に変換(時刻は00:00:00に固定) datetime dt = StringToTime(date_str + " 00:00:00"); // 日付に対応するバーの位置を取得 int pos = iBarShift(NULL, 0, dt, true); // バーの位置が有効な場合、バッファにバランスデータを格納 if (pos >= 0) { BalanceBuffer[pos] = balance; i++; } } // ファイルを閉じる FileClose(file_handle); // 初期化が成功したことを返す return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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); } //+------------------------------------------------------------------+

エラーについて:

エラーメッセージの場所を確認しましたが、特に誤った括弧が見当たりません。どなたか原因や解決方法についてご教示いただけると幸いです。

参考になる同様のインディケーター:

もし、これに似たインディケーターや参考になるコードがあれば教えていただけると助かります。

よろしくお願いいたします。

 
    while (!FileIsEnding(file_handle) && i < Bars)

MQL4のBarsと同等の機能は、MQL5ではBars()メソッドになっています。

    while (!FileIsEnding(file_handle) && i < Bars(Symbol(), PERIOD_CURRENT))

このような感じになるのではないでしょうか?


参考:

https://www.mql5.com/ja/articles/81

https://www.mql5.com/ja/docs/series/bars


P.S.

コードを記載される時にはスタイル(コード)を使用されると、可読性が高くなります。

MQL4からMQL5への移植
MQL4からMQL5への移植
  • www.mql5.com
本稿はMQL4言語関数の簡単なガイドです。MQL4からMQL5へプログラムを移植するのに役立つことでしょう。MQL4関数(トレーディング関数以外)にはそれぞれ記述とMQL5実装が存在します。そのため移行時間が大幅に削減されます。利便性を考え、MQL4関数はグループ分けされておりMQL4参照に似た形になっています。
 

ご回答ありがとうございます!