MQL4マスターに質問です。ダブルコンペアについてもう一度。 - ページ 3 1234567891011 新しいコメント Glaswegian 2007.09.10 00:30 #21 komposter: そして、簡略化された形で、ComparePriceと同じように高速に動作します: しかし、それほど正確ではありません :) Pointで 値が異なると、半分くらいの確率で誤った結果を出してしまいます。 ところで、簡易モードと何か関係があるのでしょうか?簡略化された形式のComparePriceは、非簡略化されたイコールと同じくらい遅くなることがあります。 Dmitry Fedoseev 2007.09.10 00:36 #22 Irtron: 整数。 まず、自分の注文でExpert Advisorをいくつか書き、いきなりストップロスが1ポイント間違っていたというお客様の嵐を感じながら...。そして、NormalizeDouble()関数の不条理さを説明すると、どうなるんでしょうね=) 秘密を教えてあげよう。 私はこれまで、必要以上に多くのカスタムExpert Advisorを作成してきましたが、購入する理由がないため、購入したいという衝動に駆られたことは一度もありません。私のプログラムでは、ストップロスはあるべき位置にあることが保証されています(「見える」のではありません)。そのため、特に特殊な機能については、お客様に説明する必要がありません。EAを書く意味は、そうしたクライアントへの疑問や説明をなくすことにあるように思います。 また、NormalizeDouble()関数なしで、どのようにしてあるべき場所に確実に位置づけることができるのでしょうか?また、NormalizeDouble()を使わずに説明から解放されるにはどうしたらいいのでしょうか? Владимир 2007.09.10 00:42 #23 Irtron: VBAG です。 そして、注文からサーバーから取り出した価格も、まだ正規化する必要があることが判明しました!!!! それはないでしょう。MTのガワはもうほとんど正規化されていない。 昔も今も、理解しがたい過去のデータでテストすると、Expert Advisorのパフォーマンスが理解できない、という話はよく聞きます。 その通り、間違った記事があったのを覚えています。しかし、テスターにとって致命的だったのは、ノーマライズができないことだった。何でもいいんです。 また、ノーマライズせずに0などと比較する場合、インジケータダブりをどのように処理するのでしょうか。とても興味深いです。 Glaswegian 2007.09.10 00:49 #24 VBAG: また、ノーマライズせずに0などと比較する場合、インジケーターのダブりをどう処理するのでしょうか。とても興味深いです。 信じられないかもしれませんが :) double cci; cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1); if (cci > 0.) Print("Above"); else if (cci < 0.) Print("Below"); else Print("Bingo!"); Владимир 2007.09.10 01:04 #25 Irtron: VBAG です。 また、ノーマライズせずに0などと比較する場合、インジケーターのダブりをどう処理するのでしょうか。とても興味深いです。 信じられないかもしれませんが :) double cci; cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1); if (cci > 0.) Print("Above"); else if (cci < 0.) Print("Below"); else Print("Bingo!"); ええ、まあ...- というのは理解できる。それぞれの状況において、最もシンプルな解決策を求めるという、あなたの考え方は理解できました。 Dmitry Fedoseev 2007.09.10 01:16 #26 VBAGはこのスクリプトを見てくださいint start() { //---- string str; bool ok1,ok2; for(int i=0;i<10;i++){ double NotNormPrice_1=StrToDouble("1.1111"+i); for(int j=0;j<10;j++){ double NotNormPrice_2=StrToDouble("1.1111"+j); if(NormalizeDouble(NotNormPrice_1,4)==NormalizeDouble(NotNormPrice_2,4)){ str="Metod 1: "+DoubleToStr(NotNormPrice_1,5)+" = "+DoubleToStr(NotNormPrice_2,5)+" "; ok1=true; } else{ str="Metod 1: "+DoubleToStr(NotNormPrice_1,5)+" != "+DoubleToStr(NotNormPrice_2,5)+" "; ok1=false; } if(NormalizeDouble(NotNormPrice_1-NotNormPrice_2,4)==0.0){ str=str+"Metod 2: "+DoubleToStr(NotNormPrice_1,5)+" = "+DoubleToStr(NotNormPrice_2,5); ok2=true; } else{ str=str+"Metod 2: "+DoubleToStr(NotNormPrice_1,5)+" != "+DoubleToStr(NotNormPrice_2,5); ok2=false; } if(ok1!=ok2)Print(str); } } //---- return(0); } とその成果 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11115 Metod 2: 1.11111 = 1.11115 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11116 Metod 2: 1.11111 = 1.11116 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11115 Metod 2: 1.11112 = 1.11115 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11116 Metod 2: 1.11112 = 1.11116 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11117 Metod 2: 1.11112 = 1.11117 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11115 Metod 2: 1.11113 = 1.11115 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11116 Metod 2: 1.11113 = 1.11116 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11117 Metod 2: 1.11113 = 1.11117 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11115 Metod 2: 1.11114 = 1.11115 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11116 Metod 2: 1.11114 = 1.11116 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11117 Metod 2: 1.11114 = 1.11117 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11118 Metod 2: 1.11114 = 1.11118 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11119 Metod 2: 1.11114 = 1.11119 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11111 Metod 2: 1.11115 = 1.11111 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11112 Metod 2: 1.11115 = 1.11112 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11113 Metod 2: 1.11115 = 1.11113 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11114 Metod 2: 1.11115 = 1.11114 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11111 Metod 2: 1.11116 = 1.11111 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11112 Metod 2: 1.11116 = 1.11112 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11113 Metod 2: 1.11116 = 1.11113 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11114 Metod 2: 1.11116 = 1.11114 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11112 Metod 2: 1.11117 = 1.11112 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11113 Metod 2: 1.11117 = 1.11113 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11114 Metod 2: 1.11117 = 1.11114 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11118 != 1.11114 Metod 2: 1.11118 = 1.11114 09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11119 != 1.11114 Metod 2: 1.11119 = 1.11114 どちらの算術が好きかは、ご自身でお決めください。 指標線(例えばMA)と価格(Price_Now>MA_Now、Previous_Price<=Previous_MA)のクロスを判定する場合、常に8桁に正規化する必要があります。 Glaswegian 2007.09.10 01:18 #27 Integer: は、8 桁に正規化することが必須である。 いや、なぜ8人に減らしたのか?:)7、9、6もある。4を目指す人もいる。 本当に、なぜ8点なのか?基準は何ですか? Glaswegian 2007.09.10 01:23 #28 VBAG: それぞれの状況において、最もシンプルな解決策を探すという姿勢は理解できます。 訂正します。しかし、残念ながら、それは必ずしも簡単なことではありません。 Dmitry Fedoseev 2007.09.10 01:33 #29 Irtron: 整数。 は、8 桁に正規化することが必須である。 いいえ、なぜ8までなのでしょうか?:)7、9、6もある。4を目指す人もいる。 本当に、なぜ8点なのか?基準は何ですか? 仮に 価格=1.1111 ma = 1.11110001 8桁に正規化すれば、マ>プライスは正しい。桁数を少なくして正規化すると、両者が等しくなる-不正確となる。 このようにして、最大限の精度を得ることができる。 9桁に正規化してもうまくいきません。まるで、価格が9桁でインジケーターが8桁、あるいはその逆(忘れた)、要するに未知の謎に覆われているのである。 Dmitry Fedoseev 2007.09.10 01:36 #30 Irtron: double cci; cci = iCCI(NULL, 0, 14, PRICE_CLOSE, 1); if (cci > 0.) Print("Above"); else if (cci < 0.) Print("Below"); else Print("Bingo!"); このメソッドは合格です。今のところ、誰もその結果の誤差に気づいていない)。 1234567891011 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、簡略化された形で、ComparePriceと同じように高速に動作します:
Pointで 値が異なると、半分くらいの確率で誤った結果を出してしまいます。
ところで、簡易モードと何か関係があるのでしょうか?簡略化された形式のComparePriceは、非簡略化されたイコールと同じくらい遅くなることがあります。
まず、自分の注文でExpert Advisorをいくつか書き、いきなりストップロスが1ポイント間違っていたというお客様の嵐を感じながら...。そして、NormalizeDouble()関数の不条理さを説明すると、どうなるんでしょうね=)
秘密を教えてあげよう。
私はこれまで、必要以上に多くのカスタムExpert Advisorを作成してきましたが、購入する理由がないため、購入したいという衝動に駆られたことは一度もありません。私のプログラムでは、ストップロスはあるべき位置にあることが保証されています(「見える」のではありません)。そのため、特に特殊な機能については、お客様に説明する必要がありません。EAを書く意味は、そうしたクライアントへの疑問や説明をなくすことにあるように思います。
また、NormalizeDouble()関数なしで、どのようにしてあるべき場所に確実に位置づけることができるのでしょうか?また、NormalizeDouble()を使わずに説明から解放されるにはどうしたらいいのでしょうか?
そして、注文からサーバーから取り出した価格も、まだ正規化する必要があることが判明しました!!!!
昔も今も、理解しがたい過去のデータでテストすると、Expert Advisorのパフォーマンスが理解できない、という話はよく聞きます。
また、ノーマライズせずに0などと比較する場合、インジケータダブりをどのように処理するのでしょうか。とても興味深いです。
また、ノーマライズせずに0などと比較する場合、インジケーターのダブりをどう処理するのでしょうか。とても興味深いです。
また、ノーマライズせずに0などと比較する場合、インジケーターのダブりをどう処理するのでしょうか。とても興味深いです。
ええ、まあ...- というのは理解できる。それぞれの状況において、最もシンプルな解決策を求めるという、あなたの考え方は理解できました。
とその成果
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11115 Metod 2: 1.11111 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11111 != 1.11116 Metod 2: 1.11111 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11115 Metod 2: 1.11112 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11116 Metod 2: 1.11112 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11112 != 1.11117 Metod 2: 1.11112 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11115 Metod 2: 1.11113 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11116 Metod 2: 1.11113 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11113 != 1.11117 Metod 2: 1.11113 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11115 Metod 2: 1.11114 = 1.11115
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11116 Metod 2: 1.11114 = 1.11116
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11117 Metod 2: 1.11114 = 1.11117
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11118 Metod 2: 1.11114 = 1.11118
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11114 != 1.11119 Metod 2: 1.11114 = 1.11119
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11111 Metod 2: 1.11115 = 1.11111
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11112 Metod 2: 1.11115 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11113 Metod 2: 1.11115 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11115 != 1.11114 Metod 2: 1.11115 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11111 Metod 2: 1.11116 = 1.11111
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11112 Metod 2: 1.11116 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11113 Metod 2: 1.11116 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11116 != 1.11114 Metod 2: 1.11116 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11112 Metod 2: 1.11117 = 1.11112
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11113 Metod 2: 1.11117 = 1.11113
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11117 != 1.11114 Metod 2: 1.11117 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11118 != 1.11114 Metod 2: 1.11118 = 1.11114
09:04:13 NormExperiment EURUSD,M5: Metod 1: 1.11119 != 1.11114 Metod 2: 1.11119 = 1.11114
どちらの算術が好きかは、ご自身でお決めください。
指標線(例えばMA)と価格(Price_Now>MA_Now、Previous_Price<=Previous_MA)のクロスを判定する場合、常に8桁に正規化する必要があります。
は、8 桁に正規化することが必須である。
いや、なぜ8人に減らしたのか?:)7、9、6もある。4を目指す人もいる。
本当に、なぜ8点なのか?基準は何ですか?
訂正します。しかし、残念ながら、それは必ずしも簡単なことではありません。
は、8 桁に正規化することが必須である。
いいえ、なぜ8までなのでしょうか?:)7、9、6もある。4を目指す人もいる。
本当に、なぜ8点なのか?基準は何ですか?
仮に
価格=1.1111
ma = 1.11110001
8桁に正規化すれば、マ>プライスは正しい。桁数を少なくして正規化すると、両者が等しくなる-不正確となる。 このようにして、最大限の精度を得ることができる。
9桁に正規化してもうまくいきません。まるで、価格が9桁でインジケーターが8桁、あるいはその逆(忘れた)、要するに未知の謎に覆われているのである。
このメソッドは合格です。今のところ、誰もその結果の誤差に気づいていない)。