Многие ищут функцию iBarShift, которая была в языке MQL4 (например, 1,2,3). В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки. В качестве альтернативы многие программисты предложили свои варианты реализации этой функции на MQL5. Обнаружилось, что все 4 версии содержат ошибки (не воспроизводят в точности работу...
Print("iBarShift = "+IntegerToString(iBarShift (_Symbol,PERIOD_H1,D'01.04.2018 10:00:00')));
Print("iBarShift3 = "+IntegerToString(iBarShift3(_Symbol,PERIOD_H1,D'01.04.2018 10:00:00'))); // показывает на единицу меньше
どのような問題があったのでしょうか?
以下は、この関数が "BarShift1" という名前で誤動作している例です。
以下は、この関数が誤って動作する例です。"BarShift1 "という名前で動作しています。
実際には、その逆で、私のバージョンだけが正しいことを示しています。(そして、このコードから 元のiBarShift1が正しいです)。
私のバージョンは、mql4 iBarShiftと 同様に、スタンドアロン関数として設計さ れました。
マルチクエリに最適化されていないので、時間の比較は関係ない。大量呼び出しに最適化された良いライブラリが @nicholishenから 公開されました。
実は、その逆で、私のバージョンだけが正しいことを示しているのです。(また、この コードの元のiBarShift1も正しいです)。
私のバージョンは、mql4 iBarShiftと 全く同じようにスタンドアローン機能として使用することを想定して います。
マルチリクエストに最適化されていないので、時間比較は関係ない。バルクコールに最適化された良い ライブラリを@nicholishen が公開しました。
実際には、その逆で、私のバージョンだけが正しいことを示しています。(そして、このコードから 元のiBarShift1が正しいです)。
私のバージョンは、mql4 iBarShiftと 同様に、スタンドアロン関数として設計さ れました。
マルチクエリに最適化されていないので、時間の比較は関係ない。大量呼び出しに最適化された良いライブラリが @nicholishenから 公開されました。
実は、その逆で、私のバージョンだけが正しいことを示しているのです。(また、この コードの元のiBarShift1も正しいです)。
私のバージョンは、mql4 iBarShiftと 全く同じように、スタンドアローン機能として使用することを想定して います。
マルチリクエストに最適化されていないので、時間比較は関係ない。バルクコールに最適化された良い ライブラリを@nicholishen が公開しました。
処理時間の話ではなく、バーナンバーの話です。
図では、8時37分に最も近いバーが前日23時のバーであるとコードは考えていますが、実際には最も近いバーは10時であることがわかります。数学的にも論理的にもその方が近い。
処理時間の話ではなく、バーナンバーの話です。
図では、8:37に最も近いバーが前日の23:00のバーであるとコードが判断していますが、実際には最も近いバーは10:00です。数学も論理学も近い。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
iBarShiftのアナログ
アラン・ヴェルレーエン さん 2018.04.05 00:18
実際にはその逆で、私のバージョンだけが正しいことを示しています。(そして、このコードから 元のiBarShift1が正しいです)。
私のバージョンは、 mql4のiBarShiftと 同様に、スタンドアロン機能として考案さ れました。
簡略化 しよう。
あなたの言い分はわかりました。確認しない。どうやら、私の仕事は、通説と異なるようです。
どのような問題を発見したのでしょうか?
ずいぶん前に書きました。
とりあえず、1つだけ異常な状況を発見しました。
シンボルデータがまだロードされていない場合、-1が返され、本来は0が返されるはずです。
これは、添付しているMQL4用のスクリプトで確認することができます。
このスクリプトは、ランダムな時間、ランダムな時間枠を取ります。iBarShiftXの値が通常のiBarShift関数と 一致しない場合、Print経由でメッセージを表示します。
新しく開いたシンボルでこのスクリプトを実行すると、エラーが表示されます。同じシンボルでスクリプトを再実行しても、エラーは発生しません。
しかし、それは些細なことです。私のバージョンでも、問題は同じです。
あなたのバージョンについて、たったひとつだけ不満があります。
ここで、あなたのバリエーションを紹介します。
そしてこれが私の関数で、同じことをするのですが、シンプルなアルゴリズムでずっと速いのです。
機能なしのさらに短いものでもOKです。
そうでないことを証明してみてください。あなたの関数と私の関数が異なる値を示す場合の、パラメータの単一の組み合わせを見つける。
ただ、最後のパラメータexactは、なぜ必要なのか全く理解できないので、実装していません。私自身は必要ないと思っています。
でも、本当に必要な人がいれば、実装することは可能です。
iBarShift3のバリエーションは、ヒストリーホールの扱いが間違っているので、残しました。修正することは可能ですが、上記のオプションで十分なので、意味がないと思います。
iBarShift3はヒストリーホールを正しく処理できないので、オプションを残しました。修正することは可能ですが、上記のオプションで十分なので、意味がないと思います。
穴が開いているのは、バーにプロトレーダーがいないせいなのか、それとも他のものなのか。また、その不正確さはどのように現れるのでしょうか。
穴が開いているのは、バーでのプロトレーディングが不足しているためか、それともその他か?そして、その不正確さとは何なのか。
取引のない日曜日をいつでもいいことにしよう。
仮に、取引のない日曜日をいつでもいいことにする。
月曜日が表示されるんですね。それが私の望みです...。:)