MQL4プログラミングにおけるiIchimoku関数(サンプルソースあり)

iIchimoku関数は、MQL4で一目均衡表(Ichimoku Kinko Hyo)の値を計算するために使用されます。この関数は、一目均衡表の各ラインの値を返します。

目次

関数の構文

double iIchimoku(
   string       symbol,        // 通貨ペア
   int          timeframe,     // タイムフレーム
   int          tenkan_sen,    // 転換線期間
   int          kijun_sen,     // 基準線期間
   int          senkou_span_b, // 先行スパンB期間
   int          mode,          // ライン識別子
   int          shift          // シフト
);

パラメータの説明

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

パラメータ説明
symbol分析する通貨ペア(例:USDJPY)
timeframeチャートの時間枠(例:PERIOD_H1, PERIOD_D1)
tenkan_sen転換線の期間(デフォルトは9)
kijun_sen基準線の期間(デフォルトは26)
senkou_span_b先行スパンBの期間(デフォルトは52)
mode取得するラインの種類
– MODE_TENKANSEN: 転換線
– MODE_KIJUNSEN: 基準線
– MODE_SENKOUSPANA: 先行スパンA
– MODE_SENKOUSPANB: 先行スパンB
– MODE_CHIKOUSPAN: 遅行スパン
shift現在のバーからのシフト(0が現在のバー)

使用例

以下は、iIchimoku関数を使用して各ラインの値を取得する例です。

double tenkan = iIchimoku(Symbol(), PERIOD_CURRENT, 9, 26, 52, MODE_TENKANSEN, 0);
double kijun = iIchimoku(Symbol(), PERIOD_CURRENT, 9, 26, 52, MODE_KIJUNSEN, 0);
double senkouA = iIchimoku(Symbol(), PERIOD_CURRENT, 9, 26, 52, MODE_SENKOUSPANA, 0);
double senkouB = iIchimoku(Symbol(), PERIOD_CURRENT, 9, 26, 52, MODE_SENKOUSPANB, 0);
double chikou = iIchimoku(Symbol(), PERIOD_CURRENT, 9, 26, 52, MODE_CHIKOUSPAN, 26);

注意点

  • 遅行スパンは26バー前の値を参照するため、shiftパラメータに26を指定しています。
  • 一目均衡表は、トレンドの方向や強さ、サポートとレジスタンスレベルを識別するのに役立ちます。
  • 他のテクニカル指標と組み合わせることで、より信頼性の高い取引シグナルを得ることができます。

応用例

一目均衡表を使用した簡単な取引戦略の例:

  1. 転換線が基準線を上から下に突き抜けた場合、売りシグナル
  2. 転換線が基準線を下から上に突き抜けた場合、買いシグナル
  3. 価格が雲(先行スパンAと先行スパンBの間の領域)の上にある場合、上昇トレンド
  4. 価格が雲の下にある場合、下降トレンド

これらのシグナルを組み合わせることで、より強力な取引戦略を構築できます。iIchimoku関数を適切に使用することで、一目均衡表の各ラインの値を簡単に取得し、トレーディング戦略に組み込むことができます。

EAサンプルソース

MQL4でiIchimoku関数を使用して、一目均衡表の雲(くも)のロジックを利用したEAを作成する方法を説明します。
以下は、雲を利用した簡単なトレーディングロジックを実装したEAのサンプルコードです。

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

input int TenkanSen = 9;
input int KijunSen = 26;
input int SenkouSpanB = 52;

int OnInit()
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
}

void OnTick()
{
   double senkouSpanA = iIchimoku(Symbol(), PERIOD_CURRENT, TenkanSen, KijunSen, SenkouSpanB, MODE_SENKOUSPANA, 0);
   double senkouSpanB = iIchimoku(Symbol(), PERIOD_CURRENT, TenkanSen, KijunSen, SenkouSpanB, MODE_SENKOUSPANB, 0);
   
   double currentPrice = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
   
   if(!PositionSelect(Symbol()))
   {
      if(currentPrice > senkouSpanA && currentPrice > senkouSpanB)
      {
         // 価格が雲の上にある場合、買いポジションを開く
         OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Ichimoku Buy", 0, 0, clrGreen);
      }
      else if(currentPrice < senkouSpanA && currentPrice < senkouSpanB)
      {
         // 価格が雲の下にある場合、売りポジションを開く
         OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Ichimoku Sell", 0, 0, clrRed);
      }
   }
   else
   {
      // ポジションが既に存在する場合の決済ロジック
      if(OrderType() == OP_BUY && currentPrice < senkouSpanA && currentPrice < senkouSpanB)
      {
         // 買いポジションを持っていて、価格が雲の下に移動した場合、決済
         OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrRed);
      }
      else if(OrderType() == OP_SELL && currentPrice > senkouSpanA && currentPrice > senkouSpanB)
      {
         // 売りポジションを持っていて、価格が雲の上に移動した場合、決済
         OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrGreen);
      }
   }
}

このEAは以下のロジックを実装しています。

  1. iIchimoku関数を使用して、先行スパンA(雲の上辺)と先行スパンB(雲の下辺)の値を取得します
  2. 現在の価格が雲の上にある場合(先行スパンAとBの両方より上)、買いポジションを開きます。
  3. 現在の価格が雲の下にある場合(先行スパンAとBの両方より下)、売りポジションを開きます。
  4. 既存のポジションがある場合、価格が雲を突き抜けた時に決済します。

このEAは基本的なロジックを実装していますが、実際の運用には以下の点に注意が必要です。

  • リスク管理:適切なストップロスとテイクプロフィットを設定してください。
  • パラメータ最適化:TenkanSen、KijunSen、SenkouSpanBの値は、バックテストと最適化を通じて調整してください。
  • 追加のフィルター:他のテクニカル指標や市場状況を考慮に入れて、より洗練されたエントリー/イグジット条件を追加することを検討してください。

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

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

この記事を書いた人

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

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

目次