ある指標でゼロ除算エラーが発生した - ページ 8

 
Aleksey Vyazmikin:

があるとします。

start_time は2018.04.28 23:00 であるべき ことが分かっています。

つまり、ここで時間が間違っていることが判明したわけですね。

アレクセイ、私の例を見てください。私はそこで、あなたが通過した1時間ごとの時間が、現在のバーから最も近い時間に変換される様子を1行ずつ示しました。

 
変数limit型の宣言が見つかりませんでした。視力が弱いんです。
 
Алексей Тарабанов:
変数型制限の宣言が見つかりませんでした。視力が弱いんです。

ポスト50、プロシージャOnCalculate

 
Sergey Savinkin:

ポスト50、OnCalculateプロシージャ

ありがとうございます。でも、50ってどれですか?リンク先を教えてください。

 
Алексей Тарабанов:

ありがとうございます、でも50はどれですか?リンク先を教えてください。

https://www.mql5.com/ru/forum/262864/page5

リンクはあくまでページへのリンクです。投稿のタイトルに50位と書いてありますね。あなたの#74 ))

В одном индикаторе появилась ошибка деления на ноль
В одном индикаторе появилась ошибка деления на ноль
  • 2018.07.04
  • www.mql5.com
Общее обсуждение: В одном индикаторе появилась ошибка деления на ноль
 
ありがとうございました。
 
Sergey Savinkin:
limit=start_index-stop_index+1 が最初に書かれていますが、これはlimit==1 で、次に 2 で割った ところがlimit=(int)(stop_time-start_time)/PeriodSeconds(_Period) となっていますね。1つは追加されません。ゼロは周期で区切られる。

そうですね、limit=start_index-stop_index+1はi>0の場合、つまりヒストリー計算 の場合、limit=(int)(stop_time-start_time)/PeriodSeconds(_Period)は現在のバーでの計算の場合ですね。

そして、このことは、実際、なぜ私たちの時間が曲がっているのかということです。1時間の時間枠があれば、日付は最初も最後も丸くなければなりません。これが本当の問題で、開始日のバータイムがなぜか間違っているのです!!!

おそらく、ここに問題があるのでしょう。

start_index=ArrayBsearch(Time,start_time);

この時点でstart_timeが正しくなるため

datetime start_time=rates[i].time;
 
アレクセイ、「最後に」はないんだよ。ただの数値化です。18時ちょうどにバーが開き、最小値と最大値を表示し、同じ秒数で安全に閉じました。
 
Алексей Тарабанов:
アレクセイ、"最後に "はないんです。量子化されるだけです。18時ちょうどにバーがオープンし、最小値と最大値を表示し、同じ瞬間に安全にクローズしました。

例えば、18:00にバーが開いたので、最初の時間(start_time)は18:00、最後の時間(stop_time)は1時間足のタイムフレームでは19:00となるはずです。したがって、M1タイムフレームでは両者の指数は異なることになる。また、コード上では、開始インデックスと終了インデックスが同じになっていますが、これは誤りです。

 
Aleksey Vyazmikin:

そうですね、limit=start_index-stop_index+1はi>0の場合、つまりヒストリー計算 の場合、limit=(int)(stop_time-start_time)/PeriodSeconds(_Period)は現在のバーでの計算の場合ですね。

そして、このことは、実際、なぜ私たちの時間が曲がっているのかということです。1時間の時間枠があれば、日付は最初も最後も丸くなければなりません。これが本当の問題で、開始日のバータイムがなぜか間違っているのです!!!

おそらく、ここに問題があるのでしょう。

この時点ではstart_timeが正しいので

そして、まず1時間ごとのタイムフレームからCopyRatesを作り(丸い数字になる)、現在のタイムフレームからCreateFigure プロシージャに時間(Timeになる)と1時間ごとのタイムフレームからRatesを渡し、現在のタイムフレームの配列からインデックスを 探すと、なぜ丸くなっているのか?start_index=ArrayBsearch(Time,start_time) です。