<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>数学関数 アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/%E6%95%B0%E5%AD%A6%E9%96%A2%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/数学関数/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:36:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>数学関数 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/数学関数/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】数学関数の使い方を完全解説！MathAbs・MathRound・MathMax・MathMin・MathSqrtなど一覧付き</title>
		<link>https://mql-programing.com/archives/13001/%e3%80%90mql4%e3%80%91%e6%95%b0%e5%ad%a6%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81mathabs%e3%83%bbmathround%e3%83%bbmathmax%e3%83%bbma/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[数学関数]]></category>
		<category><![CDATA[MathAbs]]></category>
		<category><![CDATA[MathRound]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13001</guid>

					<description><![CDATA[<p>MQL4でEA（自動売買）やインジケーターを開発していると、「価格の差を絶対値で取りたい」「ロット数を適切に丸めたい」「2つの値のうち大きい方を使いたい」といった場面に頻繁に出会います。 こうした計算処理を簡単に実現して [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13001/%e3%80%90mql4%e3%80%91%e6%95%b0%e5%ad%a6%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81mathabs%e3%83%bbmathround%e3%83%bbmathmax%e3%83%bbma/">【MQL4】数学関数の使い方を完全解説！MathAbs・MathRound・MathMax・MathMin・MathSqrtなど一覧付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でEA（自動売買）やインジケーターを開発していると、「価格の差を絶対値で取りたい」「ロット数を適切に丸めたい」「2つの値のうち大きい方を使いたい」といった場面に頻繁に出会います。</p>
<p>こうした計算処理を簡単に実現してくれるのが<strong>数学関数（Math系関数）</strong>です。この記事では、EA開発で特に使用頻度の高い<strong>MathAbs・MathRound・MathMax・MathMin・MathSqrt</strong>を中心に、MQL4の数学関数を一覧付きで完全解説します。</p>
<h2><span id="toc1">MQL4の主要な数学関数一覧</span></h2>
<p>まずは全体像を把握しましょう。MQL4で使える主要な数学関数を早見表にまとめました。</p>
<table>
<thead>
<tr>
<th>関数名</th>
<th>機能</th>
<th>使用例</th>
<th>結果</th>
</tr>
</thead>
<tbody>
<tr>
<td>MathAbs()</td>
<td>絶対値を返す</td>
<td>MathAbs(-1.5)</td>
<td>1.5</td>
</tr>
<tr>
<td>MathRound()</td>
<td>四捨五入（整数に丸める）</td>
<td>MathRound(2.6)</td>
<td>3.0</td>
</tr>
<tr>
<td>MathFloor()</td>
<td>切り捨て（小さい方の整数）</td>
<td>MathFloor(2.9)</td>
<td>2.0</td>
</tr>
<tr>
<td>MathCeil()</td>
<td>切り上げ（大きい方の整数）</td>
<td>MathCeil(2.1)</td>
<td>3.0</td>
</tr>
<tr>
<td>MathMax()</td>
<td>2つの値のうち大きい方を返す</td>
<td>MathMax(3, 7)</td>
<td>7</td>
</tr>
<tr>
<td>MathMin()</td>
<td>2つの値のうち小さい方を返す</td>
<td>MathMin(3, 7)</td>
<td>3</td>
</tr>
<tr>
<td>MathSqrt()</td>
<td>平方根を返す</td>
<td>MathSqrt(9.0)</td>
<td>3.0</td>
</tr>
<tr>
<td>MathPow()</td>
<td>べき乗を返す</td>
<td>MathPow(2, 3)</td>
<td>8.0</td>
</tr>
<tr>
<td>MathMod()</td>
<td>割り算の余りを返す</td>
<td>MathMod(10, 3)</td>
<td>1.0</td>
</tr>
<tr>
<td>MathLog()</td>
<td>自然対数を返す</td>
<td>MathLog(2.718)</td>
<td>≒1.0</td>
</tr>
<tr>
<td>MathExp()</td>
<td>eのべき乗を返す</td>
<td>MathExp(1.0)</td>
<td>≒2.718</td>
</tr>
<tr>
<td>MathRand()</td>
<td>0〜32767の乱数を返す</td>
<td>MathRand()</td>
<td>ランダム値</td>
</tr>
</tbody>
</table>
<p>それでは、特に重要な関数を一つずつ詳しく見ていきましょう。</p>
<h2><span id="toc2">MathAbs() — 絶対値を求める</span></h2>
<p><strong>MathAbs()</strong>は、渡された値の絶対値（符号を取り除いた値）を返す関数です。負の数を正の数に変換したいときに使います。</p>
<pre><code class="language-mql4">double MathAbs(double value);
</code></pre>
<h3><span id="toc3">基本的な使い方</span></h3>
<pre><code class="language-mql4">double val1 = MathAbs(-3.14);   // 結果: 3.14
double val2 = MathAbs(5.0);     // 結果: 5.0（正の値はそのまま）
double val3 = MathAbs(0.0);     // 結果: 0.0
</code></pre>
<h3><span id="toc4">実践例：2つの価格の差（pips）を計算する</span></h3>
<p>EA開発でよくある場面が、エントリー価格と現在価格の差をpipsで計算するケースです。買い・売りどちらのポジションでも正の値で差を取得できるので便利です。</p>
<pre><code class="language-mql4">double openPrice  = 150.500;
double closePrice = 150.320;

// 方向に関係なく価格差をpipsで取得
double diffPips = MathAbs(closePrice - openPrice) / Point;
// 結果: 18.0 pips（3桁通貨の場合）

Print("価格差: ", diffPips, " pips");
</code></pre>
<p>MathAbs()を使わないと、買いポジションなら <code>close - open</code>、売りポジションなら <code>open - close</code> と場合分けが必要になります。絶対値を使えばこのような場合分けが不要になり、コードがシンプルになります。</p>
<h2><span id="toc5">MathRound() — 四捨五入する</span></h2>
<p><strong>MathRound()</strong>は、小数点以下を四捨五入して最も近い整数値を返します。戻り値の型はdoubleですが、値としては整数になります。</p>
<pre><code class="language-mql4">double MathRound(double value);
</code></pre>
<h3><span id="toc6">基本的な使い方</span></h3>
<pre><code class="language-mql4">double val1 = MathRound(2.3);   // 結果: 2.0
double val2 = MathRound(2.5);   // 結果: 3.0
double val3 = MathRound(2.8);   // 結果: 3.0
double val4 = MathRound(-1.6);  // 結果: -2.0
</code></pre>
<h3><span id="toc7">MathRound・MathCeil・MathFloorの比較</span></h3>
<p>「丸める」系の関数は3つあり、混同しやすいのでまとめて比較します。</p>
<table>
<thead>
<tr>
<th>入力値</th>
<th>MathRound()（四捨五入）</th>
<th>MathCeil()（切り上げ）</th>
<th>MathFloor()（切り捨て）</th>
</tr>
</thead>
<tbody>
<tr>
<td>2.3</td>
<td>2.0</td>
<td>3.0</td>
<td>2.0</td>
</tr>
<tr>
<td>2.5</td>
<td>3.0</td>
<td>3.0</td>
<td>2.0</td>
</tr>
<tr>
<td>2.8</td>
<td>3.0</td>
<td>3.0</td>
<td>2.0</td>
</tr>
<tr>
<td>-1.3</td>
<td>-1.0</td>
<td>-1.0</td>
<td>-2.0</td>
</tr>
<tr>
<td>-1.8</td>
<td>-2.0</td>
<td>-1.0</td>
<td>-2.0</td>
</tr>
</tbody>
</table>
<p>負の数の扱いに注意してください。MathFloor()は「数直線上で左方向（小さい方）」の整数を返すため、<code>MathFloor(-1.3)</code> は <code>-2.0</code> になります。</p>
<h3><span id="toc8">MathRound()とNormalizeDouble()の違い</span></h3>
<p>MQL4初心者がよく迷うポイントが、MathRound()と<strong>NormalizeDouble()</strong>の使い分けです。</p>
<ul>
<li><strong>MathRound()</strong> — 常に<strong>整数</strong>に丸める。小数点以下の桁数は指定できない</li>
<li><strong>NormalizeDouble()</strong> — <strong>指定した小数点桁数</strong>で四捨五入する</li>
</ul>
<pre><code class="language-mql4">double price = 1.23456;

// MathRound: 整数に丸める
double rounded = MathRound(price);               // 結果: 1.0

// NormalizeDouble: 小数点以下の桁数を指定して丸める
double normalized = NormalizeDouble(price, 3);    // 結果: 1.235（小数第3位まで）
double normalized2 = NormalizeDouble(price, 2);   // 結果: 1.23（小数第2位まで）
</code></pre>
<p>EA開発では、価格やロット数の丸めには<strong>NormalizeDouble()を使うのが基本</strong>です。MathRound()は「個数」や「回数」など整数値が必要な場面で使います。</p>
<h2><span id="toc9">MathMax() / MathMin() — 2つの値を比較する</span></h2>
<p><strong>MathMax()</strong>は2つの値のうち大きい方を、<strong>MathMin()</strong>は小さい方を返します。if文を使った比較処理を1行で書けるのが魅力です。</p>
<pre><code class="language-mql4">double MathMax(double value1, double value2);
double MathMin(double value1, double value2);
</code></pre>
<h3><span id="toc10">基本的な使い方</span></h3>
<pre><code class="language-mql4">double bigger  = MathMax(10.5, 20.3);   // 結果: 20.3
double smaller = MathMin(10.5, 20.3);   // 結果: 10.5
</code></pre>
<h3><span id="toc11">実践例：ロット数を最小値・最大値の範囲内に制限する（クランプ処理）</span></h3>
<p>EA開発で非常によく使うパターンが、計算結果を一定の範囲内に収める<strong>クランプ処理</strong>です。MathMax()とMathMin()を組み合わせて実現します。</p>
<pre><code class="language-mql4">double CalcLot = 0.03;  // 計算で求めたロット数

double minLot = MarketInfo(Symbol(), MODE_MINLOT);  // 例: 0.01
double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);  // 例: 100.0

// クランプ処理：minLot以上、maxLot以下に制限
double lot = MathMin(MathMax(CalcLot, minLot), maxLot);
// 内側から読む：まずMathMaxでminLot以上を保証 → MathMinでmaxLot以下を保証
</code></pre>
<p>この処理を分解すると次のようになります。</p>
<ol>
<li><code>MathMax(CalcLot, minLot)</code> → CalcLotが最小ロットより小さい場合、最小ロットに引き上げる</li>
<li><code>MathMin(結果, maxLot)</code> → 結果が最大ロットより大きい場合、最大ロットに引き下げる</li>
</ol>
<p>if文で書くと4〜5行必要な処理が、1行で完結するのがポイントです。</p>
<h3><span id="toc12">ネストして3つ以上の値から最大・最小を求める</span></h3>
<p>MathMax()・MathMin()は2つの値しか比較できませんが、ネスト（入れ子）にすれば3つ以上の値にも対応できます。</p>
<pre><code class="language-mql4">// 3つの値から最大値を求める
double high1 = 150.800;
double high2 = 151.200;
double high3 = 150.950;

double highest = MathMax(MathMax(high1, high2), high3);
// 結果: 151.200
</code></pre>
<h2><span id="toc13">MathSqrt() — 平方根を求める</span></h2>
<p><strong>MathSqrt()</strong>は、引数の平方根（ルート）を返す関数です。統計的な指標計算で活躍します。</p>
<pre><code class="language-mql4">double MathSqrt(double value);
</code></pre>
<h3><span id="toc14">基本的な使い方</span></h3>
<pre><code class="language-mql4">double val1 = MathSqrt(9.0);    // 結果: 3.0
double val2 = MathSqrt(2.0);    // 結果: 1.41421356...
double val3 = MathSqrt(0.0);    // 結果: 0.0
// MathSqrt(-1.0) は不正な値になるので注意
</code></pre>
<h3><span id="toc15">実践例：標準偏差の計算</span></h3>
<p>ボリンジャーバンドなどで使われる標準偏差の計算にMathSqrt()が登場します。「分散の平方根 ＝ 標準偏差」という関係です。</p>
<pre><code class="language-mql4">// 直近N本の終値から標準偏差を計算する関数
double CalcStdDev(int period)
{
    double sum = 0.0;
    // 平均を計算
    for(int i = 0; i < period; i++)
    {
        sum += Close[i];
    }
    double mean = sum / period;
    
    // 分散を計算
    double variance = 0.0;
    for(int i = 0; i < period; i++)
    {
        double diff = Close[i] - mean;
        variance += diff * diff;       // MathPow(diff, 2) でもOK
    }
    variance /= period;
    
    // 標準偏差 = 分散の平方根
    return MathSqrt(variance);
}
</code></pre>
<p>負の値をMathSqrt()に渡すとNaN（非数）が返ってくるため、引数が0以上であることを事前にチェックすると安全です。</p>
<h2><span id="toc16">その他の便利な数学関数</span></h2>
<h3><span id="toc17">MathPow() — べき乗</span></h3>
<p><strong>MathPow(base, exponent)</strong>は「baseのexponent乗」を計算します。複利計算やボラティリティの2乗計算などで使います。</p>
<pre><code class="language-mql4">double val1 = MathPow(2, 10);    // 2の10乗 = 1024.0
double val2 = MathPow(1.01, 12); // 月利1%の年間複利 ≒ 1.1268
</code></pre>
<h3><span id="toc18">MathMod() — 剰余（余り）</span></h3>
<p><strong>MathMod(value, divider)</strong>は割り算の余りを返します。「N回に1回だけ処理する」といったカウンター制御に便利です。</p>
<pre><code class="language-mql4">// 5本に1回だけログを出力する例
static int barCount = 0;
barCount++;

if(MathMod(barCount, 5) == 0)
{
    Print("5本ごとのチェックポイント: ", barCount);
}
</code></pre>
<h3><span id="toc19">MathRand() / MathSrand() — 乱数</span></h3>
<p><strong>MathRand()</strong>は0〜32767のランダムな整数を返します。使用前に<strong>MathSrand()</strong>で乱数のシード（種）を初期化するのがポイントです。</p>
<pre><code class="language-mql4">// OnInit()で乱数を初期化
int OnInit()
{
    MathSrand(GetTickCount());  // 現在時刻をシードに設定
    return(INIT_SUCCEEDED);
}

// 1〜100のランダムな整数を生成
int randomNum = MathRand() % 100 + 1;
</code></pre>
<p>MathSrand()を呼ばないと毎回同じ乱数列が生成されてしまうので、必ずOnInit()内で初期化しましょう。</p>
<h2><span id="toc20">実践テクニック：リスクベースのロット計算</span></h2>
<p>最後に、ここまで紹介した数学関数を組み合わせた<strong>実践的なロット計算関数</strong>を紹介します。口座残高の一定割合をリスクとしてロット数を算出する、EA開発の定番パターンです。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| リスクベースでロット数を計算する関数                                |
//| riskPercent : リスク割合（例: 2.0 = 口座残高の2%）                 |
//| slPips      : ストップロス幅（pips単位）                           |
//+------------------------------------------------------------------+
double CalcLotByRisk(double riskPercent, double slPips)
{
    // 1. リスク金額を計算
    double balance   = AccountBalance();
    double riskMoney = balance * riskPercent / 100.0;
    
    // 2. 1ロットあたりの1pipsの価値を取得
    double tickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
    double tickSize  = MarketInfo(Symbol(), MODE_TICKSIZE);
    double pipValue  = tickValue * (Point / tickSize);
    
    // 3. ロット数を計算（MathAbsでslPipsの符号ミスを防止）
    double lots = riskMoney / (MathAbs(slPips) * pipValue);
    
    // 4. ロットステップに合わせて切り捨て
    double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
    lots = MathFloor(lots / lotStep) * lotStep;
    
    // 5. NormalizeDoubleで小数点を整える
    lots = NormalizeDouble(lots, 2);
    
    // 6. 最小・最大ロットの範囲にクランプ（MathMax + MathMin）
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    lots = MathMin(MathMax(lots, minLot), maxLot);
    
    return lots;
}
</code></pre>
<p>この関数の中で使っている数学関数をまとめると次の通りです。</p>
<ul>
<li><strong>MathAbs()</strong> — slPipsが負の値で渡された場合でも正しく計算できるように絶対値化</li>
<li><strong>MathFloor()</strong> — ロットステップに合わせた切り捨て（余分な端数を除去）</li>
<li><strong>MathMax() + MathMin()</strong> — 最小ロット以上・最大ロット以下のクランプ処理</li>
</ul>
<p>このように、複数の数学関数を組み合わせることで、堅牢なロット計算ロジックが実現できます。</p>
<h2><span id="toc21">まとめ</span></h2>
<p>この記事では、MQL4の数学関数について主要なものを一覧付きで解説しました。最後にポイントを整理しておきます。</p>
<ul>
<li><strong>MathAbs()</strong> — 絶対値。価格差の計算やマイナス値の防止に活躍</li>
<li><strong>MathRound()</strong> — 整数への四捨五入。小数桁を指定したい場合はNormalizeDouble()を使う</li>
<li><strong>MathMax() / MathMin()</strong> — 2値の比較。組み合わせてクランプ処理ができる万能関数</li>
<li><strong>MathSqrt()</strong> — 平方根。標準偏差などの統計計算に必須</li>
<li><strong>MathPow() / MathMod() / MathRand()</strong> — べき乗・剰余・乱数で応用範囲が広がる</li>
</ul>
<p>数学関数は一つ一つは単純ですが、組み合わせることでEA開発に欠かせない計算ロジックを構築できます。特にMathMax/MathMinによるクランプ処理とMathAbsによる絶対値化は、ほぼすべてのEAで使うパターンなので、ぜひ身につけてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/13001/%e3%80%90mql4%e3%80%91%e6%95%b0%e5%ad%a6%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81mathabs%e3%83%bbmathround%e3%83%bbmathmax%e3%83%bbma/">【MQL4】数学関数の使い方を完全解説！MathAbs・MathRound・MathMax・MathMin・MathSqrtなど一覧付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
