MQL5の初心者の質問です。プロは素通りしない。 - ページ 6

 
_o0O:

だから、どんな質問でもウェルカムということになる。

ヘルプにはこのようなニュアンスは含まれていません。DRAW_NONE は #property でも PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE) でも動かず、 PlotIndexSetString(0, PLOT_LABEL, "Buff") でも動かず、この目的のために clrNONE を指定した論理は何でしょうか。

また、誰もが言語のドキュメントを読めるわけではありません。

提示されたコードには、確認・理解すべきことがすべて書かれています。

 
Alexey Viktorov:

また、誰もが言語ドキュメントの読み方を知っているわけではありません。

提供されるコードには、確認と理解に必要なすべてが含まれています。

話をしたいのか?

OKです。ヘルプの中に、私の問題に対する解決策がある場所を教えてください。そして、あなたのコードは、バッファをレンダリングしないようにclrNONEを指定することが妄想に見えるように、文書化されていない機能である松葉杖です。

 
Alexey Viktorov:

DRAV_NONE 型を入れる必要はなく、clr_NONE 型の色を入れる。

以下はテストコードです。

説明する。

limit = rates_total-prev_calculated; // Это тупо для примера. В нормальном индикаторе так делать нельзя!

なぜできないの?なぜ、赤色で感嘆詞をつけたのか?

 
_o0O:

あるインジケータのバッファをチャート上に描画 せず、その値をインジケータの「データ ウィンドウ」に表示させるにはどうしたらいいですか?

そうしています。


が、それでもインジケータはバッファを描画します。

こちらで一例をご覧いただけます。

3TF_RSI_Average
3TF_RSI_Average
  • www.mql5.com
Индикатор Three timeframes RSI Average - отображает в отдельном окне три индикатора Relative Strength Index с заданных таймфреймов и их среднее значение. Имеет десять настраиваемых параметров: RSI period - период расчёта RSIOverbought - уровень перекупленностиOversold - уровень перепроданностиDrawing mode - режим рисованияFirst RSI timeframe...
 
Artyom Trishkin:

こちらで一例をご覧いただけます。

いいえ、そうではありません。

この例では、4つのバッファが描画され、4つがデータウィンドウに 表示されています。必要なのは、バッファが描画されるのではなく、データウィンドウに表示され、所定の名前を持つことです。

 
_o0O:

いいえ、そうではありません。

この例では、4つのバッファが描画され、4つがデータウィンドウに 表示されていますが、必要なのは、描画されず、データウィンドウに表示され、所定の名前が付けられていることです。

そして、注意深く見ると?4つのバッファのうち3つを1つずつ表示する無効化機能があります。しかし、データウィンドウでそれらをオフにすると、プログラムによって与えられた名前で表示され続け、すべてがあなたの要求通りになります。それとも、私が質問を誤解していたのでしょうか?

 
Artyom Trishkin:

もっと近くで見てはいかがでしょうか。4つのバッファのうち、3つのバッファを1つずつ表示しないようにするオプションも用意されています。しかし、スイッチを切っても、プログラムされた名前でデータウィンドウに表示されます。それとも、私が質問を誤解していたのでしょうか?

そうなんですね。

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 は 0 または 1 を取る、それが動作の仕組みです。

しかし、PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE); を指定してもうまくいきません。

 
_o0O:

はい、見えます。

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 は 0 または 1 を取る、それが動作の仕組みです。

しかし、PlotIndexSetInteger(0,PLOT_DRAW_TYPE, DRAW_NONE);を指定してもうまくいかない

DRAW_NONE == 0

DRAW_LINE == 1

どこかに別のものがあるわけですね。理論的には、あなたにも有効なはずです。

 
Artyom Trishkin:

説明する。

なぜできないの?なぜ、赤色で感嘆詞をつけたのか?

複数のバーを計算するようなインジケータでは、このような実装は配列の 外に飛んでしまいます。だから、その都度、頭の筋肉を緊張させなければならない...。
 
Alexey Viktorov:
インジケータが複数のバーを計算する場合、このような実装は配列の外に 飛んでしまいます。そのため、いずれの場合も頭の筋肉を緊張させなければならない。

いいえ、その必要はありません。全てはlimit>1で一度だけ行われます。これは最初の実行と履歴の読み込みです。また、平滑化期間_sm=10とした場合、この場合の制限値は10少なくなるはずです。従って

if(limit>1)
  {
   limit=rates_total-period_sm-1;
   ArrayInitialize(Buffer,InitValue);
  }

InitValue - バッファを初期化するための値 - 0 または EMPTY_VALUE - 適宜。それとも-100500か・・・。