<?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/%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%B1%E3%83%BC%E3%82%BF%E3%83%BC/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/テクニカルインジケーター/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:53:20 +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】iStochastic関数の使い方を完全解説！ストキャスティクスを使ったEAサンプル付き</title>
		<link>https://mql-programing.com/archives/13022/%e3%80%90mql4%e3%80%91istochastic%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%81%e3%82%b9%e3%83%88%e3%82%ad%e3%83%a3%e3%82%b9%e3%83%86/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[iStochastic]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[ストキャスティクス]]></category>
		<category><![CDATA[EA自動売買]]></category>
		<category><![CDATA[テクニカルインジケーター]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13022</guid>

					<description><![CDATA[<p>ストキャスティクスは、相場の「買われすぎ」「売られすぎ」を判断するための代表的なオシレーター系インジケーターです。MQL4ではiStochastic関数を使うことで、EA（自動売買プログラム）やカスタムインジケーターの中 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13022/%e3%80%90mql4%e3%80%91istochastic%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%81%e3%82%b9%e3%83%88%e3%82%ad%e3%83%a3%e3%82%b9%e3%83%86/">【MQL4】iStochastic関数の使い方を完全解説！ストキャスティクスを使ったEAサンプル付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>ストキャスティクスは、相場の「買われすぎ」「売られすぎ」を判断するための代表的なオシレーター系インジケーターです。MQL4では<strong>iStochastic関数</strong>を使うことで、EA（自動売買プログラム）やカスタムインジケーターの中からストキャスティクスの値を簡単に取得できます。</p>
<p>この記事では、iStochastic関数の書式・引数をひとつずつ丁寧に解説し、最後にストキャスティクスのクロスで売買する実践的なEAサンプルを紹介します。</p>
<h2><span id="toc1">ストキャスティクスとは？</span></h2>
<p>ストキャスティクス（Stochastic Oscillator）は、一定期間の価格レンジの中で現在の価格がどの位置にあるかを0〜100の数値で示すテクニカル指標です。</p>
<h3><span id="toc2">3本のラインを理解しよう</span></h3>
<p>ストキャスティクスには以下の3種類のラインがあります。</p>
<ul>
<li><strong>%K（Fast %K）</strong>：直近の価格が一定期間の高値・安値レンジのどこに位置するかを示す、最も感度の高いライン</li>
<li><strong>%D（Fast %D / Slow %K）</strong>：%Kを移動平均で平滑化したライン。MetaTrader4のストキャスティクスではこれがメインラインになります</li>
<li><strong>Slow %D（シグナルライン）</strong>：%Dをさらに移動平均で平滑化したライン</li>
</ul>
<h3><span id="toc3">80と20のレベルライン</span></h3>
<p>一般的に、ストキャスティクスの値が<strong>80以上</strong>になると「買われすぎ」、<strong>20以下</strong>になると「売られすぎ」と判断します。この水準でのラインのクロスが売買シグナルとしてよく使われます。</p>
<h2><span id="toc4">iStochastic関数の書式と引数を完全解説</span></h2>
<p>iStochastic関数の書式は以下のとおりです。</p>
<pre><code class="language-mql4">double iStochastic(
   string       symbol,        // ① 通貨ペア
   int          timeframe,     // ② 時間足
   int          Kperiod,       // ③ %K期間
   int          Dperiod,       // ④ %D期間
   int          slowing,       // ⑤ スローイング
   int          method,        // ⑥ 移動平均の種類
   int          price_field,   // ⑦ 価格フィールド
   int          mode,          // ⑧ 取得するライン
   int          shift          // ⑨ シフト（何本前のバーか）
);</code></pre>
<p>引数が9つもあるので少し多く感じますが、一つずつ見ていきましょう。</p>
<h3><span id="toc5">① symbol（通貨ペア）</span></h3>
<p>値を取得したい通貨ペアを文字列で指定します。現在のチャートの通貨ペアを使う場合は<code>NULL</code>または<code>Symbol()</code>と書きます。</p>
<h3><span id="toc6">② timeframe（時間足）</span></h3>
<p>時間足を定数で指定します。現在のチャートの時間足を使う場合は<code>0</code>または<code>PERIOD_CURRENT</code>と書きます。主な定数は以下のとおりです。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>時間足</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_M1</td>
<td>1分足</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5分足</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15分足</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30分足</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>1時間足</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>4時間足</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>日足</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>週足</td>
</tr>
</tbody>
</table>
<h3><span id="toc7">③ Kperiod（%K期間）</span></h3>
<p>%Kラインの計算に使う期間です。一般的には<strong>5</strong>や<strong>14</strong>がよく使われます。</p>
<h3><span id="toc8">④ Dperiod（%D期間）</span></h3>
<p>%Kを平滑化して%Dを求める際の移動平均の期間です。一般的には<strong>3</strong>がよく使われます。</p>
<h3><span id="toc9">⑤ slowing（スローイング）</span></h3>
<p>スローストキャスティクスのスローイング値です。<strong>1</strong>にするとファスト、<strong>3</strong>にするとスローストキャスティクスになります。通常は<strong>3</strong>を指定します。</p>
<h3><span id="toc10">⑥ method（移動平均の種類）</span></h3>
<p>%Dラインの平滑化に使用する移動平均の種類を指定します。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>種類</th>
</tr>
</thead>
<tbody>
<tr>
<td>MODE_SMA</td>
<td>単純移動平均（最も一般的）</td>
</tr>
<tr>
<td>MODE_EMA</td>
<td>指数移動平均</td>
</tr>
<tr>
<td>MODE_SMMA</td>
<td>平滑移動平均</td>
</tr>
<tr>
<td>MODE_LWMA</td>
<td>線形加重移動平均</td>
</tr>
</tbody>
</table>
<h3><span id="toc11">⑦ price_field（価格フィールド）</span></h3>
<p>ストキャスティクスの計算に使う価格の種類です。</p>
<table>
<thead>
<tr>
<th>値</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>高値/安値（Low/High）を使用 ※一般的</td>
</tr>
<tr>
<td>1</td>
<td>終値（Close/Close）を使用</td>
</tr>
</tbody>
</table>
<p>通常は<strong>0（高値/安値）</strong>を使います。</p>
<h3><span id="toc12">⑧ mode（取得するライン）</span></h3>
<p>どのラインの値を取得するかを指定します。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>MODE_MAIN（= 0）</td>
<td>メインライン（%D）</td>
</tr>
<tr>
<td>MODE_SIGNAL（= 1）</td>
<td>シグナルライン（Slow %D）</td>
</tr>
</tbody>
</table>
<h3><span id="toc13">⑨ shift（シフト）</span></h3>
<p>何本前のバーの値を取得するかを指定します。<strong>0</strong>で現在のバー、<strong>1</strong>で1本前のバー（確定済み）です。</p>
<h2><span id="toc14">基本的な使い方</span></h2>
<p>まずはストキャスティクスの値を取得してチャートに表示するシンプルなコードを見てみましょう。</p>
<pre><code class="language-mql4">#property strict

void OnTick()
{
   // メインライン（%D）を取得 - 1本前の確定バー
   double stochMain = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);

   // シグナルライン（Slow %D）を取得 - 1本前の確定バー
   double stochSignal = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);

   // チャートに表示
   Comment("Stochastic Main: ", DoubleToString(stochMain, 2),
           "\nStochastic Signal: ", DoubleToString(stochSignal, 2));
}</code></pre>
<p>このコードでは、期間5・3・3のスローストキャスティクス（SMA）のメインラインとシグナルラインの値を取得し、Comment関数でチャート左上に表示しています。shift=1を指定しているので、確定済みの1本前のバーの値を取得しています。</p>
<h2><span id="toc15">実践サンプルEA ― ストキャスティクスのクロスで売買</span></h2>
<p>ここからは、ストキャスティクスのゴールデンクロス（買いシグナル）とデッドクロス（売りシグナル）で売買する実践的なEAを作ってみましょう。</p>
<h3><span id="toc16">売買ルール</span></h3>
<ul>
<li><strong>買いエントリー</strong>：ストキャスティクスが20以下のゾーンで、メインラインがシグナルラインを下から上にクロス（ゴールデンクロス）</li>
<li><strong>売りエントリー</strong>：ストキャスティクスが80以上のゾーンで、メインラインがシグナルラインを上から下にクロス（デッドクロス）</li>
<li>既にポジションがある場合は新規エントリーしない</li>
</ul>
<h3><span id="toc17">EAの完全なコード</span></h3>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//|                                          StochasticCrossEA.mq4   |
//|                         ストキャスティクス クロスEA サンプル        |
//+------------------------------------------------------------------+
#property strict

// --- 入力パラメータ ---
input int    KPeriod      = 5;       // %K期間
input int    DPeriod      = 3;       // %D期間
input int    Slowing      = 3;       // スローイング
input double UpperLevel   = 80.0;    // 上限レベル（売られすぎ判定）
input double LowerLevel   = 20.0;    // 下限レベル（買われすぎ判定）
input double LotSize      = 0.1;     // ロットサイズ
input int    StopLoss     = 100;     // ストップロス（pips）
input int    TakeProfit   = 200;     // テイクプロフィット（pips）
input int    MagicNumber  = 12345;   // マジックナンバー

// --- 新バー判定用変数 ---
datetime lastBarTime = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
   Print("StochasticCrossEA が初期化されました");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 新しいバーが生成されたか判定する関数                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
{
   datetime currentBarTime = iTime(NULL, 0, 0);
   if(lastBarTime != currentBarTime)
   {
      lastBarTime = currentBarTime;
      return true;
   }
   return false;
}

//+------------------------------------------------------------------+
//| 現在のポジション数を取得する関数                                     |
//+------------------------------------------------------------------+
int CountPositions(int type)
{
   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            if(OrderType() == type)
               count++;
         }
      }
   }
   return count;
}

