ライブラリ: iBarShift - ページ 3

 
angevoyageur:

ありがとうございます。このパラメーターを誤解していたので、exactがtrueの場合のコードも修正しなければなりません。iBarShiftの英語のドキュメントは間違っています。

iBarShiftは(正確なオープン時間ではなく)指定した時間を含むバーを返すべきです。

私のライブラリであなたの関数を使うことはできますか?もしその方が速くて正しいのであれば、なぜ私が車輪を再発明しなければならないのでしょうか?)

 
komposter:

iBarShiftは(正確なオープン時間ではなく)指定した時間を含むバーを返すべきです。

私のライブラリであなたの関数を使うことはできますか?もしその方が速くて正しいのであれば、なぜ私が車輪を再発明しなければならないのでしょうか?)

もちろんです。
 
正確」パラメータを考慮した修正コードを公開しました。
 
angevoyageur:

ありがとうございます。このパラメーターを誤解していたので、exactがtrueの場合のコードも修正しなければなりません。iBarShiftの英語のドキュメントは間違っています。

mql5のバグはBars()関数に あり、サービスデスクに報告しました。

Bars()のバグはビルド880で修正されたようです。
 
ビルド880ではBars()のバグが 修正され、現在はすべて正常に動作している。
 
angevoyageur:
ビルド880ではBars()のバグが 修正され、現在はすべて正常に動作している。
 

m1でのm2でのtrudyでの値は、なぜか-1ではなく、0小節で1小節目に戻る。

 

この関数は少なくとも2カ所で曲がっている:

1) if(time>LastBar)

return(0);

つまり、time>LastBar+PeriodSeconds(timeframe)の場合です。

2) if(CopyTime(symbol,timeframe,time,1,checkcandle)==1)

...

return(-1);

繰り返しますが、exact=false の場合、最も近いバーが返されるはずです(この場合、Bars(symbol,timeframe)-1)。

 

あなたのコードには小さなバグがあると思います:

//--- time > LastBarの場合、常に0を返す。
   if(time>LastBar)
      return(0);

最後のティックが新しいバーを「オープン」した場合、if(time>LastBar) は偽になります。

というのも、現在time==LastBarだからです:

 if(checkcandle[0]==time)
         return(shift-1);

シフト==0となり、0ではなく-1が返されます!

だから、私はこう思う:

//--- time > LastBarの場合、常に0を返す。
   if(time>LastBar)
      return(0);

に変更する必要があります。

//--- time > LastBarの場合、常に0を返す。
   if(time>=LastBar)
      return(0);

Calli

 
Carl Schreiber:

あなたのコードには小さなバグがあると思います:

最後のティックが新しいバーを「オープン」 した場合、if(time>LastBar) はfalseになります。

どういう意味ですか?最後のティック」は関係ないと思います。この関数を 使うときは、time=LastBar になるかならないかです。

そして、後にここに着地します:

そして、 今シフト== 0は 0ではなく-1を返します!

もしtime==LastBarなら、shift=1であり、0ではない。だから、バグはない(シフトは、バーカウントであるBars()から来る、それは我々が'シフト-1'を返す理由です)。

ですから、私はこう考えます:

Calli

しかし、'time==LastBar'のケースは "通常の "ケースとして処理されます。

ステートメント

 if(time>LastBar)

はバグ修正として追加されました。