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

 
Vladimir Karputov #:

ステップ1:「MQL5 Wizard」を使ってテンプレートを作成します。


ステップ2:'limit'のスペルを正しく 入力し、close配列を使用 する - iCloseコールではありません!


結果

で、エラーはありません。

誰がリミットとインジケータの計算がこれだけが正しいと言った?

歴史の始まりから現在に至るまで、左から右へ、限界の別の計算と指標そのものを議論しています。よりシンプルに、よりわかりやすく。

このような計算による制限(int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1; )では、すべてのデータ(int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1; )が計算されます。

  1. が現在のティックであるかどうか。
  2. 新しいバーの開店であろうと
  3. 履歴データの変更であるかどうか。

現在のティック(limit=0)の場合、for(int i=limit; i>=0; i--) { // .} は、新しいティックごとにインジケータを計算し、ゼロバーだけが再計算されます。

新しいバーを開くと(limit=1)、for(int i=limit; i>=0; i--) { // ...となります。は、最初のバーとゼロのバーの計算を実行します - 前のバーと新しく開いたバー

この履歴の変更(limit>1)であれば、for(int i=limit; i>=0; i--) { // ...は、利用可能なすべての履歴に対してインジケータの完全な再計算を実行します(履歴はどこかで変更されています)。

 
TheXpert #:
ゼロを下回ることができるのか?

はい、あります(前回の記事に追記しました)

 
この問題を理解していたのは、アルチョムだけだった。
しかし、どうやらこの問題は永遠に続くようだ。
そして、今はifしかない。
 
Roman #:
アルチョムだけが、この問題を理解していた。しかし、どうやらこの問題は永遠に続くようだ。そして、今はifしかない。

いや、わからなかったんです。私が理解したことを明確にする...

 
Vladimir Karputov #:
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

三項演算子の方が饒舌に見える(IMHO)

int limit = prev_calculated==0 ? 0: prev_calculated-1;

さらに、先ほど申し上げたように、何かの間違いでprev_calculatedがrates_totalより高くなった場合はどうするのでしょうか。
ウィンドウ内の最大バーが無制限で、例えば50000のような場合、このような状況に遭遇しました。その場合、バー配列のサイズは新しいバーが出るたびに1ずつ増えていきますが、ある瞬間にまた50000になります。その論理にはついていけない。数年前にキャッチした。今すぐ確認する必要がある。VPSでロック解除の設定をします。

 
Artyom Trishkin #:

いや、わからなかったんです。私が理解したことを明確にする...

今のところ、以前のように動作しないもの

limit==0
for tick i>=0
for bars i>0

あなたは上記のすべてを正しく書いています。
new bar misprintedfor(int i=limit; i>=0; i--)
演算子=はここでは必要ありませんが、以前の動作を返さない限りは、
、過去にあった
ものでしょう。

 
Roman #:

今のところ、以前のように動作しないもの

limit==0
for tick i>=0
for bars i>0


new bar だけfor(int i=limit; i>=0; i--)
ここで operator = は必要ありませんが、すでに過去になっているはずなので、そうでなければ
以前の動作を返します

またしても何もわからない。どうしたんですか?すべてが以前と同じように思える。

 
Artyom Trishkin #:

また出ないんです。どうしたんですか?すべてが以前と同じように思える。

このデザインで

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)


インジケータ・バッファが範囲外です。

ループi>=0でのticksの 例を示してください
多分、何か忘れていて間違ったやり方をしているのだと思います。

 
Roman #:

このデザイン
、インジケーターバッファが圏外になる。

がいつも出ている。
 
Roman #:

このデザインで


インジケータ・バッファが範囲外です。

周期i>=0のティックの 例を示してください
多分、私が間違っていることを忘れているのだと思います。


そして、この構文ではrates_total が最後の要素rates_total-1バッファのサイズ であるため、オーバーフローとなることを既に書きました。