機能
NormalizeDouble関数は、小数点以下の数を指定した桁数で、四捨五入します。
英語で四捨五入をrooundingというので、わりと
「指定された精度に丸めます」
みたいな言葉で説明されていたりします。
(私みたいに野良でプログラムを勉強し始めたものにとっては、正直面くらいました(-_-;) )
EAを開発する過程においては扱う数値に正確な精度が求められる局面も出てくるので、NormalizeDouble関数はそんな局面でよく用いられます。
<書式>
double NormalizeDouble( double value, // 正規化数 int digits // 小数点以下の桁数 ); |
引数
第1引数には、整形する対象のdouble型データが入ります。
第2引数には、整形する際の小数点以下の桁数が入ります。
要は小数点第何位まで表したいのというのを第2引数で指定するわけです。
戻り値
引数に指定したデータに基づいて計算されたdouble型の数値が返されます。
備考
計算された決済逆指値及び決済指値、また未決注文の価格は Digits() で取得される値によって正規化する必要があります
MQL5リファレンス
正規化とは?
正規化というのは、プログラムが取り扱うルールに則って値を整える作業
のことを言います。
通貨ペアに関する適切な桁数については、Digits関数(または定義済み変数「_Digits」)で取得できますよ
という事を言っています。
サンプルコード
※以下のサンプルコードはTerminal>Common>ディレクトリのFilesフォルダにあるSignal.txtというテキストファイルがあることを前提としたものです。
#include <Trade\Trade.mqh>
//ファイルのインクルード
CTrade trade;
//クラスオブジェクトの宣言
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
//チャートの値の取得と正規化
int ExternalFile=FileOpen("Signal.txt",
FILE_READ|FILE_ANSI|FILE_COMMON,
'|',
CP_ACP);
//テキストファイルを開き、ファイルハンドルを取得
string BuySignal=FileReadString(ExternalFile);
//Terminal>Common>Filesフォルダにあるテキストを読み取る
FileClose(ExternalFile);//ファイルを閉じる
if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")//読み取った中に"BUY IT NOW"があれば
{
trade.Buy(0.1,NULL,Ask,0,Ask+100*_Point,NULL);//買い注文
}//if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")
Comment("BuySignal",BuySignal,"PositionsTotal:",PositionsTotal());//コメント表示
}
//+------------------------------------------------------------------+
OnTick関数については↓をご覧ください↓
<NormalizeDouble関数が使われている記事リンク↓>
コメント