どなたか教えてもらえないでしょうか? 新しいコメント ran09071225 2024.08.19 16:46 EA初心者です。 自作したインジケーターを使ってEAに条件として組み込みたいのですが値が取得できず困っています。 一応インジケーターの仕様は、移動平均線の傾きを計算しサブウインドウにヒストグラムとして表示するというものです。 そして、この値をEAで取得したいのですが、現在以下の2147483647.0という異常値とエラーが取得されてしまっています。 これを正しい値を取得するためにはどうすればいいかわかる方いれば教えてもらえないでしょうか? 補足説明として、バッファはEAもインジケーターも共に0を指定しています。インジケーターでパラメーターも特に設定していません。 自分で何度も見直したり、考えてもわかりませんでした。 どなたかお力をお借りできないでしょうか? 宜しくお願い致します。 USDJPY,H1: Current maAngle: 2147483647.0 | Time: 2006.01.11 05:25 USDJPY,H1: Error: Invalid maAngle value. Error Code: 0 =========================== EAのOnTick内に書いているコードです。 // MA Angle Histogramから角度を取得 double maAngle = iCustom(NULL, 0, "MA Angle Histogram", 0, 0); if(maAngle == EMPTY_VALUE || maAngle == 2147483647.0) { Print("Error: Invalid maAngle value. Error Code: ", GetLastError()); } else { Print("Current maAngle: ", maAngle, " | Time: ", TimeToString(TimeCurrent(), TIME_DATE | TIME_MINUTES)); } // 有効な値を取得した場合、ログに出力 Print("Current maAngle: ", maAngle, " | Time: ", TimeToStr(TimeCurrent())); =============================================== ここから下がインジケーター側のコードです。 #property description "MA Angle Histogram" #property strict #property indicator_separate_window #property indicator_minimum -50 #property indicator_maximum 50 #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_width1 3 // ヒストグラムの太さを3に設定 //--- buffers double AngleBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { string short_name; //--- バッファの設定 SetIndexBuffer(0, AngleBuffer); ArraySetAsSeries(AngleBuffer, true); // 最新バーが最初に来るように設定 SetIndexStyle(0, DRAW_HISTOGRAM, EMPTY, 3); // ヒストグラムの幅を3に設定 // 名前の設定 short_name="MA Angle (80)"; IndicatorShortName(short_name); SetIndexLabel(0, short_name); // バッファの名前をセット // レベルの設定 SetLevelValue(0, 10); SetLevelValue(1, -10); SetLevelStyle(STYLE_DASH, 1, White); // 3つ目の引数で色を指定 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[]) { int i, limit; double MA_Current, MA_Past; double deltaY, deltaX, angle; const int MA_Period = 80; // 固定値として定義 // バー数が十分でない場合は終了 if(rates_total < MA_Period + 80) { Print("Not enough data for calculation."); return(0); } // 初回計算時は全バーを処理、それ以降は更新バーのみを処理 if(prev_calculated == 0) limit = rates_total - MA_Period; else limit = rates_total - prev_calculated; // MAの角度を計算 for(i = limit - 1; i >= 0; i--) { // 現在の80MAを取得 MA_Current = iMA(NULL, 0, 80, 0, MODE_LWMA, PRICE_CLOSE, i + MA_Period); // 80本前の80MAを取得 MA_Past = iMA(NULL, 0, 80, 0, MODE_LWMA, PRICE_CLOSE, i); // 無効な値チェック if(MA_Current == EMPTY_VALUE || MA_Past == EMPTY_VALUE) { Print("Invalid MA value at i=", i, " MA_Current=", MA_Current, " MA_Past=", MA_Past); AngleBuffer[i] = 0; // 無効値の場合はゼロを格納 continue; } // 高さと底辺を計算 deltaY = MA_Current - MA_Past; deltaX = 80; // 角度を計算(度数に変換) angle = -MathArctan(deltaY / deltaX) * 180 / 3.14159; // 角度をヒストグラムに表示 AngleBuffer[i] = angle * 15; // バッファ値を出力 Print("Buffer value at i=", i, ": ", AngleBuffer[i], " MA_Current=", MA_Current, " MA_Past=", MA_Past); } return(rates_total); } //+------------------------------------------------------------------+ Shino Unada 2024.08.20 01:19 #1 昨夜試したプログラムとどこが違うのかよく分かりませんが、 全て正常に動作しています。 ※説明とプログラムを一緒にしないでください。投稿後確認し、間違いがあれば右下の「編集 (edit)」で修正してください。 ran09071225 2024.08.20 02:22 #2 Shino Unada #: 昨夜試したプログラムとどこが違うのかよく分かりませんが、 全て正常に動作しています。 ※説明とプログラムを一緒にしないでください。投稿後確認し、間違いがあれば右下の「編集 (edit)」で修正してください。 失礼致しました!ご確認頂いたようでありがとうございます! 解決することができました! この度は助言をいただきましてありがとうございました!大変助かりました!本当にありがとうございます! 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン