ある指標でゼロ除算エラーが発生した - ページ 6 1234567891011 新しいコメント 削除済み 2018.07.04 15:44 #51 Aleksey Vyazmikin:論理的にゼロになることはないはずなのですが、なぜそうなるのかは不明です d1では小さな数字が出るので、int bid=int((tick_array[0].bid+_Point/10)/_Point) のように価格をintに変換して問題を回避しています。確かに、doubleで計算すると5桁で0.0000099999と出ることがあります。 Sergey Savinkin 2018.07.04 15:50 #52 Aleksey Vyazmikin:ロジックでゼロになることは全くないはずなのに、なぜそうなるのか理解できない!?Si-9.18でデバッガで実行。レートでの時間はなぜか2016年。iの値は2189であるが。従って、流動性のないチャートの先頭 から計算を開始します。起動から停止までの初期時間は1時間です。しかし、その1時間には、1つの時間値しかありません。startとstopの両方の変数で見つけます。その結果、スタート=ストップとなる。もちろん、引き算をすればゼロになる。あとはまだわからない。 Aleksey Vyazmikin 2018.07.04 15:53 #53 ovak77: d1が小さい数字になっていますが、価格をint型に変換して、例えばint bid=int((tick_array[0].bid+_Point/10)/_Point); とすると、確かにdoubleで計算した場合、0が返ってくることがありますね。d1の議論はやめましょう。必要なら必要なのです。そこではすべてが正しくカウントされているのです。問題は、start_timeとstop_time、start_indexとstop_indexが同じ値になるのはなぜか、ということです。 削除済み 2018.07.04 15:57 #54 Aleksey Vyazmikin:d1の議論はやめましょう。必要なら必要なのです。そこではすべてが正しくカウントされているのです。問題は、なぜstart_timeとstop_timeの値がstart_indexとstop_indexの値と同じになるのか、ということです。 あなた次第です。例えば、0.0000099999を2で割ってみてください。 Aleksey Vyazmikin 2018.07.04 15:58 #55 さらにハングアップした後、端末が動かなくなる...。再インストールせずに復活させるにはどうしたらいいですか? メモリ内でハングアップしていることが判明し、プロセスを強制終了したところ、起動しました。 Sergey Savinkin 2018.07.04 16:12 #56 Aleksey Vyazmikin:どうして時間が平等になるのでしょうか?半年間、すべて正常に動作していたのに...。void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[]) { //i = 2189 datetime start_time=rates[i].time; //start_time=rates[i].time = D'2016.10.06 12:00:00' datetime stop_time=(start_time+PeriodSeconds(TimeFrames)); //stop_time = D'2016.10.06 13:00:00' //--- //Time[38572] = D'2016.10.05 19:23:00' int start_index,stop_index,limit; //Time[38571] = D'2016.10.06 12:35:00' datetime vertical_line_time; //Time[38570] = D'2016.10.06 19:05:00' //--- start_index=ArrayBsearch(Time,start_time); //start_index = 38571 if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index); start_time=Time[start_index]; //start_time = D'2016.10.06 12:35:00' if(i>0) { stop_index=ArrayBsearch(Time,stop_time); //stop_index = 38571 if(Time[stop_index]>stop_time) stop_index++; stop_time=Time[stop_index]; //stop_time = D'2016.10.06 12:35:00' limit=start_index-stop_index+1; vertical_line_time=Time[start_index-(limit>>1)]; まずlimit=start_index-stop_index+1 があり、つまりlimit==1 で、次に 2 で割った ところがlimit=(int)(stop_time-start_time)/PeriodSeconds(_Period) となっていますね。1つは追加されません。ゼロは周期で区切られる。 Aleksey Vyazmikin 2018.07.04 16:15 #57 Sergey Savinkin:Si-9.18でデバッガで実行。レートでの時間はなぜか2016年。iの値は2189であるが。従って、流動性のないチャートの先頭 から計算を開始します。起動から停止までの初期時間は1時間です。しかし、その1時間には、1つの時間値しかありません。startとstopの両方の変数で見つけます。その結果、スタート=ストップとなる。もちろん、引き算をすればゼロになる。あとはまだわからない。受信パラメータにBarsUsed=100を入れる。 Sergey Savinkin 2018.07.04 16:22 #58 Aleksey Vyazmikin:受信パラメータにBarsUsed=100を入れる。はい、この方法ならエラーは起こりません。しかし、流動性の低い商品や流動性の低い時間帯、例えばイブニングセッションに参加すれば、1時間以内に1本の安値バーを簡単に取得することができるのです。よって、リミット=0が保証されることになるのですまた、引用符が 2 の場合、limit/2 は丸め誤魔化しても 0 となります。 Aleksey Vyazmikin 2018.07.04 16:37 #59 Sergey Savinkin:はい、それはエラーではありません。しかし、流動性の低い商品や流動性の低い時間帯に手を出すと、例えばイブニング・セッションの場合、1時間に1本のローバーが出るかもしれません。よって、リミット=0が保証されることになるのですまた、引用符が2であれば、limit/2は丸められたときに0になったままです。おそらく、考えてみます、ありがとうございました。しかし、世界的な問題は別のところにある...。問題は、安定しないことです。 Aleksey Vyazmikin 2018.07.04 16:39 #60 ovak77: あなた次第です。例えば、0.0000099999を2で割ってみてください。プリントされたd1 - 私の目的ではそれは 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=35.71428571428572 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=32.78688524590164 2018.07.04 19:38:06.404 IndDrafter_Test (Si-9.18,M1) d1=43.47826086956522 とにかく、そんなことより、ありがとうございます。 1234567891011 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
論理的にゼロになることはないはずなのですが、なぜそうなるのかは不明です
ロジックでゼロになることは全くないはずなのに、なぜそうなるのか理解できない!?
Si-9.18でデバッガで実行。レートでの時間はなぜか2016年。iの値は2189であるが。従って、流動性のないチャートの先頭 から計算を開始します。起動から停止までの初期時間は1時間です。しかし、その1時間には、1つの時間値しかありません。startとstopの両方の変数で見つけます。その結果、スタート=ストップとなる。もちろん、引き算をすればゼロになる。あとはまだわからない。
d1が小さい数字になっていますが、価格をint型に変換して、例えばint bid=int((tick_array[0].bid+_Point/10)/_Point); とすると、確かにdoubleで計算した場合、0が返ってくることがありますね。
d1の議論はやめましょう。必要なら必要なのです。そこではすべてが正しくカウントされているのです。問題は、start_timeとstop_time、start_indexとstop_indexが同じ値になるのはなぜか、ということです。
d1の議論はやめましょう。必要なら必要なのです。そこではすべてが正しくカウントされているのです。問題は、なぜstart_timeとstop_timeの値がstart_indexとstop_indexの値と同じになるのか、ということです。
さらにハングアップした後、端末が動かなくなる...。再インストールせずに復活させるにはどうしたらいいですか?
メモリ内でハングアップしていることが判明し、プロセスを強制終了したところ、起動しました。
どうして時間が平等になるのでしょうか?半年間、すべて正常に動作していたのに...。
Si-9.18でデバッガで実行。レートでの時間はなぜか2016年。iの値は2189であるが。従って、流動性のないチャートの先頭 から計算を開始します。起動から停止までの初期時間は1時間です。しかし、その1時間には、1つの時間値しかありません。startとstopの両方の変数で見つけます。その結果、スタート=ストップとなる。もちろん、引き算をすればゼロになる。あとはまだわからない。
受信パラメータにBarsUsed=100を入れる。
受信パラメータにBarsUsed=100を入れる。
はい、この方法ならエラーは起こりません。しかし、流動性の低い商品や流動性の低い時間帯、例えばイブニングセッションに参加すれば、1時間以内に1本の安値バーを簡単に取得することができるのです。よって、リミット=0が保証されることになるのですまた、引用符が 2 の場合、limit/2 は丸め誤魔化しても 0 となります。
はい、それはエラーではありません。しかし、流動性の低い商品や流動性の低い時間帯に手を出すと、例えばイブニング・セッションの場合、1時間に1本のローバーが出るかもしれません。よって、リミット=0が保証されることになるのですまた、引用符が2であれば、limit/2は丸められたときに0になったままです。
おそらく、考えてみます、ありがとうございました。しかし、世界的な問題は別のところにある...。問題は、安定しないことです。
あなた次第です。例えば、0.0000099999を2で割ってみてください。
プリントされたd1 - 私の目的ではそれは
とにかく、そんなことより、ありがとうございます。