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

 
Yurixx:

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

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

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

まさか、私の答えを待っていたとは思いませんでした。私の答えは、「このような場合は正規化を行わず、注文は正常に開く」です。しかし、手動で作った履歴を読み込んでテスターを走らせようとしたときがあったのですが、そのときは驚きましたね。ほとんどすべての場合において、正規化は念のため使用すべきです。OrderSend()の価格パラメータに挿入される自作の指標値(例えば、あらゆる種類のPivots)であれ、EA内部の複雑な計算(そして複雑ではないもの)であれ、すべての場合において、バターで何かを台無しにすることはできないのです。

しかし、OrderSend()で価格正規化を行うことが絶対に必要でない場合、明確な定式化ができないのが実情です。原則、夜型人間なら半年で感覚をつかむが、そんなことをしなくても、常に正常化できる。
 
また、今日ヘルパーをチェックしていたら、Data Conversions:

、あるフォーマットのデータから別のフォーマットのデータへの変換を行う関数群が見つかりました。

特に、NormalizeDouble() 関数は、価格表現の精度を保証するもので、取引サーバーが要求する精度を1桁 以上上回るような非正規化価格を取引操作で使用することはできません。
 
また、NormalizeDouble

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

これらは、ドキュメントで見てみたい例です。すべてがシンプルでわかりやすい。Expert Advisorやインジケータに挿入して、すぐに結果を見ることができます。
 
こんな感じか?
 

Rosh さん、同フォーラムの16ページをご覧ください。すでにこの機能とそれに対するヘルプの改善案について書いています。

 
とりあえず修正しました(新ビルドで対応予定)。

double NormalizeDouble() 倍精度、整数値)
浮動小数点数を指定された精度で丸める。
計算されたStopLossとTakeProfitの値、および保留中の注文の建値は、あらかじめ定義された変数Digitsに 格納されている精度に正規化される必要があります。

パラメータ
価値 - 浮動小数点数での値。
すうじ - 精度形式,小数点以下の桁数(0~8)。
 double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// 出力:0.12346000



この例では、NormalizeDouble()で5桁にクリッピングし、Print()で単純に描画しています(ロシア語でなくてすみません)。
 

そうですね、文字数が異なるようになった途端に、この例はかなり情報量が増えましたね。

 
bool SendFTP() 文字列 filename, 文字列 ftp_path=NULL)
Publishウィンドウで指定したEメールアドレスにファイルを送信します。失敗した場合は FALSE を返す。
テストモードでは、この機能は動作しません。また、この関数はカスタムインジケータから呼び出すことはできません。
送信するファイルは、terminal_directoryのtexperts フォルダまたはそのサブフォルダに配置されている必要があります。
FTPアドレスやアクセスパスワードが設定されていない場合は、送信されません。
[...]
void SendMail() 文字列 subject, 文字列 some_text)
メール]タブの設定で指定したアドレスにメールを送信します。
設定で送信を禁止している場合や、メールアドレスが指定されていない場合があります。エラー情報を取得するためには、GetLastError() 関数を呼び出す必要があります。
[...]

観察課題:2つの違いを見つけよう。
 
どうやら、あきらめないといけないから、後ろから正解を捨てられるのか?:)