インディケータ: DRAW_FILLING

 

DRAW_FILLING:

DRAW_FILLINGの 描写スタイルは、二つのインジケーターの値の間の領域を塗りつぶします。 このインジケーターは、別ウィンドウに二つの異なる期間の移動平均線に基づいたチャネルを描写します。

チャネルの色はトレンドの変化によって変化します。 実際は、二つのラインを描写し、その間を特定の色で塗りつぶします。チャネルの色 はNティックごとに変化します。N 変数がパラメータとして定義されます。これは"Properties"ウィンドウで変更可能です。

こちらも参照: The Drawing Styles in MQL5

DRAW_FILLING

作者: MetaQuotes Software Corp.

 

公開されているコードを使って、描画プロパティDRAW_FILLINGを使用した独自のインジケータを書こうとしました。

しかし、空の値で区切られた隣り合う描画セクションの固着に問題があります。

2つの描画セクションが1つのウィンドウに表示された場合、EMPTY_VALUE 値を持つインジケータセクションで区切られているにもかかわらず、この空のセクションは隣のセクションの値で描画されます。


このケースを取り上げたのは、公開されているセッション・インジケータのコードがうまく機能しないためで、すべてを書き直すことにした。

これがその草案です。

ファイル:
Session.mq5  4 kb
 

この選択肢しかない


ファイル:
Session.mq5  4 kb
 
Rosh:

この選択肢しかない


ありがとうございます、しかし、少し行かない、私はおそらくグラフオブジェクトの上に停止します。

 
Urain:

ありがとうございます。でも、ちょっとやそっとでは、グラフ・オブジェクトは描けません。

DRAW_FILLINGスタイルでの 描画は多角形で行われるため、残念ながらきれいな長方形は得られません。
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
DRAW_FILLINGスタイルの 描画は多角形で行われるため、残念ながらきれいな長方形は得られない。
まあ、この方法はこの目的には適していない。
 

私も同じ問題(空の値の領域に張り付く)に遭遇しました。上では矩形は取れないと言われているようですが、この矩形を描く例(トレーディングセッションインジケーター)があるので、この話題を掘り下げてみることにしました。

正直なところ、上記のインジケーターで矩形を描く方法がよくわかりませんでした。そのため、(プラットフォーム開発者、著者、サードパーティの開発者から)説明があればありがたく思います。

一方、実験の過程で、矩形を取得するのはそれほど難しくないことが判明しました - 空の値のセクションの後にファイリング・バッファを入れ替える必要があるだけです。つまり、このコード

...
//--- 
   for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) {
      if ( prev_calculated != rates_total && bar == rates_total - 1 ) {
         _up = up;
      }
      if ( bar % 4 == 0 ) {
         if ( up ) {
            draw(bar, high[bar], low[bar]);
            up = false;
         } else {
            draw(bar, low[bar], high[bar]);
            up = true;
         }
      }
   }
//--- 次の呼び出しのためにprev_calculatedの値を返す
   return(rates_total);
}
//+------------------------------------------------------------------+
void draw(int bar, double price1, double price2) {
//---
   int start = bar-2;
   
   for ( int i = start; i <= bar; i++ ) {
      FillingBuffer1[i] = price1;
      FillingBuffer2[i] = price2;
   }
//---
}

はこのような結果をもたらす:

充填サンプル


問題は解決したようだ。ユーザーが指定した時間間隔を1日単位で割り当てるインジケーターを書いたところ、新たな驚きがあった:

タイムゾーン

どうひねっても「副作用」を取り除くことができないのだ。最初のケース(上のコードと写真)では、このような現象は見られなかった。

そこで質問です:

  • なぜトレーディング・セッション・インジケータ(記事冒頭のリンク)には、空の値の領域に張り付くという問題がないのでしょうか?
  • 長方形が正常に描画される場合もあれば、副作用が発生する場合もあるのはなぜか?コードは投稿の最後に添付してあります。(もしそのような現象が常に発生するのであれば、ポリゴンに関する記述に同意します)。

繰り返しになりますが、ご教示いただければ幸いです。

P.S.1 長方形の問題に対する解決策は、オブジェクト(なぜかあまり使いたくない)に代わる良い方法だと思います。結局のところ、それは時間間隔の選択、線形反転、ダーバス領域、様々なパターンの選択などなど、同じです。

P.S.2 TimeZoneインジケータをコードベースに入れることも考えましたが、(この「左」バーで)その価値があるでしょうか?

ファイル:
 
left "バーの描画エラーが修正されました。
 

PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);を使って範囲を埋めない。

なぜ効果があるときとないときがあるのですか?


参考 https://www.mql5.com/zh/forum/417956/page4

问题,错误的讨论
问题,错误的讨论
  • 2022.05.05
  • www.mql5.com
那么,让我们开始吧...