初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 988

 
Aleksey Vyazmikin:

自分でも既にチェックはしていますが、このチェックはこの関数のエラーを回避するためのもので、ヘルプにはチェックの必要性については全く書かれていないので、本来は内蔵されているべきものです。

iBarShiftはそれ自体で、クリアランスによる頻繁なヒストリーのディップがなく、取引セッションが 丸一日ないFXにのみ適しているので、私はBarsを使って正しいバー開始時間を計算しているのです。

そして、その検証はどこにあるのでしょうか?また、ヒストリーをぶつけたり、ヒストリーを変更したりした場合、インジケーターを完全に再計算すれば良いだけなのに、なぜ変数を導入するのでしょうか?通常、"0 "から "rates_total-1 "まで行われる。

 
Vladimir Karputov:

小切手はどこだ?また、インジケータを完全に再計算すればいいだけなのに、なぜ変数を入力するのでしょうか(履歴を入れ替えたときや履歴を変更したとき)。通常、"0 "から "rates_total-1 "の範囲で行われます。

私の問題は、インジケータや履歴のページングとは関係ありません。以下はコードの一部です。

      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
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
この問題は、一般的に新しいバーを 開くときに、そのバーの開始日が現在のTFのゼロバーから1バーのシフトより大きい場合に発生します。
 
Aleksey Vyazmikin:

これは防衛策ではなく、コードのエラーを検出するための障害なのです

しかも、日付が重なれば2番を返すというのは全く理屈に合わないのですが、これはどういうことなのでしょうか。

例えば、14:00に開いたバーが14:05に開くなど、FORTS上のバーの開始時刻が一致しないことがあり、計算の間違いに悩まされたことがあります。

もしかしたら、プログラマーはドキュメントに書かれている方法で作業を始めたが、後で示された日付を「from」「to」ではなく「between」で返した方が良いと判断し、ドキュメントでこの記述が修正されていないのかもしれない。実は、あまり必要ないのです。

FORTSでデモもしてないし。確認できない。

 
Alexey Viktorov:

もしかしたら、もともとはドキュメントに書かれているようにやっていたが、「from」と「to」の日付ではなく、「between」の日付を返した方がいいと判断し、ドキュメントの記述を修正しなかったのかもしれない。しかし、描写を修正することはなかった。

FORTSでデモもしてないし。チェックできない。

どうして不要なのか、推測できないし、もしエラーで、後で修正されるのなら、またコードが動かなくなり、ずっとエラーを探し続けることになる...。でも、アルテムはエラーではないと判断して、本質的なことは何も書いていない......。

MQのデモ口座 ではFORTSに接続している人が多いようですが...。

 
Aleksey Vyazmikin:

どうしてないんだろう、推測できないし、もしエラーで、後で修正されるのなら、またコードが動かなくなり、決定的な時間、エラーを探すことになるし...。でも、アルテムはエラーではないと判断して、本質的なことは何も書いていない......。

MQからデモ口座で FORTSに接続している人がいるようなのですが...。

まあ、今十分に注意して、開始時刻と終了時刻を間違えなければ、何も恐れることはないんだけどね。支配させる。

 
Aleksey Vyazmikin:

インジケーターやヒストリーのページングに問題はない。以下はコードの一部です。

この問題は、一般に新しいバーを 開くときに、そのバーの開始日が現在のTFのゼロバーから1バー以上ずれているときに発生します。
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); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

iTime()、Bars()が何を返すかはチェックされていない

持っているはずです。本当にそうすべきでしたね。iTime()とBars()は何を返すのですか?そして、ノートには何と書いてあるのでしょうか?

 
Alexey Viktorov:

まあ、開始時刻と終了時刻を間違えないように今から十分気をつければ、何も怖いことはないんですけどね。支配させる。

ただ、座って受け身で待つのは好きではないし、具体的に開発者に聞くのは禁止されていたので、本来は開発者向けの質問だったんです。

 
Artyom Trishkin:

iTime()、Bars()が何を返すかについてのチェックはありません。

まあ、そうでしょうね。本当にそうしてください。ヘルプを見る - iTime()とBars()は何を返すのですか?そして、ノートには何と書いてあるのでしょうか?

これらのチェックはコード内で一度だけ行えば十分なのでしょうか、それとも各関数呼び出しの 後/前に行うべきでしょうか?

現在のバー/ヒストリーの、どのようなチェックが提案されているのでしょうか?それらはどのような方法で行うのがよいのでしょうか。

 

このメッセージの原因を調べるにはどうしたらよいですか?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

これらのチェックは、コードの中で一度だけ行えば十分なのでしょうか?それとも、各関数呼び出しの 後/前に行うべきでしょうか?

現在のバー/ヒストリーの、どのようなチェックを提案しているのでしょうか?それらはどのような方法で行うのがよいのでしょうか。

戻り値が0かどうか確認する方法を知らないのか?また、OnCalculate()をゼロのリターンで終了する方法がわからないのですか?Webサイトで情報を検索してみたことはありますか?

  1. 関数から必要な値を取得する
  2. ゼロを確認する
    1. もし0であれば、0を返す。
    2. 0でない場合は、ステップ3へ
  3. この値で作業する
まさか13000を超えるレーティングを持つ男に論理の基本を教えることになるとは......。
理由: