DoubleとFLOATの比較 - MathFloorの不明確なエラー - ページ 6

 
fxsaber:
はい。
ありがとうございました。
 
Vladislav Andruschenko:
ありがとうございました。
1ページ目に解答があったのですが...。すでに6ページ目に掲載されています。
 
fxsaber:
では、なぜ正規化やMathFloorがなくても動作するのでしょうか?
入力が0.95の場合?
 
Dmitry Fedoseev:
入力が0.95の場合?
理解できない。
 
Vladislav Andruschenko:
何を買えばいいのかよくわからないかもしれませんが、このオプションを見てください。
void OnStart()
{
double ask2 = 1.55557, ask3 = 1.55558, bid = 1.55555;
  Print("(ask2 + bid)/2 = ", (ask2 + bid)/2);
   Print("(ask3 + bid)/2 = ", (ask3 + bid)/2);
    int avPrice_2 = (int)NormalizeDouble((ask2/_Point + bid/_Point)/2, 0);
   int avPrice_3 = (int)NormalizeDouble((ask3/_Point + bid/_Point)/2, 0);
  Print("avPrice_2 = ", avPrice_2);
Print("avPrice_3 = ", avPrice_3);
}/*******************************************************************/
出来栄え
2017.02.27 00:03:54.453 00 (EURUSD.m,H1)        (ask2 + bid)/2 = 1.55556
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        (ask3 + bid)/2 = 1.555565
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        avPrice_2 = 155556
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        avPrice_3 = 155557
 

"Take Ask and Bid. "で、平均価格を算出する。スプレッドが奇数(3,5,7,9など)の場合は、平均価格をBidに近づけて等価する。"

タスクが設定されていない。

- 異様な広がりとはどういうことか。1,3,...,9 timesPoint か 1,3,...,17,57 times Point か? 四捨五入は単位セグメント内で動作する...

- closer to the Bid "とはどういう意味ですか?特に、スプレッドが43倍のPointなどの場合。Bidと何を同列に扱うかという話?

まず問題を明確にして、初めて明確な意思決定ができるのです。

同時に、偶数・奇数の話をしているのだから、この概念が意味を持つ整数に行くのが筋であろう。

double Ask,Bid,Middle; // Уже известные курсы Ask и Bid, вычисляемый средний курс
int Mash,Spr; // Множитель перехода к целым числам. Для 4-разрядного EURUSD 10000. И целочисленный спред

Mash=MathRound(1.0/_Point);
Spr=MathRound((Ask-Bid)*Mash); // Целочисленный спред
// Придаем конкретность среднему курсу.  Предполагаем, что "ближе к Бид" значит "ближайший меньший среднего арифметического Ask и Bid, кратный Point"
Spr=Spr >> 1; // Целочисленный спред, деленный на 2 с отбрасыванием остатка
Middle=Bid+Spr*_Point;


// Если предположение неверно, канва последующих разборов такая
if ((Spr &  1)  != 0)) {  // Спред нечетный
  }
else {  // Спред четный
  }

 
スクリプトは時系列からEURUSDの始値を2倍の配列に読み込んで、その配列をファイルに書き 込んでいます。1より大きい値であれば、すべて問題なかったのです。ところが、ゼロ年に1以下になることが、あまり頻繁にはなく、年間20回くらいあったとき、小数点第15位のどこかで1が切れて、それまでのものが全部9になるという不思議なことが起こり始めたのです。大したことではないが、いい加減なものだ。正規化はどこでもそうで、読み込み後とファイルへの書き込み前、記録中、正規化で1つの配列から別の配列への変換 - 何も機能しませんでした。時系列から読み込むときに1を足せば、すべてOKでした。結局、うんざりしてダウブルをフロートに変えて落ち着きました。
 
Vladimir:

"Take Ask and Bid. "で、平均価格を算出する。スプレッドが奇数(3,5,7,9など)の場合は、平均価格をBidに近づけて等価する。"