//+------------------------------------------------------------------+
//| Expert tick function                                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // 新しいバーが確定したときだけ処理
   if(!IsNewBar())
      return;

   // --- ストキャスティクスの値を取得 ---
   // 1本前（確定済み）のメインライン
   double mainCurr   = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing,
                                    MODE_SMA, 0, MODE_MAIN, 1);
   // 1本前（確定済み）のシグナルライン
   double signalCurr = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing,
                                    MODE_SMA, 0, MODE_SIGNAL, 1);
   // 2本前のメインライン
   double mainPrev   = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing,
                                    MODE_SMA, 0, MODE_MAIN, 2);
   // 2本前のシグナルライン
   double signalPrev = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing,
                                    MODE_SMA, 0, MODE_SIGNAL, 2);

   // --- ゴールデンクロス判定（買いシグナル） ---
   bool goldenCross = (mainPrev < signalPrev) &#038;&#038; (mainCurr > signalCurr);

   // --- デッドクロス判定（売りシグナル） ---
   bool deadCross = (mainPrev > signalPrev) && (mainCurr < signalCurr);

   // --- 買いエントリー ---
   if(goldenCross &#038;&#038; mainCurr < LowerLevel &#038;&#038; CountPositions(OP_BUY) == 0)
   {
      double sl = NormalizeDouble(Ask - StopLoss * Point, Digits);
      double tp = NormalizeDouble(Ask + TakeProfit * Point, Digits);

      int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp,
                              "Stoch GoldenCross", MagicNumber, 0, clrBlue);
      if(ticket > 0)
         Print("買い注文成功: チケット=", ticket);
      else
         Print("買い注文失敗: エラー=", GetLastError());
   }

   // --- 売りエントリー ---
   if(deadCross && mainCurr > UpperLevel && CountPositions(OP_SELL) == 0)
   {
      double sl = NormalizeDouble(Bid + StopLoss * Point, Digits);
      double tp = NormalizeDouble(Bid - TakeProfit * Point, Digits);

      int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp,
                              "Stoch DeadCross", MagicNumber, 0, clrRed);
      if(ticket > 0)
         Print("売り注文成功: チケット=", ticket);
      else
         Print("売り注文失敗: エラー=", GetLastError());
   }

   // --- チャート表示 ---
   Comment("Main[1]: ", DoubleToString(mainCurr, 2),
           "  Signal[1]: ", DoubleToString(signalCurr, 2),
           "\nMain[2]: ", DoubleToString(mainPrev, 2),
           "  Signal[2]: ", DoubleToString(signalPrev, 2));
}</code></pre>
<h2><span id="toc18">サンプルコードのポイント解説</span></h2>
<h3><span id="toc19">ポイント1：新バー判定で無駄な処理を防ぐ</span></h3>
<p><code>IsNewBar()</code>関数を使い、新しいバーが確定したタイミングでのみ売買判定を行っています。OnTick()はティックごとに呼ばれるため、そのまま処理すると同じバーで何度もシグナルを検出してしまいます。新バー判定を入れることで、確定した値に基づく安定したシグナル検出ができます。</p>
<h3><span id="toc20">ポイント2：2本のバーでクロスを検出する</span></h3>
<p>クロスの判定には、<strong>1本前（shift=1）</strong>と<strong>2本前（shift=2）</strong>の値を比較しています。</p>
<pre><code class="language-mql4">// ゴールデンクロス：2本前は「メイン ＜ シグナル」→ 1本前は「メイン ＞ シグナル」
bool goldenCross = (mainPrev < signalPrev) &#038;&#038; (mainCurr > signalCurr);

