初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 154

 
paladin800:
つまり、1.33182を1.3318に変換する必要があるのですね。小数点以下5桁を切り捨てるか、4桁に切り上げるだけで、例えば、1.33186から1.3318、1.3319となるのでは?

質問は、バグがあるかどうかです。私の例でdoubleからintに変換する場合、結果は1つ少なくなります。ご自身でご確認ください。

   double max=NormalizeDouble(1.33182,4);  
   //double max=1.3318;
   Alert(int(max*10000));
Alertは 13318を出すべきなのに、13317を出す。intに丸めない 場合は、13318.0と正しく表示されます。
 

表現に違いがあれば教えてください。

if(bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize && bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize)

и

if(( bufferclose[1]<=MaxLine(1)-m_open_bar_error*ticksize) && ( bufferopen[1]<=MaxLine(1)-m_open_bar_error*ticksize))
 
sgreen:

表現に違いがあれば教えてください。

и

何かおかしいと思ったら、そうしてください。

if(bufferclose[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) && bufferopen[1]<= (  MaxLine(1)-m_open_bar_error*ticksize ) )
 
Rorschach:

質問は、バグがあるかどうかです。私の例でdoubleからintに変換する場合、結果は1つ少なくなります。ご自身でお確かめください。

アラートは13318を出力するはずですが、13317を出力しています。したがって、intに還元しない 場合は、正しく13318.0を出力します。
Alertはエラーを出さない。要は、正規化すると、要求された10進数のアナログに最も 近い2進数形式になりますが、多かれ少なかれ一致しないことがあります(あなたの場合)。有限の10進小数で表されるものが、有限の 2進数で表されるとは限らないからです。 表現方法
int(max*10000)

は丸めずに端数を切り捨てるので(つまり MathRound() ではなく MathFloor() に似ています)、正規化した数値が 13318 と正確に等しいかもしれませんが、例えば 13317,999999999997

桁数の少ない分数形式で出力する場合、正しい(期待される)結果に丸められ、また、...の分数部分が破棄される場合。ご自分の目で確かめてください。

わかりやすく説明できたでしょうか。

 
pronych:
シャープのパーシャルのアナログはあるのか、どうすればいいのか。

のように、#include<partial_class_code.mqh> を使って定義の断片を埋め込むことができます。

このように多重継承の真似事をする人もいる。:)

 
paladin800:

何か不都合があると思ったら、そうしてください。

すでに持っています。ちょっと気になったので。
 
sgreen:
もうやったよ。ちょっと気になったので。

なるほど。先ほどの質問に戻ると、この比較にこそ、レコードの本質が描ける。

if (A<=B && C<=D)     // 1
if ((A<=B) && (C<=D)) // 2

これらのエントリーに違いはありません。同時に、if-osの中に数学的な計算を 括り付けることをお勧めします。

if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
MetaDriver:
警告はエラーを発生させない。ポイントは、正規化すると、数は、要求された10進数のアナログに最も近い 2進数形式に導かれるが、(あなたの場合)大小の方向では一致しないかもしれないということです。有限の10進小数で表されるものが、常に有限の2進小数で表されるとは限らないので. 式は、次のとおりです。

の場合、丸めずに小数部分を捨ててしまうので(つまり MathRound() というより MathFloor() のように見える)、正規化された数値は 13318 というより 13317.99999999997 になるかもしれません。

桁数の少ない分数形式で出力する場合、正しい(期待される)結果に丸められ、また、...の分数部分が破棄される場合。ご自分の目で確かめてください。

わかりやすく説明できたでしょうか。

ありがとうございます、そうですか。

もう一つ質問ですが、intに変換しないとやっていけない場合、どう戦えばいいのでしょうか?

 
EAをテスト する際に、ブローカーの手数料を考慮する方法を教えてください。
 
Rorschach:

ありがとうございます、そうですか。

もう一つ質問ですが、intに転送しないとやっていけない場合、どのように対処しているのでしょうか?

で、イプシロン(ε)を2つほど足します。

DBL_EPSILON

1.0+DBL_EPSILON != 1.0 の条件を満たす最小の数


Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Константы числовых типов - Документация по MQL5
理由: