MathCeil関数の働き・役割
MathCeil関数は、指定した数値に対してその値以上で最も近い整数値を返すために使用されます。この関数は、少数の値を切り上げる際に非常に有用です。例えば、特定の計算結果を整数として処理したい場合や、予測される価格や量を切り上げたいときに役立ちます。
MathCeil関数の引数について
double MathCeil(
double val // 数値
);
MathCeil関数は、次の引数を1つ持ちます。
引数の説明
MathCeil関数の戻り値について
MathCeil関数は、引数で指定された数値以上の最小の整数を返します。この関数は、少数部分を持つ実数値を切り上げ処理した後の整数部分を返します。
例えば、入力値が2.1の場合は3、-1.7の場合は-1が戻り値となります。戻り値の型はdouble型であり、返される整数値も小数点のないdouble型として取得されます。
MathCeil関数を使ったサンプルコード
#define VALUES_TOTAL 31 // ループの総回数を定義する(小数を徐々に増加させるための上限値)
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 変換用の変数を宣言する
double value=0; // MathCeil関数を使用して切り上げを行うための実数変数
int ceil_value=0; // 切り上げ結果を格納する整数変数
//--- 実数の小数部分を0.1ずつ増やして切り上げ結果を取得するループ
for(int i=0; i<VALUES_TOTAL; i++)
{
//--- 小数部分を0.1増加させる
value += 0.1;
//--- valueの値を1桁の小数に正規化し、MathCeil関数を使用して上から最も近い整数値を取得
// MathCeil関数の戻り値をint型に変換してceil_valueに格納する
ceil_value = (int)MathCeil(NormalizeDouble(value, 1));
//--- 現在のvalueの値とその切り上げ結果を操作ログに出力する
// %.1fは小数点以下1桁まで表示、%dは整数の表示フォーマットを意味する
PrintFormat("value: %.1f, ceil value: %d", value, ceil_value);
/*
実行結果の例:
value: 0.1, ceil value: 1 // 0.1は切り上げられて1
value: 0.2, ceil value: 1 // 0.2は切り上げられて1
value: 0.3, ceil value: 1 // 0.3は切り上げられて1
value: 0.4, ceil value: 1 // 0.4は切り上げられて1
value: 0.5, ceil value: 1 // 0.5は切り上げられて1
value: 0.6, ceil value: 1 // 0.6は切り上げられて1
value: 0.7, ceil value: 1 // 0.7は切り上げられて1
value: 0.8, ceil value: 1 // 0.8は切り上げられて1
value: 0.9, ceil value: 1 // 0.9は切り上げられて1
value: 1.0, ceil value: 1 // 1.0はすでに整数なので1
value: 1.1, ceil value: 2 // 1.1は切り上げられて2
value: 1.2, ceil value: 2 // 1.2は切り上げられて2
value: 1.3, ceil value: 2 // 1.3は切り上げられて2
value: 1.4, ceil value: 2 // 1.4は切り上げられて2
value: 1.5, ceil value: 2 // 1.5は切り上げられて2
value: 1.6, ceil value: 2 // 1.6は切り上げられて2
value: 1.7, ceil value: 2 // 1.7は切り上げられて2
value: 1.8, ceil value: 2 // 1.8は切り上げられて2
value: 1.9, ceil value: 2 // 1.9は切り上げられて2
value: 2.0, ceil value: 2 // 2.0はすでに整数なので2
value: 2.1, ceil value: 3 // 2.1は切り上げられて3
value: 2.2, ceil value: 3 // 2.2は切り上げられて3
value: 2.3, ceil value: 3 // 2.3は切り上げられて3
value: 2.4, ceil value: 3 // 2.4は切り上げられて3
value: 2.5, ceil value: 3 // 2.5は切り上げられて3
value: 2.6, ceil value: 3 // 2.6は切り上げられて3
value: 2.7, ceil value: 3 // 2.7は切り上げられて3
value: 2.8, ceil value: 3 // 2.8は切り上げられて3
value: 2.9, ceil value: 3 // 2.9は切り上げられて3
value: 3.0, ceil value: 3 // 3.0はすでに整数なので3
value: 3.1, ceil value: 4 // 3.1は切り上げられて4
*/
}
}
サンプルコード解説
このサンプルコードでは、MathCeil関数を使用して、小数を含む値を切り上げ、整数に変換する様子を示しています。コードは以下のように構成されています。
定数の定義
コードの冒頭で、定数としてVALUES_TOTALが31に設定されています。これは、forループの回数を制御するための定数です。この定数を変更することで、ループ回数を増減させることが可能です。
変数の宣言
OnStart関数内で、切り上げ処理に使用する変数が宣言されています。
- value
実数型の変数で、0.1ずつ増加させて切り上げの対象とする数値です。初期値は0に設定されています。 - ceil_value
切り上げた結果の整数値を格納する整数型の変数です。MathCeil関数の結果がこの変数に代入されます。
ループ処理
forループは0からVALUES_TOTALまで実行され、計31回繰り返します。ループ内で次の処理を行います。
- valueの増加
value変数はループごとに0.1ずつ増加します。この小数値の変化をMathCeil関数で切り上げ、変化する結果を確認するためです。 - NormalizeDouble関数による正規化
MathCeil関数を適用する前に、NormalizeDouble関数を使ってvalueの小数点以下を1桁に制限しています。これにより、計算精度を保ち、余計な小数が生じるのを防ぎます。 - MathCeil関数による切り上げ
MathCeil関数を使って、valueの小数部分を切り上げ、最も近い整数を取得します。この結果をceil_valueに代入します。
結果の出力
PrintFormat関数で、現在のvalueとその切り上げ後の値をエキスパートログに出力します。出力フォーマットでは、
- %.1fによってvalueが小数点以下1桁まで表示され、
- %dによってceil_valueが整数として表示されます。
実行結果
実行すると、valueが0.1ずつ増加し、切り上げた結果が表示されます。例えば、valueが0.1から1.0の間ではceil_valueは1ですが、valueが1.1になるとceil_valueは2になります。このように、小数部分があると必ず上の整数に切り上げられることが確認できます。
この関数を使ってEAを作る際のアイディア
MathCeil関数を利用することで、EA(エキスパートアドバイザー)における価格や数量の管理を効率的に行うことが可能です。
注文ロット数の切り上げ調整
EAにおいて、資金管理やリスク管理に基づいて計算された注文ロット数が小数点以下になる場合、MathCeil関数を用いて切り上げることで、発注ロットを丸めることができます。これにより、最小発注単位に適合したロット数を計算できます。
特定価格における利益確定・損切りラインの設定
利益確定や損切りラインが小数点以下になる場合に、切り上げを行ってより安全な価格設定が可能です。例えば、損切りラインをMathCeil関数で上方向に調整することで、一定の価格を超えた損失を避けられるように設計できます。
トレンドラインやインジケータのラインを整数に合わせる
チャート上でトレンドラインやインジケータ(指標)を設定する際に、その値が整数単位で調整されるようにMathCeil関数を利用できます。これにより、より視覚的にわかりやすいライン設定が可能となり、分析に役立ちます。
資金量やリスク許容度に応じたポジションサイズの管理
リスクに応じて柔軟にポジションサイズを調整するEAでは、資金量に基づいた計算後にMathCeil関数で整数単位に丸めると、過剰なリスクを回避できます。