[解決済み] 異なる作業時間枠のインディケータから呼び出され作成された場合、インディケータが適切にインスタンス化されない。 - ページ 2

 
Alain Verleyen:

あなたは「インスタンス化に失敗する」と繰り返していますが、それは正確ではありません。インジケータはすべてのケースでインスタンス化されます。

問題は、データが同期的に利用できないことで、それに対処する必要があります。これはMT5のバグではなく、機能なのです。

私は議論を中断し、SDの答えを待つことを提案します。

おそらく私は、いくらループして待機しても、(※編集)OnCalculate()の最初のパスの後まで、(異なるTFの)インジケータデータにアクセスすることができないことを適切に表現していなかったのでしょう。

私は、私が間違っている可能性があることを完全に受け入れるつもりです。お願いです...私が間違っていることを証明してください。この馬鹿げたバグの回避策が必要なのです。

 
nicholishen:

おそらく私は、いくらループや待機があっても、(*編集)OnCalculate()の最初のパスの後まで、(異なるTFの)インジケータデータにアクセスすることができないことを適切に表現していませんでした。

私は、私が間違っている可能性があることを完全に受け入れるつもりです。お願いです...私が間違っていることを証明してください。この馬鹿げたバグの回避策が必要なのです。

なぜ、最初の「パス」にそれが必要なのですか?必要なデータが入手できない場合は、入手できるまで待つ、それだけです。
 
Alain Verleyen:
なぜ最初の「パス」で必要なのですか?必要なデータが入手できないなら、入手できるまで待てばいい、それだけのことです。

なぜなら、異なる時間枠の同じインディケータ(同じシンボル)のデータにアクセスする必要があるインディケータを開発しているからです。 2ティック目以降でないと処理しないため、このインディケータはオフラインでは動作 せず、2ティックが来たときのみ動作することになります。

なぜ、このバグのために妥協しなければならないのでしょうか?そんなに猛烈に擁護してどうするんだ?

 
nicholishen:

なぜなら、異なる時間枠の同じインディケータ(同じシンボル)のデータにアクセスする必要があるインディケータを開発しているからです。 2ティック目以降でないと処理しないので、これはオフラインではインディケータが動作 せず、2ティックが来たときだけ動作することを意味します。

なぜ、このバグのために妥協しなければならないのでしょうか?そんなに猛烈に擁護してどうするんだ?

???

私は何も擁護していませんし、ましてや「猛烈に」擁護しているわけではありません。冷静になってください。

 
Alain Verleyen:

???

私は何も擁護していませんし、確かに「猛烈に」擁護していません。クールな滞在してください。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

[MQL5 BUG】異なるワーキングタイムフレームのIndicatorから呼び出された/作成された場合、Indicatorは適切にインスタンス化されない。

アラン・ヴェルレーエン 2017.01.31 12:46

OKあなたは私を信じていない、それはあなたの権利ですが、あなたは間違っています

私は、ServiceDeskに手紙を書いて、その答えをここに報告することを提案することができます。


OKです。

私は誰かがそれを取ることに興味を持っている場合には、この仕事を投稿しました。

https://www.mql5.com/en/job/57516

 
nicholishen:

これは、データがスクリプトまたはEAですぐに利用可能であれば、インディケータでも同様に利用可能であることを意味します(これはデータの利用可能性の問題 ではありません)。インジケータは、OnCalculate()の2回目のパス(最初のティック)の前にインスタンス化に失敗しているだけです。

あなたは「利用可能性」という言葉を文字通り理解しすぎています。いくつかのデータは端末のメモリに存在することができますが、端末自体は、基礎となるデータが1つの(おそらく別の)タイムフレームについてチェックされる間、任意の タイムフレームの更新をブロックするいくつかの同期ロジックを含んでいるかもしれません。あるいは、インジケータがその作成を終えるまで、インジケータからのデータ要求をブロックすることができます(インジケータはいわゆるハンドルによって管理され、エキスパートやスクリプトは管理されないことを思い出してください)。これらは、MQ開発者の視点から推測したものです。サービスデスクを通じて直接質問することができます。

3.の点から、あなたの仕事は不可能です。

3.初期化時にバッファにアクセスする必要が ある

これは、端末のアーキテクチャやドキュメントに反して いるだけです。

インジケータの計算には時間がかかるため、インジケータを作成した直後にデータを参照することはできません。

CopyBuffer 関数についてはこちらもご覧ください。

注意事項

インジケータにデータを要求 する際、要求された時系列がまだ構築されていないか、サーバからダウンロードする必要がある場合、この関数は直ちに-1を返しますが、ダウンロード/構築のプロセスが開始されます。

エキスパートアドバイザーやスクリプトにデータを要求 する場合、端末がローカルにこれらのデータを持っていない場合はサーバーからのダウンロードが 開始され、ローカル履歴からデータを構築できるがまだ準備ができていない場合は必要なタイムスリリーの構築が開始されます。この関数は、タイムアウトまでに準備できるデータ量を返します

したがって、エキスパートとスクリプトはあらかじめ定義されたタイムアウトまで同期的に処理されますが、インジケータは非同期的に処理されます。

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
あなたの特定のタスクに関しては、他の方法で簡単に行うことができます。インジケータでインジケータを 構築し、オフラインで動作させたい人は、あなたが最初ではありません。タイマーを使ってください。
 
Stanislav Korotky:
あなたの特定のタスクに関しては、他の方法で簡単に行うことができます。インジケータでインジケータを構築し、オフラインで動作させたい人は、あなたが最初ではありません。タイマーを使ってください。
試してみた。うまくいかなかった。
 
nicholishen:
試してみた。うまくいきませんでした。
もっと具体的な質問をサンプルコード付きで投稿してください。バグがあるかもしれません。この方法は私の場合はうまくいきました。
 
Stanislav Korotky:
もっと具体的な質問をサンプルコード付きで投稿してください。それはバグがある可能性があります。この方法は私にとっては有効です。
私は今以上に具体的な方法を理解することはできません...

タイマーやループをいくら使っても、Oncalculateが少なくとも1回返されるまでインジケータがインスタンス化されないという事実を克服することはできません。再帰もうまくいきません。