インジケータが破損する - ページ 5

 
Rosh:

corruptionsとはどういう意味ですか?EURUSD M1で御社のインジケータをアタッチしたところ、 値が 表示されないのですが。


32bitクライアント端末のMetaTrader4でも同じ絵が表示されます。その提供されたインジケータは本当に動作するのでしょうか?
 
Rosh:

32bitクライアント端末のMetaTrader4でも同じ絵が表示されます。提供されたインジケータが動作することは確かですか?
サンプルコードのオリジナルバージョン(タイムスタンプ2011.10.11 18:06)をダウンロードされたようですね。これでは25分間何も描画されません。init()では、drawTimeをTimeCurrent()に設定し、start()のコードを一度だけトリガーします(drawTime + 1500 < TimeCurrent())。

2番目のバージョン(タイムスタンプ:2011.10.12 06:37)は、すぐに描画を開始するように見える。

しかし、いずれにせよ、問題はどうやら数時間起きないようです。
 
jjc:
サンプルコードのオリジナル版(タイムスタンプ 2011.10.11 18:06)をダウンロードされたようですね。これでは25分間何も描画されません。
OK、待ちます。
 

32bitクライアント端末のMetaTrader4でも同じ絵が表示されます。提供されたインジケータは本当に動作するのでしょうか?

- はい、そうです。昨夜から約18時間、32bitマシンでも同じインジケータを動かしています。問題は発生していません。

MT4のバグとして考えられるのは、iLow() や iHigh() ではなく、Low[i] や High[i] を使用するとどうなるのか?

- 私の実際のコードでは、iHighest / iHigh / iLowest / iLow などを使っています。複雑さを減らすために、サンプルコードではHigh/Lowを使用しました

 
RaptorUK:
新しいチャートにインジケータを追加しましたので、戻ってきたら私のアイデアをテストして結果を投稿します。

OK、ちょうど戻ってきたところです。チャートは、最初にIndicatorをロードして以来、問題なく表示されていました。 新しいデータがダウンロードされるように、チャートを右に移動させるためにページ・アップした。.

これは、私が2011.10.07 19:08に このスレッドで提案したものです。

 
RaptorUK:

OK、ちょうど戻ってきたところです。チャートは、最初にIndicatorをロードして以来、問題なく表示されていました。 新しいデータがダウンロードされるように、チャートを右に移動させるためにページ・アップした。.

つまり、バーの履歴が何らかの理由で変更され、バックフィルされ、インジケータが影響を受けているという仮説ですね?
 
jjc:
つまり、バーの履歴が何らかの理由で変更され、バックフィルされ、インジケータはフォワードベースで描画されるだけで、IndicatorCounted()などに基づいて再計算するという通常のインジケータの動作に従わないために影響を受けているという仮説を立てているのですね?
私は最近のコードを見ていません。しかし、そうです、あなたが書いたものに沿った何かです。
 
RaptorUK:
私は最近のコードを見たことがありません。しかし、そうです、あなたが書いたものに沿った何かです。

さて、要約すると、私たちが持っているように見えるものは、次のとおりです。

* 通常のインジケータはIndicatorCounted()を使用して、どのバーの値が「汚れて」いて、(再)計算する必要があるかを判断します。

* スクロールバックして履歴に余分なバーを追加すると、IndicatorCounted()はゼロにリセットされます。したがって、この時点で、通常のインジケータは、すべての履歴値を再計算します。

* このインジケータはこれを行いません。事実上、IndicatorCounted()を無視し、順張りのみで描画しています。

* なぜか、アンカソフトのWin64マシンは定期的に古いデータでバックフィルされますが、Win32マシンはされません。OSはこの文脈ではただの偶然でしょう。

* MT4が、追加された新しいバーを考慮してインジケータバッファを 調整せず、代わりにIndicatorCounted()がリセットされたために古い値をすべて再計算するインジケータコードに依存しているのは少しいたずらっぽいです。(しかし、多くのインジケータに古いバーの値を追加すると、その後の計算に影響を与える可能性があるため、合理的に正当化されます。例えば、EMAは、履歴の最初に余分なバーを追加すると、小さな値ではありますが、変更されます)。

 
jjc:

* IndicatorCounted()がリセットされたため、MT4が追加された新しいバーを考慮してインジケータバッファを調整せず、すべての古い値を再計算するインジケータコードに依存するのは少し悪質です。

実は、よく考えてみると、それは間違っています。MT4がインジケータにすべてを再計算するように指示しようとするのには理由があり、そのシナリオがここに適用されている可能性があります。

例えば、インジケータがしばらく稼働していた後、ブローカーとの接続が切断され、それが複数のバーにわたって続いたとします。再接続すると、MT4はティックを受信し、最新のバーのインジケータ値の描画を開始します。これとは別に、非同期で、よりゆっくりと、切断中に発生した欠損バーのヒストリカルデータを受信します。これらは、バーの履歴の途中に挿入されるため、通常のインジケータは、少なくとも切断期間の初めから古い値を再描画する必要があります。MT4が「すべてを再描画する」というアプローチをとるのは、実際には理解できることです。唯一の難点は、バッファの値が無効である可能性がある場合、MT4が自動的にEMPTY_VALUEに 変更すべきかどうかということです。
 

この問題は、指標ベースのみに影響するのでしょうか?

例えば、High[], Low[], または iHigh, iLow, iLowest, iBarshift, etc, etc...., それが、私が知りたいことで、明確にしておきたいことです。