エニュメレーションを一貫して行うにはどうしたらいいですか? - ページ 4

 
fxsaber:
標準のNormalizeDouble(ビルド1395)よりも約4倍高速化されました...は、開発者の松葉づえです。

ほぼ4倍速とは?コードを見せろ!
 
4回という回数も驚きですが...。
そして、そこでアレイやスイッチがどう転ぶかは、よくわからない。 純粋な数学だ。
 
Dmitry Fedoseev:
ほぼ4倍速とは?コードを教えろ!
検査用のコードベースには何日分あるかわからない。チェッカーが休みなのでしょう。
 
fxsaber:
日数不明で検査のためコドバザに。検査官は休暇中だろう。
今日から掲載が始まったようです。もしかしたら、私たちのところにも来てくれるかもしれません ))))
 
Ihor Herasko:
今日から掲載が始まったようです。もしかしたら、私たちにも届くかもしれません ))))
やったねしないんです。
 
Dmitry Fedoseev:
ほぼ4倍速とは?コードをお願いします

https://www.mql5.com/ru/code/16169

// Почти в четыре раза быстрее соответствующей стандартной функции (build 1395)
#define NormalizeDouble PRICE_COMPARE::MyNormalizeDouble
Price_Compare
Price_Compare
  • 投票: 1
  • 2016.08.25
  • fxsaber
  • www.mql5.com
Изящное и шустрое сравнение double-значений "цены".
 

この関数を使うときは、NormalizeDoubleよりも小さい範囲の値で正しく動作することに注意してください。

その理由は説明しませんので、ご自身でご想像ください。

NormalizeDouble関数が 動作します。

  1. 整数部が選択される - I
  2. 分数部を選択 - F
  3. F = F * 10^digits
  4. F=F(符号により+または-) 0.5
  5. F = (Fの整数部) / 10^digits
  6. 結果=I+F
 
すべてにおいて、感覚はなかった。
 
Ilyas:

この関数を使うときは、NormalizeDoubleよりも小さい範囲の値で正しく動作することに注意してください。

その理由は説明しませんので、ご自身でご想像ください。

NormalizeDouble関数が 動作します。

  1. 整数部を検出 - I
  2. 分数部を選択 - F
  3. F = F * 10^digits
  4. F=F(符号により+または-) 0.5
  5. F = (Fの整数部) / 10^digits(整数部)
  6. 結果=I+F

この機能の説明には、次のような注記があります。

計算されたStopLossとTakeProfitの値、および保留中の注文の建値の 値は、Digits()で得られる精度で正規化する必要が あります。

これは、最小価格ステップが10^Nであるシンボルにのみ当てはまります。ここで、Nは整数であり、正ではありません。最小価格ステップが異なる値を持っている場合、OrderSendの前に価格レベルを正規化することは無意味な操作であり、ほとんどの場合、偽のOrderSendが返されることになる。


ヘルプで古くなった表現を修正するのは良いアイデアです。

NormalizeDoubleは完全に信用を失いました。実装が遅れているだけでなく、複数の取引所シンボル(RTS、MIXなど)では意味がない。

提示された代替実装については、ポジティブ、ネガティブともにオリジナルと同等の精度を有しています。そして、同じように丸めも行います。ただ、動作は4倍速です。

 
fxsaber:

これは、最小価格ステップが10^N(Nは整数で正でない)である文字にのみ当てはまります。最小価格ステップが異なる値を持っている場合、OrderSendの前に価格レベルを正規化することは無意味な操作であり、ほとんどの場合、偽のOrderSendが返さ れることになる。

なぜ、そうする必要があるのでしょうか?