datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данныхint BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
if(StartDt>StopDt)BarsGo=0;
if(StartDt==StopDt)BarsGo=1;
if (BarsGo>0)
{
//Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
}
else
{
//Упрощенный расчет с присвоением эмпирических значений переменным
}
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных
自分でも既にチェックはしていますが、このチェックはこの関数のエラーを回避するためのもので、ヘルプにはチェックの必要性については全く書かれていないので、本来は内蔵されているべきものです。
iBarShiftはそれ自体で、クリアランスによる頻繁なヒストリーのディップがなく、取引セッションが 丸一日ないFXにのみ適しているので、私はBarsを使って正しいバー開始時間を計算しているのです。
そして、その検証はどこにあるのでしょうか?また、ヒストリーをぶつけたり、ヒストリーを変更したりした場合、インジケーターを完全に再計算すれば良いだけなのに、なぜ変数を導入するのでしょうか?通常、"0 "から "rates_total-1 "まで行われる。
小切手はどこだ?また、インジケータを完全に再計算すればいいだけなのに、なぜ変数を入力するのでしょうか(履歴を入れ替えたときや履歴を変更したとき)。通常、"0 "から "rates_total-1 "の範囲で行われます。
私の問題は、インジケータや履歴のページングとは関係ありません。以下はコードの一部です。
この問題は、一般的に新しいバーを 開くときに、そのバーの開始日が現在のTFのゼロバーから1バーのシフトより大きい場合に発生します。これは防衛策ではなく、コードのエラーを検出するための障害なのです
しかも、日付が重なれば2番を返すというのは全く理屈に合わないのですが、これはどういうことなのでしょうか。
例えば、14:00に開いたバーが14:05に開くなど、FORTS上のバーの開始時刻が一致しないことがあり、計算の間違いに悩まされたことがあります。
もしかしたら、プログラマーはドキュメントに書かれている方法で作業を始めたが、後で示された日付を「from」「to」ではなく「between」で返した方が良いと判断し、ドキュメントでこの記述が修正されていないのかもしれない。実は、あまり必要ないのです。
FORTSでデモもしてないし。確認できない。
もしかしたら、もともとはドキュメントに書かれているようにやっていたが、「from」と「to」の日付ではなく、「between」の日付を返した方がいいと判断し、ドキュメントの記述を修正しなかったのかもしれない。しかし、描写を修正することはなかった。
FORTSでデモもしてないし。チェックできない。
どうして不要なのか、推測できないし、もしエラーで、後で修正されるのなら、またコードが動かなくなり、ずっとエラーを探し続けることになる...。でも、アルテムはエラーではないと判断して、本質的なことは何も書いていない......。
MQのデモ口座 ではFORTSに接続している人が多いようですが...。
どうしてないんだろう、推測できないし、もしエラーで、後で修正されるのなら、またコードが動かなくなり、決定的な時間、エラーを探すことになるし...。でも、アルテムはエラーではないと判断して、本質的なことは何も書いていない......。
MQからデモ口座で FORTSに接続している人がいるようなのですが...。
まあ、今十分に注意して、開始時刻と終了時刻を間違えなければ、何も恐れることはないんだけどね。支配させる。
インジケーターやヒストリーのページングに問題はない。以下はコードの一部です。
この問題は、一般に新しいバーを 開くときに、そのバーの開始日が現在のTFのゼロバーから1バー以上ずれているときに発生します。iTime()、Bars()が何を返すかはチェックされていない
持っているはずです。本当にそうすべきでしたね。iTime()とBars()は何を返すのですか?そして、ノートには何と書いてあるのでしょうか?
まあ、開始時刻と終了時刻を間違えないように今から十分気をつければ、何も怖いことはないんですけどね。支配させる。
ただ、座って受け身で待つのは好きではないし、具体的に開発者に聞くのは禁止されていたので、本来は開発者向けの質問だったんです。
iTime()、Bars()が何を返すかについてのチェックはありません。
まあ、そうでしょうね。本当にそうしてください。ヘルプを見る - iTime()とBars()は何を返すのですか?そして、ノートには何と書いてあるのでしょうか?
これらのチェックはコード内で一度だけ行えば十分なのでしょうか、それとも各関数呼び出しの 後/前に行うべきでしょうか?
現在のバー/ヒストリーの、どのようなチェックが提案されているのでしょうか?それらはどのような方法で行うのがよいのでしょうか。
このメッセージの原因を調べるにはどうしたらよいですか?
これらのチェックは、コードの中で一度だけ行えば十分なのでしょうか?それとも、各関数呼び出しの 後/前に行うべきでしょうか?
現在のバー/ヒストリーの、どのようなチェックを提案しているのでしょうか?それらはどのような方法で行うのがよいのでしょうか。
戻り値が0かどうか確認する方法を知らないのか?また、OnCalculate()をゼロのリターンで終了する方法がわからないのですか?Webサイトで情報を検索してみたことはありますか?