バックテストで問題が見つかり、根本的な原因がわからない! - ページ 3 12345 新しいコメント moonsboy 2015.05.06 05:46 #21 iHighest() は、'i' の左側または右側の期間のバーを返すのですか? MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)];また、この投稿のすぐ前にある私の前回の投稿も参照して ください。 ffoorr 2015.05.06 15:14 #22 JollyDragonさんへ。インジケーターの再計算をご覧いただき、ありがとうございます。フィッシャー コードはいつも同じで、簡単に見分けることができます。多くのインディケータがそうであるように、このコードはデータを再投入するだけです(彼らはバー1、2、3の過去の値を保存します)。 for(i=limit-1; i>=0; i--) { MaxH = High[iHighest(NULL,0,MODE_HIGH,Solar_period,i)]; MinL = Low[iLowest(NULL,0,MODE_LOW,Solar_period,i)]; price = (High[i]+Low[i])/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i]; if(ExtBuffer0[i]>0) ExtBuffer1[i]=Solar_limit; else ExtBuffer1[i]=-Solar_limit; } Keith Watford 2015.05.06 19:24 #23 jollydragon: iHighest() は、'i' の左側または右側の期間のバーを返すのですか? 左側 moonsboy 2015.05.07 00:35 #24 ffoorrさん、GumRaiさん、ありがとう ございます。bar1のデータを保存するコードですが、bar0の左側のバーを再計算していないことがわかります。そのため、bar0より前のバーを再計算するコードがないため、何が原因で再描画されたのか、まだよくわかりません。for(i=limit-1; i>=0; i--) { MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)]; MinL = Low[iLowest(NULL,0,MODE_LOW,period,i)]; price = (High[i]+Low[i])/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i]; if(ExtBuffer0[i]>0) ExtBuffer1[i]=10; else ExtBuffer1[i]=-10; } Keith Watford 2015.05.07 03:05 #25 limitにどのような値が与えられているかはわかりません。このインジケータを右クリックして、ビンに移動させることを強くお勧めします ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i];Fish1がグローバル変数または静的変数で、最後のバーが再計算されると仮定するとFish1には、i=0のときにBar[0]のデータに基づいた値が与えられます。そして、bar[1]が再計算されるときに、bar[0]で作られたFish1の値を使って、bar[1]の値を作成しますこのインジケータが何を意図しているのか分かりませんが、i barに係るデータを使って、それをそれ以前のbarで使うようなインジケータは、悪いインジケータと言えるでしょう。 moonsboy 2015.05.08 00:46 #26 GumRai:リミットにどのような価値が与えられているかはわかりません。インジケータファイル全体が添付された投稿20を参照してください。以下、再度貼り付けます。添付ファイルsolarjoy.mq4(6.11 KB) 削除GumRai です。そして、bar[1]を再計算する際に、bar[0]で作成したFish1の値を使ってbar[1]の値を作成します。このインジケータが何を意図しているのか分かりませんが、i barに係るデータを使って、それをそれ以前のbarで使うようなインジケータは、ダメなインジケータだと思います。i'が'limit-1'から'0'に変化しているのがわかると思いますが、これはBarsの計算では左から右へ変化しています。つまり、bar[1]で計算されたFish1の値がbar[0]の値を作るために使われているのです。逆になぜそう考えるのか?ということで、このインジケータは、私のコード理解では、そういう悪いインジケータではないと思うのですが。とにかく、最終的に再描画を観察して、その種の悪いインジケータであることが認められました。 しかし、自己改善として再描画を防ぐには、どのようにコードを修正すればよいのか知りたい。for(i=limit-1; i>=0; i--) { ... } ffoorr 2015.05.08 07:46 #27 solar_joyと比較すると、シグナルが1本遅れていますが、同じインジケータです。https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965問題はインジケータではなく、常に変化する市場です。あるトレンド相場で完璧なシグナルを出すインジケータが、別の相場では誤ったシグナルを出す。StopLossとTakeProfitのどちらを使うにしても、良いインジケーターからのシグナルをフィルターにかけなければならない。 トレンド系であろうとなかろうと。フィッシャー・インジケータは機能すると思う、ただ1つのバーが遅れて、再計算する、それは再描画しない、これは再描画する、テスターのEAにそれを入れて、あなたは見るだろう。 https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354 Keith Watford 2015.05.08 09:28 #28 jollydragon: つまり、bar[1]で計算されたFish1の値がbar[0]の値を作るために使われるわけです。逆に考えるのはなぜでしょうか?しかし、私が参照したコードには指値の計算が含まれておらず、他の場所に含まれているかどうかを確認するために3ページ以上見返すつもりはありませんでした。このインジケータは、毎ティック ごとにbar[1]の再計算をしないのですね。しかし、それでも ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Fish1=ExtBuffer0[i];は、閉じたバーの最初の実行で、現在のバーで行うものとは異なる計算を許可します。新しいバーの最初のティックで何をするかというとExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[1];同じバーの次のティックでは、次のように計算します。ExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[0];これは一種の複利計算です。 ffoorr 2015.05.09 07:08 #29 solar_joy/fischerは、再計算しないfisherと 比較して、1小節早くシグナルを出すので、これは取引可能です。そして、1小節目と2小節目にシグナルを出し、2小節目と3小節目にシグナルがまだあるかどうかを見に行きます。もし、シグナルが消えていたら、注文を閉じます。 if(Joy2 <= EA_Limit && Joy1 >= EA_Limit) open_order( OP_BUY); if( (Joy3 <= EA_Limit && Joy2 >= EA_Limit)== false ) close_order( OP_BUY); moonsboy 2015.05.11 00:10 #30 ffoorr:solar_joyと比較すると、シグナルが1本遅れていますが、同じインジケータです。https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965フィッシャー・インジケータは動作すると思いますが、1本だけ遅れて再計算され、再描画はされません。https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354Dear ffoorr, I can't open the pages and can't access the site, www.forex-tsd.com.多分、私のインターネット設定に問題があるのでしょう。私のコードに注目してください。メインコンテンツのコードは10行ほどしかありません。しかし、歴史的なバーの再描画の根本的な原因を見つけるのはまだとても難しいです。 12345 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
iHighest() は、'i' の左側または右側の期間のバーを返すのですか?
また、この投稿のすぐ前にある私の前回の投稿も参照して ください。
JollyDragonさんへ。
インジケーターの再計算をご覧いただき、ありがとうございます。
フィッシャー コードはいつも同じで、簡単に見分けることができます。
多くのインディケータがそうであるように、このコードはデータを再投入するだけです(彼らはバー1、2、3の過去の値を保存します)。
iHighest() は、'i' の左側または右側の期間のバーを返すのですか?
ffoorrさん、GumRaiさん、ありがとう ございます。
bar1のデータを保存するコードですが、bar0の左側のバーを再計算していないことがわかります。
そのため、bar0より前のバーを再計算するコードがないため、何が原因で再描画されたのか、まだよくわかりません。
limitにどのような値が与えられているかはわかりません。
このインジケータを右クリックして、ビンに移動させることを強くお勧めします
Fish1がグローバル変数または静的変数で、最後のバーが再計算されると仮定すると
Fish1には、i=0のときにBar[0]のデータに基づいた値が与えられます。
そして、bar[1]が再計算されるときに、bar[0]で作られたFish1の値を使って、bar[1]の値を作成します
このインジケータが何を意図しているのか分かりませんが、i barに係るデータを使って、それをそれ以前のbarで使うようなインジケータは、悪いインジケータと言えるでしょう。
リミットにどのような価値が与えられているかはわかりません。
インジケータファイル全体が添付された投稿20を参照してください。以下、再度貼り付けます。
solarjoy.mq4(6.11 KB) 削除
そして、bar[1]を再計算する際に、bar[0]で作成したFish1の値を使ってbar[1]の値を作成します。
このインジケータが何を意図しているのか分かりませんが、i barに係るデータを使って、それをそれ以前のbarで使うようなインジケータは、ダメなインジケータだと思います。
i'が'limit-1'から'0'に変化しているのがわかると思いますが、これはBarsの計算では左から右へ変化しています。
つまり、bar[1]で計算されたFish1の値がbar[0]の値を作るために使われているのです。逆になぜそう考えるのか?
ということで、このインジケータは、私のコード理解では、そういう悪いインジケータではないと思うのですが。
とにかく、最終的に再描画を観察して、その種の悪いインジケータであることが認められました。
しかし、自己改善として再描画を防ぐには、どのようにコードを修正すればよいのか知りたい。
solar_joyと比較すると、シグナルが1本遅れていますが、同じインジケータです。
https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965
問題はインジケータではなく、常に変化する市場です。
あるトレンド相場で完璧なシグナルを出すインジケータが、別の相場では誤ったシグナルを出す。
StopLossとTakeProfitのどちらを使うにしても、良いインジケーターからのシグナルをフィルターにかけなければならない。
トレンド系であろうとなかろうと。
フィッシャー・インジケータは機能すると思う、ただ1つのバーが遅れて、再計算する、それは再描画しない、これは再描画する、テスターのEAにそれを入れて、あなたは見るだろう。
https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354
つまり、bar[1]で計算されたFish1の値がbar[0]の値を作るために使われるわけです。逆に考えるのはなぜでしょうか?
しかし、私が参照したコードには指値の計算が含まれておらず、他の場所に含まれているかどうかを確認するために3ページ以上見返すつもりはありませんでした。
このインジケータは、毎ティック ごとにbar[1]の再計算をしないのですね。
しかし、それでも
は、閉じたバーの最初の実行で、現在のバーで行うものとは異なる計算を許可します。
新しいバーの最初のティックで何をするかというと
同じバーの次のティックでは、次のように計算します。
これは一種の複利計算です。
solar_joy/fischerは、再計算しないfisherと 比較して、1小節早くシグナルを出すので、これは取引可能です。
そして、1小節目と2小節目にシグナルを出し、2小節目と3小節目にシグナルがまだあるかどうかを見に行きます。
もし、シグナルが消えていたら、注文を閉じます。
solar_joyと比較すると、シグナルが1本遅れていますが、同じインジケータです。
https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965
フィッシャー・インジケータは動作すると思いますが、1本だけ遅れて再計算され、再描画はされません。
https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354
Dear ffoorr, I can't open the pages and can't access the site, www.forex-tsd.com.多分、私のインターネット設定に問題があるのでしょう。
私のコードに注目してください。メインコンテンツのコードは10行ほどしかありません。
しかし、歴史的なバーの再描画の根本的な原因を見つけるのはまだとても難しいです。