タスクが設定されていない。

実は、この作業は簡単なようで、小学生でもできる?:-) 私もそう思っていました。

しかし、サーバーからの価格設定やデータの正規化などには、意に介さない暗部があるものです。

私は9年間mqlでプログラミングをしていますが、正規化で問題になったことは一度もなく、1ミリポイントの精度でも常に正しく動作しています。

しかし、高い精度が求められる作業もあります。

そして、条件もあります。

名付けて。

  1. 我々は、ASCとBID価格を取る - 我々は、その平均価格を計算する=簡単? OK。
  2. したがって、スプレッドが奇数(たとえば3ポイント)の場合、余りなく割ることはできませんね。

そこで、もし残留があれば(スプレッドが均等でも残留する! :-))、低ポイント、すなわちBidに近い価格を平均化するような方法で価格を正規化しなければならない

例えば、こんな感じです。

  • asc = 1.23455 bid = 1.23457 spread = 2 平均価格:1.23456
  • アスク = 1.23455 ビッド = 1.23458 スプレッド = 3 平均価格:1.23456
  • ask = 1.23455 bid = 1.23459 spread = 4 平均価格:1.23457

そして、すべてがシンプルに見える?私は2日間、自分が馬鹿でないことを祈り続けました。テール、ダブル、トリブル、ビブルについて 理解する........................。

しかし!同じ計算式で、偶数スプレッドと奇数スプレッドで-状況によっては-計算式が機能しなかった のです。(前述) .

通貨には使えて、石油には 使えないということも含めて。

日本円で動作し、ある時点で米ドルで動作しなくなる可能性が あります。

月の影響を見ているのでは? アフリカの天気は............................?

でも、計算式がうまくいったと確信すると、その1ミリポイントに気づかず、「バン、バン、バン」と 作業してしまい、その1ミリポイントは逃げ出すか、邪魔な2ミリポイントを呼び出すことになるんです。

IMHO

バカ、プログラマー不足、小学生......と思ってくれてもいいんです。といった具合に。

しかし、事実は変わらない。

ダブル値の組み合わせが異なるとエラーが発生します。同時に、フロートですべてがクリアになります。

まだ、わかっていないんです。ヘルプはとても良いもので、いつも助けを求めている、それが普通です。 そして、10年後にはコミュニティに助けを求めるかもしれません。これが普通です。そして、落とし穴がわかっている場合は呼びかけに応じる--これが普通です。

もちろん、そのようなテストをした上で、なぜそうなるのかを自分で理解するために「余分な調査」をすることになります。

皆様、ご対応いただきありがとうございました。

 
Vladislav Andruschenko:

実は、この作業は簡単そうに見えて、小学生でもできるのでは?:-) 私もそう思っていました。

しかし、サーバーから取得した価格やデータの正規化など、意味もなく暗躍しているのです。

私は9年間mqlでプログラミングをしていますが、正規化で問題になったことは一度もなく、1ミリポイントの精度でも常に正しく動作しています。

しかし!同じ計算式で、偶数スプレッドと奇数スプレッドで-状況によっては-計算式が機能しなかった のです。(前述) .

異なる組み合わせで、2つの値を使用すると、エラーが発生します。同時に、フロートですべてがクリアになります。

