MQL4プログラミングにおけるiStochastic関数の使い方

MQL4でiStochastic関数を使用する基本的な方法を説明します。iStochasticとはストキャスティクスの値を取得する際に使用するプログラムです。

目次

iStochastic関数の基本構文

double iStochastic(
   string symbol,        // 通貨ペア
   int timeframe,        // タイムフレーム
   int Kperiod,          // %K期間
   int Dperiod,          // %D期間
   int slowing,          // スローイング
   int method,           // 平均化法
   int price_field,      // 価格フィールド
   int mode,             // ライン識別子
   int shift             // シフト
);

一般的な使用例

double stochMain = iStochastic(Symbol(), PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);
double stochSignal = iStochastic(Symbol(), PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0);

以下は、パラメータの説明を表にまとめたものです。

パラメータ説明
symbol通貨ペア (例: NULL または Symbol() で現在のチャートの通貨ペアを使用)
timeframeタイムフレーム (例: PERIOD_CURRENT で現在のチャートのタイムフレームを使用)
Kperiod%K期間 (一般的に5-21)
Dperiod%D期間 (一般的に3-5)
slowingスローイング期間 (一般的に3)
method平均化法 (例: MODE_SMA, MODE_EMA)
price_field価格フィールド (0 = Low/High または 1 = Close/Close)
modeライン識別子 (MODE_MAIN: メインライン, MODE_SIGNAL: シグナルライン)
shiftシフト (0は現在のバー)

ストキャスティクスのクロスオーバーの例

double stochMain = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
double stochSignal = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
double stochMainPrev = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 2);
double stochSignalPrev = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 2);

if (stochMain > stochSignal && stochMainPrev <= stochSignalPrev) {
   // メインラインがシグナルラインを上から下へクロス(買いシグナル)
}
else if (stochMain < stochSignal && stochMainPrev >= stochSignalPrev) {
   // メインラインがシグナルラインを下から上へクロス(売りシグナル)
}

この関数を使用して、ストキャスティクスの値を取得し、トレーディング戦略に組み込むことができます。パラメータは必要に応じて調整してください。

EAのサンプルソース

#property copyright "Copyright 2024, Your Name"
#property link      "https://www.example.com"
#property version   "1.00"
#property strict

input int KPeriod = 5;
input int DPeriod = 3;
input int Slowing = 3;
input double Lots = 0.1;
input int OverboughtLevel = 80;
input int OversoldLevel = 20;

int OnInit()
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
}

void OnTick()
{
   double stochMain = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, 0, MODE_MAIN, 0);
   double stochSignal = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, 0, MODE_SIGNAL, 0);
   double stochMainPrev = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, 0, MODE_MAIN, 1);
   double stochSignalPrev = iStochastic(NULL, 0, KPeriod, DPeriod, Slowing, MODE_SMA, 0, MODE_SIGNAL, 1);
   
   if(!PositionSelect(Symbol()))
   {
      // 新規ポジションを開く
      if(stochMain > stochSignal && stochMainPrev <= stochSignalPrev && stochSignalPrev < OversoldLevel)
      {
         // 買いシグナル
         OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Stochastic Buy", 0, 0, clrGreen);
      }
      else if(stochMain < stochSignal && stochMainPrev >= stochSignalPrev && stochSignalPrev > OverboughtLevel)
      {
         // 売りシグナル
         OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Stochastic Sell", 0, 0, clrRed);
      }
   }
   else
   {
      // 既存ポジションを管理
      if(OrderType() == OP_BUY && stochMain < stochSignal && stochMainPrev >= stochSignalPrev)
      {
         // 買いポジションを閉じる
         OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrBlue);
      }
      else if(OrderType() == OP_SELL && stochMain > stochSignal && stochMainPrev <= stochSignalPrev)
      {
         // 売りポジションを閉じる
         OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrYellow);
      }
   }
}

このEAの動作は以下の通りです

  1. ストキャスティクスのメインラインとシグナルラインの現在値と1つ前の値を計算します。
  2. オープンポジションがない場合:
    • メインラインがシグナルラインを下から上にクロスし、かつ前のシグナル値が売られすぎレベル(20)未満の場合、買いポジションを開きます。
    • メインラインがシグナルラインを上から下にクロスし、かつ前のシグナル値が買われすぎレベル(80)を超えている場合、売りポジションを開きます。
  3. オープンポジションがある場合:
    • 買いポジションを持っていて、メインラインがシグナルラインを上から下にクロスした場合、ポジションを閉じます。
    • 売りポジションを持っていて、メインラインがシグナルラインを下から上にクロスした場合、ポジションを閉じます。

注意点

  • このEAは基本的な例であり、実際のトレードには追加のリスク管理やフィルタリングが必要です。
  • パラメータ(KPeriod, DPeriod, Slowing, Lots, OverboughtLevel, OversoldLevel)は、バックテストと最適化を通じて調整する必要があります。
  • 実際の取引に使用する前に、デモ口座でテストし、パフォーマンスを評価することが重要です。

このEAは、ストキャスティクスを使用した基本的なトレーディングアイデアを示していますが、実際のトレーディングに使用する前に、十分なテストと調整を行うことが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

池田 直哉 池田 直哉 メタプロアカデミー創業者・講師

オリジナルのEAを作ることができるようになるWebスクール【メタプロアカデミー】を運営しています。プログラミング未経験の方が最短1ヵ月で勝てるオリジナルEAが作れるようになります。

目次