インディケータ: より良い音量 - ページ 2 12 新しいコメント MAS-Trading 2025.09.22 12:03 #11 oomeysh #: このインジケーターをMT5に適用しましたが、何も表示されません。 インジケータの入力設定で、「使用するボリュームの種類」を「リアルボリューム」から「ティックボリューム」に変更します。 Janusz Wiechnik 2026.09.29 12:43 #12 これを『クロード・ソネット 5.5』に入力したところ、次のような結果が出ました: 良い点 バッファのレイアウトは正しい:2つのプロット(ヒストグラムデータ+カラーインデックス、さらにMAライン)に対して3つのバッファが用意されている。 カラーリストは、従来の「Better Volume」パレットと一致しています。インデックス0~5はコメントと一致しています。 IntTimesRange == IntMaxTimesRange のような等価性チェックは、ここでは安全です。ウィンドウの最大値は同一の式で計算されるため、現在のバーが最大値である場合、double型の値は完全に一致します。 prev_calculated - 1 からの再計算により、形成中のバーが正しく更新されます。 バグ(最も深刻なものから順に) 1. 履歴が短い場合の範囲外エラーによるクラッシュ(63~69行目)。 の制限は、最初の呼び出し時のみクリップされます。例えば、週足や月足チャートに50本のバーがあり、minbarsが100の場合を考えます。 最初の呼び出しではループをスキップして `rates_total` を返します。次のティックでは、`prev_calculated` が 50 となるため、`limit` は 49 になります。その後、MA ループが `n = -1` と読み取り、「配列の範囲外」というエラーでインジケーターが停止してしまいます。修正方法: mql5 if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars); 2. クライマックス・チャーン(マゼンタ)が、弱気バーで失われる(116~121行目)。 「クライマックス・セル」ブロックが「クライマックス・チャーン」の後に実行され、上書きしてしまう。 したがって、出来高・レンジの両方でクライマックスであり、かつチャーンバーでもあるバーは、終値が中間点より上にある場合にのみマゼンタ色で表示されます。終値が中間点より下の場合は、無地の白で表示されます。意図された優先順位は、クライマックス・チャーンが他のすべてに優先することです。 3. 「追加のチャーンチェック」は決して発動しない(123~125行目)。 IntCandleRange > IntMiddlePrice * 2 は high - low > high + low に展開されますが、これは low < 0 の場合にのみ真となります。通常の金融商品では、この条件はデッドコードとなります。おそらく平均レンジなどとの比較を意図していたと思われるため、単に修正するのではなく、再定義する必要があります。 4. ハードコーディングされた 20 は InpLookBack を無視しています(105行目)。 他の部分はすべて InpLookBack を使用していますが、低出来高のテストでは i - 19, 20 が使用されています。20 以外の値を使用すると、クラスの一貫性が損なわれます。InpLookBack が 20 以上に設定されている場合でも、低出来高の検出では依然として 20 バーのみが対象となります。 5. 出来高ゼロのデータが誤ったシグナルを引き起こし、デフォルト設定は落とし穴となります。 デフォルトはVOLUME_REALであり、これはほとんどのFXおよびCFD銘柄で0となります。 出来高がすべてゼロの場合、IntTimesRange (0) == IntMaxTimesRange (0) および IntDividedRange (0) == IntMaxDividedRange (0) の両方が真となります。チャートはクライマックスおよびクライマックス・チャーンの色で埋め尽くされます。 フラグを > 0 で保護し、デフォルトを VOLUME_TICK に設定してください。 6. OnInit での入力検証がない。 InpMAPeriod <= 0 の場合、ゼロ除算が発生する。InpLookBack <= 0 の場合、ウィンドウロジックが破綻する。これらの場合は INIT_PARAMETERS_INCORRECT を返す。 細かい点 NormalizeDouble(..., 0) は移動平均(MA)を整数に丸めるため、出来高の少ない銘柄では線が歪んでしまいます。これは不要です。 minbarsより前のバーは決して書き込まれず、PLOT_DRAW_BEGINも設定されていません。初期のバーにゴミデータが表示されないよう、これを設定し、バッファを初期化してください。 移動平均(MA)は MAPeriod ではなく、MAPeriod - 1 から開始できます。バーごとに 100 バー分を再集計する代わりに、累積和を使用すれば処理も高速化されます。 繰り返し登場する InpVolumeType == VOLUME_TICK ? ... : ... という三項演算子は、1つの小さなヘルパー関数にまとめるとよりすっきりします。 クロード氏による修正および英語翻訳版を添付しました。(ファイルを見るには「go to discussion」をクリックしてください) ファイル: Better_Volume.mq5 8 kb 12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このインジケーターをMT5に適用しましたが、何も表示されません。
これを『クロード・ソネット 5.5』に入力したところ、次のような結果が出ました:
良い点
バグ(最も深刻なものから順に)
1. 履歴が短い場合の範囲外エラーによるクラッシュ(63~69行目)。
の制限は、最初の呼び出し時のみクリップされます。例えば、週足や月足チャートに50本のバーがあり、minbarsが100の場合を考えます。 最初の呼び出しではループをスキップして `rates_total` を返します。次のティックでは、`prev_calculated` が 50 となるため、`limit` は 49 になります。その後、MA ループが `n = -1` と読み取り、「配列の範囲外」というエラーでインジケーターが停止してしまいます。修正方法:
if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars);
2. クライマックス・チャーン(マゼンタ)が、弱気バーで失われる(116~121行目)。
「クライマックス・セル」ブロックが「クライマックス・チャーン」の後に実行され、上書きしてしまう。 したがって、出来高・レンジの両方でクライマックスであり、かつチャーンバーでもあるバーは、終値が中間点より上にある場合にのみマゼンタ色で表示されます。終値が中間点より下の場合は、無地の白で表示されます。意図された優先順位は、クライマックス・チャーンが他のすべてに優先することです。
3. 「追加のチャーンチェック」は決して発動しない(123~125行目)。
IntCandleRange > IntMiddlePrice * 2 は high - low > high + low に展開されますが、これは low < 0 の場合にのみ真となります。通常の金融商品では、この条件はデッドコードとなります。おそらく平均レンジなどとの比較を意図していたと思われるため、単に修正するのではなく、再定義する必要があります。
4. ハードコーディングされた 20 は InpLookBack を無視しています(105行目)。
他の部分はすべて InpLookBack を使用していますが、低出来高のテストでは i - 19, 20 が使用されています。20 以外の値を使用すると、クラスの一貫性が損なわれます。InpLookBack が 20 以上に設定されている場合でも、低出来高の検出では依然として 20 バーのみが対象となります。
5. 出来高ゼロのデータが誤ったシグナルを引き起こし、デフォルト設定は落とし穴となります。
6. OnInit での入力検証がない。
InpMAPeriod <= 0 の場合、ゼロ除算が発生する。InpLookBack <= 0 の場合、ウィンドウロジックが破綻する。これらの場合は INIT_PARAMETERS_INCORRECT を返す。
細かい点
クロード氏による修正および英語翻訳版を添付しました。(ファイルを見るには「go to discussion」をクリックしてください)