MQL4ドキュメントに関するディスカッション - ページ 16

 
Yurixx:

そして、ダブルノーマライズの必要なタイミングを明示してほしい。

その通り、ここには明らかな誤解がある。この関数のヘルプには、この関数が全く役に立たない例が示されています。

double NormalizeDouble() 倍精度、整数値)
浮動小数点値を与えられた精度で丸める。double 型の正規化された値を返す。
計算されたStopLossとTakeProfitの値、および保留中の注文の建値は、あらかじめ定義されたDigitsの 変数に格納されている値で正規化する必要があります。
パラメータ
価値 - 浮動小数点値。
すうじ - 精度形式、小数点以下の桁数(0〜8)。
サンプルです。
 double var1=0.123456789; Print(DoubleToStr(NormalizeDouble(var1,5),5)); // 出力:0.12346

このダブルコンバージョンは、初めて見たとき、とても戸惑いました。実際、Expert Advisorのログにコードを出力すると

Print( DoubleToStr( var1, 5 );
おそらく、いくつかの取引関数を使った例の方が、はるかに有益でしょう。つまり、正規化が本当に必要なのはそこなのです。stdlib.mq4のCompareDoubles()関数を使った例も大変参考になります(初心者が必ずと言っていいほど踏むところです)。

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles(double number1,double number2)
{
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false); 
}
レナート それは選択肢としてないんですか?
 
せっかくなので、私が以前から悩んでいたことを質問してみたいと思います。以下はサンプルコードです。
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
1回目のリターン(0)と2回目のリターン(-1)の根本的な違いは何でしょうか?
インジケーター(またはExpert Advisor)の実行にどのような影響を与えるのですか?
負の値が返された場合はどうなりますか?
などと書いてもいいのでしょうか?
void start()
{
  //
  //...
  //
  return;
}
 
戻り値は端末で解析されないので、原理的に違いはありません(現時点では)。実は、これはプログラマー自身が、この場合はstart()の非標準的な終了(値マイナス1)があることを理解しやすくするための記録スタイルなのです。
 
PSmith:
また、 のような書き方をしてもいいのでしょうか。
void start()
{
  //
  //...
  //
  return;
}

例えば最近、私が書いているのはそんな感じです。:)しかも、ファイナルリターンも全く使っていない。ドキュメントのどこかに、voidのような 関数ではfinal returnは必要ない、とまで書いてあったような気がします。
 
ここでもう一つ疑問があるのですが、なぜ関数
doubleiVolume() 文字列シンボル,int timeframe,int shift)
は double 型の値を返すか?
 
元々はdoubleではなかったのですが、ある時突然、int型が 出来高の保存に必ずしも適していないことが判明しました(例えば、ボラティリティの高い商品の月次タイムフレームを例にとると)。 この場合、オーバーフローエラーが発生しやすくなります。
 

ドキュメント(データ型)より: 整数定数は-2147483648から2147483647までの 値を取ることができます。2002年7月、EURUSD: 1ヶ月のティック数の履歴の最大値、670000。この最大ティック量でも オーバーフローするのに3000ヶ月、つまり250年かかることになる。一方で、数量はさらに増える可能性もあるので、理論的にはそれほど実現不可能な数字ではないのですが......。

 
Mathemat:

ドキュメント(データ型)より: 整数定数は-2147483648から2147483647までの 値を取ることができます。2002年7月、EURUSD: 1ヶ月のティック数の履歴の最大値、670000。この最大ティック量でもオーバーフローするのに3000ヶ月、つまり250年かかることになる。一方で、数量はさらに増える可能性もあるので、理論的にはそれほど実現不可能な数字ではないのですが......。


私自身もその質問をしたところ、まさにそのような答えが返ってきました。信じがたいことでも。しかし、株式市場からの引用をMT4に入れると・・・。
 
同月に_DJI - 42228720!ああ...
 

Rosh さん、私があなたの沈黙を正しく理解するならば、どのようなケースで、どのような式や変数の正規化が必要なのか、明確なステートメントがありません。もしそうなら、もっと簡単な質問に答えることができるかもしれない。

int StLs=25;
double prc = Ask + StLs*Point;

それとも、自分で実験して見つけた方がいいのでしょうか?