NormalizeDoubleによるMT4での数値の丸め方 - ページ 3 12345678910...17 新しいコメント Vladimir Karputov 2016.01.21 13:42 #21 数学6年生。教科書Nikolsky S.M., Potapov M.K. Moscow: 2012.- 256 с丸め込み。 削除済み 2016.01.25 13:30 #22 何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。NormalizeDouble(0.055,2) は、「0.055」という数字を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味でした。このMKLの機能を理解するのに苦労しています。BORROWNの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。 つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)可能なのでしょうか?それとも、いつも四捨五入して、間違った数字を出す必要があるのでしょうか? Vladimir Karputov 2016.01.25 13:54 #23 もう決心したほうがいいよ。四捨五入しているのです。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム NormalizeDoubleによるMT4での数値の丸め方 ローマン・スタリンスキー 2016.01.21 10:03 こんにちは。何が問題なのか、教えてください。関数NormalizeDouble(0.055,2) は、なぜ数値"0.055" を "0.06" に丸める のですか?分数の丸め機能ではありません。それはない。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム NormalizeDoubleによるMT4での数値の丸め方 ローマン・スタリンスキー 2016.01.25 14:30 何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。NormalizeDouble(0.055,2) は、数値「0.055」を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味です。このMKLの機能を理解するのに苦労しています。DIRECTの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。 つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)可能なのでしょうか?それとも、ずっと丸くして、いらない数字を出す必要があるのでしょうか?そして、実験のために。//+------------------------------------------------------------------+ //| NormalizeDouble.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs #property description "Проверка NormalizeDouble" input double value=0.055; // нормализуемое число input int digits=2; // кол-во знаков после запятой //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print("Число ",value," округлённое с точностью до ",digits," знаков = ",NormalizeDouble(value,digits)); } //+------------------------------------------------------------------+ ファイル: Test.mq5 2 kb Rounding numbers in MT4 リバーシング: 最大ドローダウンの削減と他の相場のテスト 時間の取扱い(第2部): 関数 Dmitry Fedoseev 2016.01.25 14:44 #24 Roman Starinskij:何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。NormalizeDouble(0.055,2) は、「0.055」という数値を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味でした。このMKLの機能を理解するのに苦労しています。BORROWNの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。 つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)可能なのでしょうか?それとも、いつも丸くして、いらない数字を出す必要があるのでしょうか?トリミングが必要ならトリミングを、ラウンドが必要ならラウンドを。NormalkizeDouble()関数が丸くなり、これが最も頻繁に必要とされるものです。NormalizeDouble()の代わりにRoundDouble()を使用すべきと考える理由は何でしょうか?この世界はあなたがつくったのですか?ボールが転がり、正方形の角が4つあるのはいいのか? Slava 2016.01.25 15:00 #25 Roman Starinskij:何とも白熱した話題になってしまった。 全てはトピックスターターが言語ドキュメントを読まず、言われたことを聞かないからです 削除済み 2016.02.22 04:57 #26 Slawa: これは、著者が言語ドキュメントを読まず、言われたことを聞いていないからです。分数の割り算や四捨五入の以下の動作が少し不明です。2つの方程式があります。 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036推奨されているNormalizeDouble関数を 使用すると、このような結果になります。 0.03999999999999999 = 0.04 0.036 = 0.04最初の例では、本当に0.04という 値を得る必要がありますが、2番目の例では0.03が 必要です(これは通常の電卓がそうであるように)。 完全ではない分数が返されるので、NormalizeDoubleを使うべきですが、2番目の例では、この関数は正しくない値を返すので、最初の例にも使わないわけにはいきません。 Andrey Dik 2016.02.22 05:14 #27 Roman Starinskij:分数の割り算や丸めについて、以下の動作が少し不明です。2つの方程式があります。 0.06-0.02 = 0.03999999999999999 0.06-0.024 = 0.036推奨されているNormalizeDouble関数を 使用すると、このような結果になります。 0.03999999999999999 = 0.04 0.036 = 0.04最初の例では、本当に0.04という 値を得る必要がありますが、2番目の例では0.03が 必要です(これは通常の電卓がそうであるように)。 完全ではない分数が返されるので、NormalizeDoubleを使うべきですが、2番目の例では、この関数は正しくない値を返すので、最初の例にも使わないわけにはいきません。通常の電卓では正しく計算されない、はずだ。 Lilita Bogachkova 2016.02.22 07:17 #28 Slawa: 全ては、トピックスターターが言語ドキュメントを読まず、言われたことを聞かなかったからですN+1 digit < 5 ならば、N 番目の桁を保持し、N+1 以降の桁は全てゼロにする。N+1 digit≥ 5 の場合、N番目の桁を1つインクリメント し、N+1 、それ以降の桁は全て0にします。申し訳ありませんが、なぜ「2」で丸めるとすぐに=0.06000000にならないのか、まだ理解していません。void OnStart() { double v1 = NormalizeDouble(0.055,3); double v2 = NormalizeDouble(0.0549,3); v1=NormalizeDouble(v1,2); v2=NormalizeDouble(v2,2); Print("v1 = ",DoubleToString(v1),", v2 = ",DoubleToString(v2)); } v1 = 0.06000000, v2 = 0.06000000void OnStart() { double v1 = NormalizeDouble(0.055,2); double v2 = NormalizeDouble(0.0549,2); Print("v1 = ",DoubleToString(v1),", v2 = ",DoubleToString(v2)); } v1 = 0.06000000, v2 = 0.05000000void OnStart() { for(int i=7;i>=1;i--) { double v1 = 1.1234567; double v2 = NormalizeDouble(v1,i+1); v1=NormalizeDouble(v1,i); v2=NormalizeDouble(v2,i); Print("v1 = ",i," = ",DoubleToString(v1,7),", v2 = ",i," = ",DoubleToString(v2,7)); } Print("---"); }---v1 = 1 = 1.1000000, v2 = 1 = 1.1000000v1 = 2 = 1.1200000, v2 = 2 = 1.1200000v1 = 3 = 1.1230000, v2 = 3 = 1.1240000v1 = 4 = 1.1235000、v2 = 4 = 1.1235000v1 = 5 = 1.1234600, v2 = 5 = 1.1234600v1 = 6 = 1.1234570, v2 = 6 = 1.1234570v1 = 7 = 1.1234567, v2 = 7 = 1.1234567 です。 Rounding numbers in MT4 Questions from Beginners MQL5 Representation of an object Dmitry Fedoseev 2016.02.22 08:17 #29 lilita bogachkova:申し訳ないが、「2」で四捨五入すると、なぜ「= 0.06000000」にならないのかがまだ理解できない なぜなら、0.6だから、0.5は不正でしか得られないから。 Ihor Herasko 2016.02.22 08:24 #30 lilita bogachkova:申し訳ないが、「2」で四捨五入すると、なぜ「= 0.06000000」にならないのか、まだ理解できていない1桁だけ正規化する場合は、0、1、2、3、4→0、5、6、7、8、9→1という単純なもので、1桁だけ正規化する場合は、0、1、2、3、4→0、5、6、7、8、9→1という単純なものです。2桁を正規化する場合、0〜49→0、50〜99→1というように2桁の数字が考慮される。結局のところ、1.49という数字を整数に丸めなければならない場合、1に対する利用可能な100分の49の距離に対して、100分の51である2を本当に得なければならないのだろうか。3桁、4桁などでも同じです。 12345678910...17 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
数学6年生。教科書Nikolsky S.M., Potapov M.K. Moscow: 2012.- 256 с
丸め込み。
何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。
NormalizeDouble(0.055,2) は、「0.055」という数字を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味でした。
このMKLの機能を理解するのに苦労しています。BORROWNの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。
つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)
可能なのでしょうか?それとも、いつも四捨五入して、間違った数字を出す必要があるのでしょうか?
もう決心したほうがいいよ。四捨五入しているのです。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
NormalizeDoubleによるMT4での数値の丸め方
ローマン・スタリンスキー 2016.01.21 10:03
こんにちは。何が問題なのか、教えてください。
関数NormalizeDouble(0.055,2) は、なぜ数値"0.055" を "0.06" に丸める のですか?
分数の丸め機能ではありません。
それはない。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
NormalizeDoubleによるMT4での数値の丸め方
ローマン・スタリンスキー 2016.01.25 14:30
何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。
NormalizeDouble(0.055,2) は、数値「0.055」を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味です。
このMKLの機能を理解するのに苦労しています。DIRECTの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。
つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)
可能なのでしょうか?それとも、ずっと丸くして、いらない数字を出す必要があるのでしょうか?
そして、実験のために。
何とも白熱した話題になってしまった。MT4は四捨五入で正しく動作するようです。
NormalizeDouble(0.055,2) は、「0.055」という数値を「0.06」に丸める のではなく、「0.05」に切り詰めるという意味でした。
このMKLの機能を理解するのに苦労しています。BORROWNの数値を正しい位置に持っていくだけならともかく、「1.0015223567」をNormalizeDouble関数で丸める意味がよくわかりません。
つまり、NormalizeDouble(1.001526789, 5)とすると、「1.00152」となるのです。四捨五入して"1.00153" とする必要はない。そのためのRoundDouble関数があるはずです =)
可能なのでしょうか?それとも、いつも丸くして、いらない数字を出す必要があるのでしょうか?
トリミングが必要ならトリミングを、ラウンドが必要ならラウンドを。NormalkizeDouble()関数が丸くなり、これが最も頻繁に必要とされるものです。
NormalizeDouble()の代わりにRoundDouble()を使用すべきと考える理由は何でしょうか?この世界はあなたがつくったのですか?ボールが転がり、正方形の角が4つあるのはいいのか?
何とも白熱した話題になってしまった。
これは、著者が言語ドキュメントを読まず、言われたことを聞いていないからです。
分数の割り算や四捨五入の以下の動作が少し不明です。
2つの方程式があります。
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
推奨されているNormalizeDouble関数を 使用すると、このような結果になります。
0.03999999999999999 = 0.04
0.036 = 0.04
最初の例では、本当に0.04という 値を得る必要がありますが、2番目の例では0.03が 必要です(これは通常の電卓がそうであるように)。
完全ではない分数が返されるので、NormalizeDoubleを使うべきですが、2番目の例では、この関数は正しくない値を返すので、最初の例にも使わないわけにはいきません。
分数の割り算や丸めについて、以下の動作が少し不明です。
2つの方程式があります。
0.06-0.02 = 0.03999999999999999
0.06-0.024 = 0.036
推奨されているNormalizeDouble関数を 使用すると、このような結果になります。
0.03999999999999999 = 0.04
0.036 = 0.04
最初の例では、本当に0.04という 値を得る必要がありますが、2番目の例では0.03が 必要です(これは通常の電卓がそうであるように)。
完全ではない分数が返されるので、NormalizeDoubleを使うべきですが、2番目の例では、この関数は正しくない値を返すので、最初の例にも使わないわけにはいきません。
通常の電卓では正しく計算されない、はずだ。
全ては、トピックスターターが言語ドキュメントを読まず、言われたことを聞かなかったからです
N+1 digit < 5 ならば、N 番目の桁を保持し、N+1 以降の桁は全てゼロにする。
N+1 digit≥ 5 の場合、N番目の桁を1つインクリメント し、N+1 、それ以降の桁は全て0にします。
申し訳ありませんが、なぜ「2」で丸めるとすぐに=0.06000000にならないのか、まだ理解していません。
v1 = 0.06000000, v2 = 0.06000000
v1 = 0.06000000, v2 = 0.05000000
---
申し訳ないが、「2」で四捨五入すると、なぜ「= 0.06000000」にならないのかがまだ理解できない
申し訳ないが、「2」で四捨五入すると、なぜ「= 0.06000000」にならないのか、まだ理解できていない
1桁だけ正規化する場合は、0、1、2、3、4→0、5、6、7、8、9→1という単純なもので、1桁だけ正規化する場合は、0、1、2、3、4→0、5、6、7、8、9→1という単純なものです。
2桁を正規化する場合、0〜49→0、50〜99→1というように2桁の数字が考慮される。結局のところ、1.49という数字を整数に丸めなければならない場合、1に対する利用可能な100分の49の距離に対して、100分の51である2を本当に得なければならないのだろうか。
3桁、4桁などでも同じです。