エラー、バグ、質問 - ページ 1396

 
Ilya Malev:
例題のMathRandは、スケールの仕組みを示すためだけに作りました。原文では、あるトレーダーの著者の方法論を使って、そこに数値レベルの計算をさせていました。当初は1~5まで作りたかったのですが、MT4でもDRAW_NONEでバッファにそのような値を入れても適切なスケールにならなかったのです。それを負にして、最小 値を0に固定したら、問題は解決しました。MT5にインジケータを移植する際、この解決策も機能しないように見えました。Voldemarさんのおっしゃる通りPointを掛けなければなりませんでした。

ところで、すっかり忘れていました。))

こんな風に試してみてください。

   SetIndexBuffer(0,buffer1,INDICATOR_DATA);
   SetIndexBuffer(1,buffer2,INDICATOR_CALCULATIONS);

インジケータ計算 >>

 
Karputov Vladimir:
あなたの例は曲がっていて、それを直そうとはしない。修正したら確認します。

実使用のためのコードであれば、修正します。しかし、このコードは問題を実証するためだけに作られたものであり、それは成功裏に行われました。きれいにしても、結果には影響しないので、もったいないです。

 
Anatoli Kazharski:

ところで、すっかり忘れていました。))

こんな風に試してみてください。

indicator_plots=1の場合とINDICATOR_CALCULATIONの 場合の両方を試しました。

PlotIndexSetInteger(1, PLOT_SHOW_DATA, true)に関係なく、2番目のバッファの読みがデータウィンドウから消えて しまいました。

 
Anatoli Kazharski:

servicedeskにエラーを報告してみて、そこで応答を待つことができます。

してきました。返信があれば、お知らせします)でも、エラーではないでしょうね。それで分かるんです。
 
Ilya Malev:

indicator_plots=1、INDICATOR_CALCULATIONSの 両方で試しました。

を指定しても、2番目のバッファの読みは、データウィンドウから消えて しまいます。

しかし、スケーリングの問題は、この方法で解決されます。そこで、servicedeskにリクエストを作成し、データウィンドウにそのようなバッファを表示する機能を追加するだけでよいのです。

そして、こんな風にやってみるのもいい。

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,      // идентификатор события
                  const long   &lparam, // параметр события типа long
                  const double &dparam, // параметр события типа double
                  const string &sparam) // параметр события типа string
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      int      subwin =WRONG_VALUE; // Номер окна, в котором находится курсор
      datetime time   =NULL;        // Время соответствующее координате X
      double   level  =0.0;         // Уровень (цена) соответствующий координате Y
      //---
      if(ChartXYToTimePrice(0,(int)lparam,int(dparam),subwin,time,level))
        {
         int bars_total=Bars(Symbol(),Period(),time,TimeCurrent());
         //---
         Comment("x: ",lparam,"; y: ",(int)dparam,"; subwin: ",subwin,"; time: ",time,"; level: ",level,"\n",
                 "indicator value: ",buffer2[bars_total]);
        }
     }
  }

//---

OnInit()の中で、追加する必要があります。

void OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
  }
 
Anatoli Kazharski:

そこで、単純にデータウィンドウにそのようなバッファを表示する機能を追加するリクエストをservicedeskに作成することができます。

DRAW_NONEバッファ値のロジックは、レンダリング値のロジックとは定義が異なり、グラフィカルな値ではないので、それを考慮したスケーリングは論理的でない、と説明したところです。彼らがどのように問題を解決したいのか、あるいはこのままにしておきたいのか、私には関係ないことです。

 
Ilya Malev:

DRAW_NONEバッファの値のロジックは、レンダリング値のロジックとは定義上異なり、グラフィカルな値ではないので、それを考慮したスケーリングは論理的でないのです。そして、彼らがこの問題をどう解決したいのか、あるいはこのままにしておきたいのかは、私には関係ないことなのです。

前の記事のオプションは適切ではないのでしょうか?念のため、すべてそのままにしておきます。)

ファイル:
Test.mq5  4 kb
 
Anatoli Kazharski:

前の記事のオプションは適切ではないのでしょうか?念のため、すべてそのままにしておきます。)

もちろんアドバイスありがとうございます。私も何かヒントを出そうと思えば出しますが、まずはデータウィンドウの値を見ることに抵抗はありません。次に、このインジケータのバッファの 値を他のインジケータやExpert Advisorで使用する必要がありますが、何か、計算用のバッファを作ると、iCustomを通してその値を取得することができなくなるような気がします。

その結果、2つ目のバッファの値にPointを掛けることで問題を解決しています

 
Ilya Malev:

DRAW_NONEバッファの値のロジックは、レンダリング値のロジックとは定義上異なり、グラフィカルな値ではないので、それを考慮したスケーリングは論理的でないのです。彼らがこの問題をどう解決したいのか、あるいはこのままにしておきたいのか、私には関係ないことです。

すべては、値を表示する場所に依存します。表示を別ウィンドウにした場合、計算されたバッファの値は表示されなくても問題ありません。すべての値がこのウィンドウに収まることに変わりはありません。その結果、スケールが故障してしまうことがあります。

論理的ではない - 同意するが、修正される可能性は低い。

 
Ilya Malev:

もちろんアドバイスありがとうございます、何か松葉杖を作ろうと思えば私も考えますが、まずはデータウィンドウで値を見ることに抵抗はありません。そして第二に、このインジケータのバッファの 値を他のインジケータやExpert Advisorで使う必要があるのですが、何か、計算用のバッファを作ると、iCustomを通してその値を取得することができなくなるような気がするのです。

試してみてください。 カラーバッファから値を取得することは可能です。だから、計算バッファからも出せるんです。結局のところ、インデックスがある、つまり理論的には参照することが可能なのだ。