// デッドクロス：2本前は「メイン ＞ シグナル」→ 1本前は「メイン ＜ シグナル」
bool deadCross = (mainPrev > signalPrev) && (mainCurr < signalCurr);</code></pre>
<p>shift=0（現在のバー）を使うと、バーが確定するまで値が変動し続けるため、誤ったシグナルが出る可能性があります。確定済みのshift=1とshift=2を使うのが安全です。</p>
<h3><span id="toc21">ポイント3：ゾーンフィルタでダマシを減らす</span></h3>
<p>単純なクロスだけではダマシ（偽シグナル）が多くなります。そこで、<strong>買いはLowerLevel（20）以下のゾーン</strong>、<strong>売りはUpperLevel（80）以上のゾーン</strong>でのみエントリーするフィルタを入れています。売られすぎ・買われすぎの極端な領域でのクロスに絞ることで、シグナルの精度を高めています。</p>
<h2><span id="toc22">カスタマイズのヒント</span></h2>
<h3><span id="toc23">マルチタイムフレーム分析</span></h3>
<p>iStochastic関数の第2引数（timeframe）を変えることで、異なる時間足のストキャスティクスを取得できます。例えば、日足のトレンド方向を確認してからエントリーするといった使い方が可能です。</p>
<pre><code class="language-mql4">// 日足のストキャスティクスを取得
double dailyMain = iStochastic(NULL, PERIOD_D1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);

