エラー、バグ、質問 - ページ 443 1...436437438439440441442443444445446447448449450...3185 新しいコメント Vladimir Gomonov 2011.07.03 16:46 #4421 voix_kas:結果私のやり方が間違っているのか(修正してください)、MetaDriverが(アルゴリズムを設計する際に)理論的に間違えたのか、どちらかです。:)アルゴリズムの設計に3分(実装に7分)かかったことを考えると、かなりうまくいったと思います。MathFloor()関数は、明らかに完全にきれいに実装されているわけではありませんが、開発者はこれを改善する真の機会を得たのです。結局、いじくり回すことになった。楽しかったです。1時間近く実験してやっと安定した関数(CountSignedDigits(double x)のことです)を得ることができました。また、現在でもすべての入力値で正しく動作するかどうかはわかりません。 自動ストレステストは開発していませんので、手動で作成しました。 テストをお願いします。浮動小数点以下10桁までの安定した動作を期待します。int CountSignedDigits(double x) { for(int i=0; i<1000; i++,x*=10) { if(x-MathFloor(x+0.000000000005)<double(0.000000000005)) return i; } return -1; } Stress-test attached. // コードからいくつかの中間的な実現を削除していない。試してみたい・考えてみたいと思い、コメントに残しました。開発者も含めて。 ファイル: CSDigitTest.mq5 2 kb Vladimir Gomonov 2011.07.03 17:36 #4422 komposter: 1.ロットに対してdigを定義する必要はなく、適切なステップに正規化すればよい。2.取引要求 送信時のロット変数にゴミがあっても(小数点以下)、端末自身で破棄すること。少なくとも、このような構造を数年間使っていて、問題が生じたことはありません。4.再保険の場合は、小数点以下8桁まで正規化してもよい(積立金あり)-「正しい」正規化後にゴミが出たら、もっと遠くなる。最初の考え方は正しく、他の考え方は疑わしい。:) この実装は、 実用上は 問題ないが、"problem-starter"(c)で定義された人工的な条件では、不正確なものとなる。離散的なステップの場合、lot_minに対する相対値ではなく、0に対する相対値を生成します。:)ただし、気づいたら簡単に直せます。double komposterNormalizeLot(double lot, double lot_step, double lot_min, double lot_max) { lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step; if ( lot < lot_min ) lot = lot_min; if ( lot > lot_max ) lot = lot_max; return lot; } double metadriverNormalizeLot(double lot, double lot_step, double lot_min, double lot_max) { lot = NormalizeDouble((lot-lot_min) / lot_step, 0) * lot_step + lot_min; if ( lot > lot_max ) lot = lot_max; return lot; }// これらの真珠のすべてを、あまり真剣に受け止めないでください。明確化というのは、純粋に脳トレのための理論的なもので、実際にはlot_stepが例えば0.0231と同じというのは見たことがないので......。 ;) --- 2011.07.03 17:40 #4423 metadriverNormalizeLotのオプションは正しいです。私のNL()と同様にlot_minで 正しく説明されています。 Dmitriy Skub 2011.07.03 17:56 #4424 私のバリエーションもあります。一部の商品では、価格変化のステップがポイントより大きいことに注意してください。//--------------------------------------------------------------------- // Нормализация цены: //--------------------------------------------------------------------- double NormalizePrice( string _symbol, double _org_price ) { double norm_price = _org_price; double min_price_step = NormalizeDouble( current_tick_size / current_point, 0 ); norm_price = NormalizeDouble( NormalizeDouble(( NormalizeDouble( _org_price / current_point, 0 )) / min_price_step, 0 ) * min_price_step * current_point, current_digits ); return( norm_price ); } //--------------------------------------------------------------------- // Вычисление лота: //--------------------------------------------------------------------- double NormalizeLot( double _required_lot ) { double lot, k; if( current_min_lot_step > 0 ) { k = 1.0 / current_min_lot_step; } else { k = 1.0 / current_min_permitted_lot; } lot = MathFloor( _required_lot * k ) / k; if( lot < current_min_permitted_lot ) { lot = current_min_permitted_lot; } if( lot > current_max_permitted_lot ) { lot = current_max_permitted_lot; } lot = NormalizeDouble( lot, 2 ); return( lot ); } 削除済み 2011.07.03 18:31 #4425 ステップが ゼロからではなく、最小ロットから「行く」ことを公理とすると、正しいアルゴリズムは次のようになります。double voixkasNormalizeLot(double lot, double lot_step, double lot_min, double lot_max) { if ( lot < lot_min ) lot = lot_min; else lot = NormalizeDouble((lot-lot_min) / lot_step, 0) * lot_step + lot_min; if ( lot > lot_max ) lot = lot_max; return NormalizeDouble(Lot, 8); }コンポスター版では、ゼロからのステップを「進む」。私には、それが正しいとは思えません。 MetaDriverのバリエーションでは、負の値をスキップするコードになっています。=Р Vladimir Gomonov 2011.07.03 19:06 #4426 voix_kas:...MetaDriverのバリエーションでは、負の値をスキップするコードになっています。=Р:)) .....そうなんですか!?全く仕事にならない! ;-R ;-b ;-Rdouble voixkasNormalizeLot(double lot, double lot_step, double lot_min, double lot_max) { if ( lot < lot_min ) lot = lot_min; else lot = NormalizeDouble((lot-lot_min) / lot_step, 0) * lot_step + lot_min; if ( lot > lot_max ) lot = lot_max; return NormalizeDouble(L ot, 8); }まあ、どちらかというと、最短で、同時に「ある意味正確」なバリエーションは、これでしょう。double mdNormalizeLot(double lot, double lot_step, double lot_min, double lot_max) { lot = MathMin(lot, lot_min); lot = NormalizeDouble((lot-lot_min) / lot_step, 0) * lot_step + lot_min; return NormalizeDouble(MathMin(lot, lot_max), MathMax(CountSignedDigits(lot_min),CountSignedDigits(lot_step)); }しかも、lot_step、lot_min、 lot_maxの 無効と否定をチェックせずにです!!!!。:)))) 削除済み 2011.07.03 19:32 #4427 えー...神経を逆なでする:))最後の行は掲示板の投稿を手書きで修正したものなので、お許しください。=) ところで、あなたのコードもコンパイルされませんでした(最後の行に閉じ括弧を入れるのを忘れていました)。:-Р しかも、2〜3倍遅くなる(今、スクリプトで確認しました)のですが、チェックの質は同じです。:-Рとにかく、有効な整数を決定する適切なコードがない以上、私はComposterのアドバイスに従って、音量を小数点以下8桁まで正規化することにします。 落とし穴がないことを祈ります。皆さん、ありがとうございました。 --- 2011.07.03 19:45 #4428 あなたたちは面白い......なるほど。最初の投稿でNL()を与えたのは、その2ページ後です ;) 削除済み 2011.07.03 20:00 #4429 もうひとつ、達人たちに質問があります。多通貨のテストをすると、エラーが発生します(スクリーンショットを添付します)。 取引操作を行おうとしているが、No priceという答えが返ってくる。テスターによると、このペアの相場は 2011.01.0301:00:00 に始まり、一方 EURUSD も 2011.01.0300:00:00 から相場が始まっています。 このエラーを回避するために、相場の開始時刻を調べる方法はあるでしょうか? 削除済み 2011.07.03 20:06 #4430 voix_kas:もうひとつ、達人たちに質問があります。多通貨のテストをすると、エラーが発生します(スクリーンショットを添付します)。 取引操作を行おうとしているが、No priceという答えが返ってくる。テスターによると、このペアの相場は 2011.01.0301:00:00 に始まり、一方 EURUSD も 2011.01.0300:00:00 から相場が始まっています。このエラーを避けるために、相場の開始時刻を 知る方法はありますか? トレーディングセッションとクォートセッションは、問題の解決に役立たないのでしょうか? 1...436437438439440441442443444445446447448449450...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
結果
私のやり方が間違っているのか(修正してください)、MetaDriverが(アルゴリズムを設計する際に)理論的に間違えたのか、どちらかです。
:)
アルゴリズムの設計に3分(実装に7分)かかったことを考えると、かなりうまくいったと思います。
MathFloor()関数は、明らかに完全にきれいに実装されているわけではありませんが、開発者はこれを改善する真の機会を得たのです。
結局、いじくり回すことになった。楽しかったです。1時間近く実験してやっと安定した関数(CountSignedDigits(double x)のことです)を得ることができました。
また、現在でもすべての入力値で正しく動作するかどうかはわかりません。 自動ストレステストは開発していませんので、手動で作成しました。 テストをお願いします。
浮動小数点以下10桁までの安定した動作を期待します。
Stress-test attached. // コードからいくつかの中間的な実現を削除していない。試してみたい・考えてみたいと思い、コメントに残しました。開発者も含めて。1.ロットに対してdigを定義する必要はなく、適切なステップに正規化すればよい。
2.取引要求 送信時のロット変数にゴミがあっても(小数点以下)、端末自身で破棄すること。
少なくとも、このような構造を数年間使っていて、問題が生じたことはありません。
4.再保険の場合は、小数点以下8桁まで正規化してもよい(積立金あり)-「正しい」正規化後にゴミが出たら、もっと遠くなる。
最初の考え方は正しく、他の考え方は疑わしい。:)
この実装は、 実用上は 問題ないが、"problem-starter"(c)で定義された人工的な条件では、不正確なものとなる。離散的なステップの場合、lot_minに対する相対値ではなく、0に対する相対値を生成します。:)
ただし、気づいたら簡単に直せます。
// これらの真珠のすべてを、あまり真剣に受け止めないでください。明確化というのは、純粋に脳トレのための理論的なもので、実際にはlot_stepが例えば0.0231と同じというのは見たことがないので......。
;)
のオプションは正しいです。私のNL()と同様にlot_minで 正しく説明されています。
私のバリエーションもあります。一部の商品では、価格変化のステップがポイントより大きいことに注意してください。
ステップが ゼロからではなく、最小ロットから「行く」ことを公理とすると、正しいアルゴリズムは次のようになります。
コンポスター版では、ゼロからのステップを「進む」。私には、それが正しいとは思えません。
MetaDriverのバリエーションでは、負の値をスキップするコードになっています。=Р
...
MetaDriverのバリエーションでは、負の値をスキップするコードになっています。=Р
:)) .....そうなんですか!?全く仕事にならない! ;-R ;-b ;-R
まあ、どちらかというと、最短で、同時に「ある意味正確」なバリエーションは、これでしょう。
しかも、lot_step、lot_min、 lot_maxの 無効と否定をチェックせずにです!!!!。
:))))
えー...神経を逆なでする:))最後の行は掲示板の投稿を手書きで修正したものなので、お許しください。=)
ところで、あなたのコードもコンパイルされませんでした(最後の行に閉じ括弧を入れるのを忘れていました)。:-Р
しかも、2〜3倍遅くなる(今、スクリプトで確認しました)のですが、チェックの質は同じです。:-Р
とにかく、有効な整数を決定する適切なコードがない以上、私はComposterのアドバイスに従って、音量を小数点以下8桁まで正規化することにします。
落とし穴がないことを祈ります。
皆さん、ありがとうございました。
あなたたちは面白い......なるほど。
最初の投稿でNL()を与えたのは、その2ページ後です ;)
もうひとつ、達人たちに質問があります。多通貨のテストをすると、エラーが発生します(スクリーンショットを添付します)。
取引操作を行おうとしているが、No priceという答えが返ってくる。テスターによると、このペアの相場は 2011.01.0301:00:00 に始まり、一方 EURUSD も 2011.01.0300:00:00 から相場が始まっています。 このエラーを回避するために、相場の開始時刻を調べる方法はあるでしょうか?
もうひとつ、達人たちに質問があります。多通貨のテストをすると、エラーが発生します(スクリーンショットを添付します)。
取引操作を行おうとしているが、No priceという答えが返ってくる。テスターによると、このペアの相場は 2011.01.0301:00:00 に始まり、一方 EURUSD も 2011.01.0300:00:00 から相場が始まっています。このエラーを避けるために、相場の開始時刻を 知る方法はありますか?