RSIなどのサブウィンドウに表示→メインウィンドウに表示

2025/03/28 05:15
14

サブウィンドウに表示されるインディケーターをボリンジャーバンドと合わせて使用できないようなので、メインウィンドウで処理できないか考えています。RSIなどをメインウィンドウに表示できるカスタムインジケーターを作りたいと思いますがご教授願います。

コメント

GogoJungle
2025/04/01 19:31

表示させること自体は難しくありませんが、用途としては不適切かもしれません。

そもそも、通常、RSI等のインジケーターがメインウィンドウではなくサブウィンドウに表示される理由は、「縦方向のスケールが異なるため」です。

例えば、USDJPYのチャートのメインウィンドウにRSIを表示しようとした場合について考えてみましょう。
現在のドル円の値はおよそ「150」付近の数値が表示されます。
一方、RSIは「0」~「100」の範囲の値をとります。
よって、RSIをUSDJPYのチャートのメインウィンドウに表示させようとしても表示範囲外となってしまうのです。

もしもRSIの具体的な数値自体には興味がなく、グラフの形のみに注目する場合は解決策があります。
価格に合わせてスケーリングすればOKです。

例えば「インジケーターつくーる」でご作成いただく場合、RSIをメインウィンドウに表示することにして作成したコードの一部を次のように修正することで、RSIの折れ線がメインウィンドウに表示されます。

修正前

      if(drawing1 == true){
         indicator1[i] = iRSI(Symbol(), 0, RSI_Period1, PRICE_CLOSE, i + RSI_Shift1) ;
      }

修正後

      if(drawing1 == true){
         double priceMin = iLow(Symbol(), 0, iLowest(Symbol(), 0, MODE_LOW, RSI_Period1, 0));
         double priceMax = iHigh(Symbol(), 0, iHighest(Symbol(), 0, MODE_HIGH, RSI_Period1, 0));
         double rsi = iRSI(Symbol(), 0, RSI_Period1, PRICE_CLOSE, i);
         indicator1[i] = priceMin + (priceMax - priceMin) * (rsi / 100.0);
      }

RSIの計算期間(例えば直近14本)における価格の最大・最小値を取得し、その差にRSIを掛け、100で除したものを最小値に加えてインジケーターの値とすれば、表示範囲内におさまりますね。

例:ドル円の表示範囲が149.5~150.5で、RSIが30のとき
インジケーターの値 = 149.5 + (150.5 - 149.5) * 30 / 100 = 149.8(←表示範囲内の値になりました!)

値があまり意味をなさないものになってしまっていることにご注意の上、ご検討ください。
ご参考になりましたら幸いでございます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。