// 日足が50以上なら上昇傾向 → 買いのみエントリーする、など
if(dailyMain > 50.0 && goldenCross && mainCurr < LowerLevel)
{
   // 買いエントリー処理
}</code></pre>
<h3><span id="toc24">他のインジケーターとの併用</span></h3>
<p>ストキャスティクス単体よりも、移動平均線（iMA関数）やRSI（iRSI関数）など他のインジケーターと組み合わせることで、より信頼性の高い売買ルールを構築できます。例えば、移動平均線の上にいるときだけ買いシグナルを採用する、といったフィルタが考えられます。</p>
<h3><span id="toc25">ストラテジーテスターで最適化</span></h3>
<p>KPeriod、DPeriod、Slowing、UpperLevel、LowerLevelなどのパラメータは、MetaTraderのストラテジーテスターで最適化できます。input変数として宣言しているので、テスターの最適化機能でベストな組み合わせを探してみましょう。ただし、過剰最適化（カーブフィッティング）には注意が必要です。</p>
<h2><span id="toc26">まとめ</span></h2>
<p>この記事で学んだポイントを整理します。</p>
<ol>
<li><strong>iStochastic関数</strong>は9つの引数を持ち、MQL4からストキャスティクスの値を取得できる関数です</li>
<li><strong>MODE_MAIN</strong>でメインライン（%D）、<strong>MODE_SIGNAL</strong>でシグナルライン（Slow %D）を取得します</li>
<li><strong>price_field</strong>は通常0（高値/安値ベース）を使い、1（終値ベース）との違いを理解しておきましょう</li>
<li>クロス判定にはshift=1とshift=2の<strong>確定済みバー</strong>を使うのが安全です</li>
<li>80/20のゾーンフィルタやマルチタイムフレーム分析を組み合わせることで、<strong>ダマシを減らして精度を向上</strong>させることができます</li>
</ol>
<p>ストキャスティクスはシンプルながら強力なオシレーター指標です。まずは今回のサンプルEAをストラテジーテスターで動かして、パラメータを変えながら挙動を確認してみてください。実際に手を動かすことで、iStochastic関数の使い方がしっかり身につくはずです！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13022/%e3%80%90mql4%e3%80%91istochastic%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%81%e3%82%b9%e3%83%88%e3%82%ad%e3%83%a3%e3%82%b9%e3%83%86/">【MQL4】iStochastic関数の使い方を完全解説！ストキャスティクスを使ったEAサンプル付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
