バックテストで問題が見つかり、根本的な原因がわからない! - ページ 4

 
GumRai:

は、閉じたバーの最初の実行で、現在のバーで行うのとは異なる計算を許可します。

新しいバーの最初のティックでは、次のようになります。

同じバーの次のティックでは、次のように計算します。

これは一種の複利計算です。

GumRaiさんへ。

現在のバー、Bar[0]は再描画のために必要です。つまり、過去のバーが再描画で観測された問題で、多分Bar[8],.Bar[3],...、Bar[1]だと思います、というトピックです。

インジケータの主な内容としては、10行程度のコードであることがおわかりいただけると思います。

しかし、ヒストリカルバーの再描画の根本的な原因を見つけることはまだとても難しい のです。

このコードでヒストリカルバーが再描画されるのはとても不思議で、混乱しています。

 

先ほど申し上げたように、このインジケータは同じバーの前のティックで計算された値を使用して、毎ティック bar[0]を再計算しています。

テスターの実行中、インジケータが実際にチャートに表示されていなくても、擬似的にリアルタイムで計算されます。

テスターが終了すると、インジケータはチャートに追加されますが、1つのバーに1回しか計算されないため、すべてのティックを考慮しないと思います。

ビジュアルモードでチャート上にインジケータを表示させて試してみてください。

 
jollydragon:

ffoorr様、ページが開けず、サイトにアクセスできないのですが、www.forex-tsd.com。多分、私のインターネット構成に問題があるのでしょう。

私のコードに焦点を当てましょう。メインコンテンツのコードは10行ほどしかありません。

しかし、歴史的なバーの再描画の根本的な原因を見つけるのは、まだとても難しいのです。


TSDのページ番号にアクセスするには、ズームを小さくしてください。


インジケータはより良い

 
GumRai:

このインジケータは、同じバーの前のティックで計算された値を使用して、ティックごとにbar[0]を再計算している、と申し上げました。

ビジュアルモードのチャート上にインジケータを配置して試してみてください。

GumRaiさん、私の過去の投稿を参考にしてください。

.bar[0]の再描画は必要なので問題ないです。

.このスレッドでは、bar[0]の左側のヒストリカルバーが再描画されることが想定外であり、まさにそれが話題・問題なのです。私はすでにチャートでそれを観察し、すでにスクリーンショットを貼り付けました。

皆さん、私のコードに注目し、根本的な原因を掘り起こすことで、一緒に自分を向上させましょう。私はより良いインジケータは必要ありませんが、根本的な原因を知りたいのです!

ご理解とご支援をお願いします。

 

私が話していることを理解していないようですね。

私がうまく説明できていないのか、それとも私の投稿をきちんと読んでいないだけなのかは分かりませんが。

インジケーターを再初期化すると、インジケーター全体が1バー1ティックに基づいて再計算されるのに対して、リアルタイムでは1バー複数ティックに基づいて計算されます。

そのため、リアルタイムで描画されたインジケータを再初期化すると、差異が発生します。

 
GumRai:

私が話していることを理解していないようですね。

私がうまく説明できていないのか、それとも私の投稿をきちんと読んでいないだけなのかは分かりませんが。

インジケーターを再初期化すると、インジケーター全体が1バー1ティックに基づいて再計算されるのに対して、リアルタイムでは1バー複数ティックに基づいて計算されます。

そのため、リアルタイムで描画されたインジケータを再初期化すると、差異が発生します。

英語は母国語ではないので、申し訳ありません。

再初期化で描画されようが、リアルタイムで描画されようが、すべてのヒストリカルバーは最後のティックを基に計算されます。

したがって、ヒストリカルバーは同じように凍結されるはずです。正しいですか?M1で一定期間ライブチャートでインジケータを見た場合、どのように違いや再描画が観察できるのでしょうか?

 
これは簡単な問題ではないようで、多くのコーディングの専門家の能力を超えています。
 

まあ、私には簡単な問題のように見えますが、あなたがその答えを理解していないだけなのです。

添付の コードを試してみてください。

インジケータの描画ループを

   for(i=limit-1; i>=0; i--)
     {
      ExtBuffer1[i]=1.1*Fish1;
      Fish1=ExtBuffer1[i];
      if(Fish1>=EMPTY_VALUE)
         Fish1=1;
     }

とし、Fish1の初期値を

Fish1=0.00001;

通常のティックでM1チャート上でそれを実行します。様々なピークが形成されているのがわかると思います。

インジケータを再初期化すると、これらのピークがすべて消えるのがわかります。

また、インターネット接続があまり良くない場合、1つのバーを見逃すと、インジケータ全体が再計算されるため、ピークが消えます。

なぜかわかりますか?

ファイル:
 
GumRai:

まあ、私には簡単な問題のように見えますが、あなたがその答えを理解していないだけなのです。

添付のコードを試してみてください。

インジケータの描画ループを

とし、Fish1の初期値を

通常のティックでM1チャート上でそれを実行します。様々なピークが形成されているのがわかると思います。

インジケータを再初期化すると、これらのピークがすべて消えるのがわかります。

また、インターネット接続があまり良くない場合、1つのバーを見逃すと、インジケータ全体が再計算され、ピークが消えます。

なぜかわかりますか?

GumRaiさんへ。

私の言いたいことを汲み取っていただいたようです。

以下のスクリーンショットをご覧ください。御社のインジケータを右クリックし、「更新」を選択すると、ピークの位置が変わりました。

しかし、その理由がまだわかりません。そのため、私の再描画のインジケータに根本的な原因を見出すことができません。

.修正したインジケータによると、指数線を描くはずなのですが。なぜ、間隔を空けてピークを描くのでしょうか?空値があるからでしょうか?

.リフレッシュするとピークの位置が変わってしまうのはなぜですか?

.ピークの消失がまだ確認できない。どうすれば「再初期化」できるのでしょうか?

リフレッシュ前

リフレッシュ後

 
jollydragon: しかし、その理由がまだわかりません。というのも、私の再描画インジケータでは根本的な原因がわからないのです。

   for(i=limit-1; i>=0; i--)
     {
      ExtBuffer1[i]=1.1*Fish1;
      Fish1=ExtBuffer1[i];
      if(Fish1>=EMPTY_VALUE)
         Fish1=1;
     }

すべての反復処理で、(最初を除いて)Fish 1は前のバッファ要素の値ですが、ExtBuffer1[limit] に初期化しません。

そこで、最初の反復(limit == barsのとき)には、ExtBuffer1[0] = 1.1*ExtBuffer1[1] を設定します。

しかし、その後のティックでは(limit == 1のとき)ExtBuffer1[0] = 1.1*0.00001 に設定されます。