Metakvoteによるデータの正規化は、一般的にどのような関係があるのでしょうか?この用語はプログラマーによって意味が異なり、丸めは全くしない。例えばIEEE規格754はこちら(http://www.softelectro.ru/ieee754.html)をご覧ください。 正規化されていない実数は、4バイト長の場合は1.17549421*10^(-38)まで、8バイト長の場合は4...*10^(-324)までですが、非常に稀で、もちろん授業の計算でも遭遇することはないでしょう。OrderSend を呼び出す必要がある場合は、この関数の要件に従って丸め込んでください。タスクで必要になるまで丸めを使用する必要はありません。

エラーはdoubleやfloatの形式ではなく、使用する演算で発生します。その数式で課題が解けなかったということは、その数式が課題に適していないことを物語っています。それ以上はない。正規化しない通常の計算では、どのようなエラーが発生するのか教えてください(上の投稿の部分です)。

Spr=MathRound((Ask-Bid)/_Point); Spr=Spr >>1; Middle=Bid+Spr*_Point。

IEEE 754 - стандарт двоичной арифметики с плавающей точкой
  • Yashkardin Vladimir
  • www.softelectro.ru
double-precision длина числа, бит 32 64 смещенная экспонента (E), бит 8 11 остаток от мантиссы (M), бит 23 52 смещение 127 1023 двоичное денормализованое число (-1)S∙0,M∙exp2-127 ,где M-бинарное (-1)S∙0,M∙exp2-1023 ,где M-бинарное двоичное нормализованое число (-1)S∙1,M∙exp2(E-127) ,где M-бинарное (-1)S∙1,M∙exp2(E-1023) ,где M-бинарное...
 
Vladislav Andruschenko:

実は、この作業は簡単なようで、小学生でもできる?:-) 私もそう思っていました。

しかし、サーバーから取得した価格やデータの正規化などには、そんな意味もないような闇があるのです。

私は9年間mqlでプログラミングをしていますが、正規化で問題になったことは一度もなく、1ミリポイントの精度でも常に正しく動作しています。

しかし、高い精度が求められる作業もあります。

そして、条件もあります。

名付けて。

  1. 我々は、ASCとBID価格を取る - 我々は、その平均価格を計算する=簡単? OK。
  2. したがって、スプレッドが奇数(たとえば3ポイント)の場合、余りなく割ることはできませんね。

そこで、もし残留があれば(スプレッドが均等でも残留する! :-))、低ポイント、すなわちBidに近い価格を平均化するような方法で価格を正規化しなければならない

例えば、こんな感じです。

  • asc = 1.23455 bid = 1.23457 spread = 2 平均価格:1.23456
  • アスク = 1.23455 ビッド = 1.23458 スプレッド = 3 平均価格:1.23456
  • ask = 1.23455 bid = 1.23459 spread = 4 平均価格:1.23457

そして、すべてがシンプルに見える?私は2日間、自分が馬鹿でないことを祈り続けました。テール、ダブル、トリブル、ビブルについて 理解する........................。

しかし!同じ計算式で、偶数スプレッドと奇数スプレッドで-状況によっては-計算式が機能しなかった のです。(前述) .

通貨には使えて、石油には 使えないということも含めて。

日本円で動作し、ある時点で米ドルで動作しなくなる可能性が あります。

月の影響を見ているのでは? アフリカの天気は............................?

でも、計算式がうまくいったと確信すると、その1ミリポイントに気づかず、「バン、バン、バン」と 作業してしまい、その1ミリポイントは逃げ出すか、邪魔な2ミリポイントを呼び出すことになるんです。

IMHO

バカ、プログラマー不足、小学生......と思ってくれてもいいんです。といった具合に。

しかし、事実は変わらない。

ダブル値の組み合わせが異なるとエラーが発生します。同時に、フロートですべてがクリアになります。

まだ、わかっていないんです。ヘルプはとても良いもので、いつもお願いするのが普通です。 また、10年後に地域の方にお願いすることもあるかもしれません。これが普通です。そして、落とし穴がわかっている場合は呼びかけに応じる--これが普通です。

もちろん、そのようなテストをした上で、なぜそうなるのかを自分で理解するために「余分な調査」をすることになります。

皆様、ご対応いただきありがとうございました。

目的によっては、完全に整数値にする価値がある場合もあります。神経を使わずに済みますね :-)一度、何段ものレベルを正確にマークアップしなければならない仕事があり、最初はダブルで苦労しましたが、すべてを0からの整数点に変換したら、すべてが簡単に、シンプルに、ミスなくできるようになりました。