MQL5でCopyTicksRange()が正しく動作しない。 - ページ 2

 
Alexey Viktorov #:

キーワードを強調しました。

定義上存在しないダニを要求しないでください。ミリ秒単位で現在時刻より1ミリ秒でも先の刻みを要求すると、挙げたような問題の形でまさにg.........y。


あなたの理解では、私はまず、これらのティックが利用可能であるかどうかを確認する必要がありますか? 例えばどのように?私はまた、要求された範囲が休日であるかどうかを確認することができますか? それは関数CopyTicksRange()によって行われなければならない。私の仕事は、ドキュメントに従って入力パラメータを与えることです。そして、それらをチェックし、何かあればエラーを返しますが、レスポンスにゴミを残すことはありません。

この関数がクラッシュしないように、既存のバーが2番目から3番目までのティックを含んでいるかどうかをチェックする方法を思いつくか?


上記では、すべてが揃っているコード例を書きましたが、それでも答えは間違っています。

 
RusPro #:


あなたの理解では、私は最初にこれらのティックが利用可能であるかどうかを確認する必要がありますか?どのように、例えば? 要求された範囲が休日であるかどうかも確認する必要がありますか? これはCopyTicksRange() 関数で行われるべきものです。私の仕事は、ドキュメントに従って入力パラメータを与えることです。そして、それらをチェックし、何かあればエラーを返すが、それに対してゴミは返さないということができる。


上記では、すべてが揃っているコードサンプルを書きましたが、それでも答えは間違っています。

シンボルインフォティック

指定されたシンボルの現在の 価格をMqlTick型の変数で返します。

bool  SymbolInfoTick(
   string    symbol,     // символ
   MqlTick&  tick        // ссылка на структуру
   );
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
   double       volume_real;   // Объем для текущей цены Last c повышенной точностью
  };

time_msc より先の tick を照会する必要はありません。

 

1)上記の例では、要求された範囲が存在します。

2) しかし、CopyTicksRange 自体にこのチェックを入れて、ドキュメントにも反映させることを妨げるものは何でしょうか?なぜ開発者は、彼らのエラーの単純な修正ではなく、松葉杖を作るように私に要求するのでしょうか?


SymbolInfoTickと いえば、少なくとも 合成文字については、間違って動作 します:)

私の記憶では、常に最後の時刻ではなく、一番最初の時刻が返されます。

 
RusPro SymbolInfoTickと いえば、少なくとも 合成文字については、間違って動作 します:)

私の記憶では、常に最後のティックではなく、一番最初のティックの時刻が返されます。

もうこの対話に参加することはない。

 
Alexey Viktorov #:

私はもうこの対話に参加しません。

あなたはメタトレーダーの開発者でもないのに、なぜ彼らの擁護者のような役割を担っているのですか?

要するに、ご指摘の通り、機能は正しく動作するはずです。
 
Sergey Gridnev #:
あなたはメタトレーダーの開発者でもないのに、なぜ彼らの擁護者のような役割を担っているのですか?

基本的にはご指摘の通り、機能は正しく動作するはずです。

一行で台詞に戻る。

機能は開発者が意図したとおりに動くべきで、ユーザーが望むとおりに動くべきではありません。ある人はあることを望み、ある人は別のことを望み、ある人は無意味なことを望む。

開発者が対応しないのはこのためです。そして、私は弁護士ではありません。私はあなたに単純な真実をもたらそうとしているのです。一方、あなたは「ドンマイ......降参......」とスイッチが入り、松葉杖に関する神話を作り上げています。

それは本当にすべて "開発者はあなたに答えることはありません...あなたの希望を得ることはありません。

 
RusPro #:

そして、ここにバグがあります。

つまり、何千人ものプログラマーが使っている関数が、個人的には、現在のバーの先頭からのすべてのティックを返しましたが、要求された範囲には含まれていません。

これは確かにバグです。再生用のフルデータを提供する。確認された場合、開発者は今後のビルドで修正を行う予定です。

おそらく、MqlTickの静的配列に問題があるのでしょう。
 

Alexey Viktorov #:

time_mscより先のtickを要求する必要はない

最後の履歴ティックは、SymbolInfoTick(CopyTicksの後に呼び出されます)よりも新しい場合があります。私は日常的にこれに遭遇しています。

逆の状況も起こりえます。同期していないフロー。
 
fxsaber #:

これは確かにエラーです。リプレイ用のフルデータを提供する。確認された場合、開発者は次のビルドで修正を行う予定です。

もしかしたら、静的配列MqlTickに問題があるのかもしれません。

OK、コードを最小に減らして投稿してみます。CopyTicksにもそのような不具合がありますが、あまり予測できない方法で発生するので、CopyTicksRangeだけに 松葉杖をつくことになりました。おそらく、一般的な内部関数のエラーだと思われます。

SymbolInfoTickの 例も描いておきます。

 
RusPro #:

関数

ユニットです。