MT4対応|スワップを自動計算・表示するインジケーターをMQL4で作る方法

スーツ姿のデグーマウスがMT4 EAのコードを指しながら解説しているイラスト。ぷろぐらむFXのデフォルトアイキャッチ。
MT4ノウハウ・インジケータ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

MT4でトレードしていて、「このポジション、結局スワップはいくら?」 と気になったことはありませんか?

FXではポジションを翌日に持ち越すとスワップ(通貨間の金利差調整)が発生し、 特に水曜日のスワップ3倍デーでは想定外の損益になることもあります。

そこで本記事では、MT4のスワップを自動で計算・表示できるインジケーターを MQL4で自作する方法を解説します。

完成品インジケーターのダウンロード、ソースコード、導入方法まで そのまま使える形でまとめています。

💡この記事でわかること

  • MT4でスワップを確認する全手段
  • 自動計算インジの仕組み
  • そのまま使えて改造もできるMQL4コード

スワップを含めた長期運用や自動売買を考えている方は、 EA(自動売買)の基礎解説 もあわせて参考にしてください。

MT4でスワップを自動計算・表示したい理由

私自身、スワップ管理を怠り痛い目を見たことがあります。
特に 水曜日から木曜日のスワップ3倍デー にマイナススワップで一気に10pips以上削られた経験がありました。

こうしたリスクを防ぐため、 スワップを常に意識できるように 自動で計算・表示するインジケーターを作りました。

MT4のスワップを表示・確認する方法は他にある?

MT4でスワップを確認する方法は、実はインジケーター以外にもいくつかあります。 ただし、それぞれに 使いづらさ・見落としやすさ があります。

① MT4の「仕様」画面で確認する方法

MT4では、通貨ペアを右クリックして「仕様」を開くことで、 買いスワップ・売りスワップの数値を確認できます。

ただしこの方法は、毎回手動で確認する必要があり、現在保有中ポジションへの影響が直感的に分かりません。 また、水曜日のスワップ3倍デーなども意識しづらいのが欠点です。

② FX業者の公式サイトで確認する方法

多くのFX業者は、公式サイトにスワップ一覧表を掲載しています。 正確な数値を確認できる点はメリットです。

一方で、MT4の実際のレート・保有ロットと照らし合わせて計算する必要があり、 トレード中に即判断する用途には向いていません。

③ 口座履歴・取引履歴から後追いで確認する方法

スワップは取引履歴にも反映されるため、後から確認することも可能です。

ただしこれは「すでに発生した後の確認」であり、 事前のリスク管理やポジション判断には使えません。

④ スワップ表示インジケーターを使う方法(おすすめ)

スワップをリアルタイムで・自動計算して・チャート上に表示できるのが、 スワップ表示インジケーターの最大のメリットです。

特に長期保有やEA運用では、
「このポジションを持ち越すと、スワップはいくらになるか」 を常に把握できることが重要になります。

本記事で紹介しているインジケーターは、 MT4から取得できるスワップ値をもとに自動計算し、 毎日のトレード判断をサポートします。

インジケーターの仕様と機能

MT4が使えるほとんどのFX業者はスワップ値をプログラムで取得できます。
このインジケーターは、その値を元にチャート左上に買いスワップ・売りスワップを表示します。

MT4チャート左上に買いスワップと売りスワップをリアルタイム表示した例
  • デフォルトは10万通貨分のスワップ計算(パラメータで変更可能)
  • 実際のスワップ値はロールオーバー時の仲値レートを元にしているため、実際の値と多少の誤差が生じることがあります。
  • 特定のレート(インジケーター追加時や曜日変わり時のレート)を基準に計算しています。

インジケーターのダウンロード

スワップポイントを表示する自作インジケータです。ダウンロードしてご利用下さい。

※動作確認や公式スワップ額との照合をお願いします

📥 スワップ自動計算インジをDL

\ 国内最大級のインジケータープラットフォーム /
GogoJungle(ゴゴジャン)でインジケーターの評価・レビューをチェック!

▶ GogoJungleでインジケーターを探す MT4対応|スワップを自動計算・表示するインジケーターをMQL4で作る方法

インジケーターのソースコード

//+------------------------------------------------------------------+
//|                                                      CHK_swap.mq4 |
//|                                     Copyright 2020, pfx Software |
//|                                             https://fx-prog.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, mef Software"
#property link      "https://fx-prog.com/"
#property version   "1.10"
#property indicator_chart_window

input double Tuuka_Tani = 10;     //10万通貨の場合10

input int display_X = 5;      //表示位置X
input int display_Y = 30;     //表示位置Y

string objectName = "SHOW_SWAP_POINT";

int prevWeek;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {

//---
   //ラベルオブジェクトの作成
   if(!ObjectCreate(0, objectName, OBJ_LABEL, 0, 0, 0))
   {
      return(INIT_FAILED);
   }
   // 座標のアンカー位置
   ObjectSetInteger(0, objectName ,OBJPROP_ANCHOR, ANCHOR_LEFT_LOWER);
   // X位置
   ObjectSetInteger(0, objectName, OBJPROP_XDISTANCE, display_X);
   // Y位置
   ObjectSetInteger(0, objectName, OBJPROP_YDISTANCE, display_Y);
   // 色
   ObjectSetInteger(0, objectName, OBJPROP_COLOR, clrWhite);
   // 読み取り専用
   ObjectSetInteger(0, objectName, OBJPROP_READONLY, true);
   // 選択不可
   ObjectSetInteger(0, objectName, OBJPROP_SELECTABLE, false);
   // フォント名
   ObjectSetString(0, objectName, OBJPROP_FONT, "MS ゴシック");
   // フォントサイズ
   ObjectSetInteger(0, objectName, OBJPROP_FONTSIZE, 8);

   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
{
   ObjectDelete(0,objectName); 
}  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   static int prevDayOfWeek = -1;

   // 曜日が変わったら更新
   int currentDay = DayOfWeek();
   if(currentDay == prevDayOfWeek) return(0);
   prevDayOfWeek = currentDay;

   double lotsize   = MarketInfo(Symbol(), MODE_LOTSIZE);
   double point     = MarketInfo(Symbol(), MODE_POINT);
   double swapLong  = MarketInfo(Symbol(), MODE_SWAPLONG);
   double swapShort = MarketInfo(Symbol(), MODE_SWAPSHORT);
   int    swapType  = MarketInfo(Symbol(), MODE_SWAPTYPE);
   double rate      = MarketInfo(Symbol(), MODE_ASK);
   double unit      = Tuuka_Tani * 10000;

   double resultLong = 0;
   double resultShort= 0;
   string message;

   // 計算パターン
   switch(swapType) {
      case 0:
         resultLong  = lotsize * swapLong * point * Tuuka_Tani / 10;
         resultShort = lotsize * swapShort * point * Tuuka_Tani / 10;
         break;
      case 1:
         resultLong  = rate * swapLong * Tuuka_Tani / 10;
         resultShort = rate * swapShort * Tuuka_Tani / 10;
         break;
      case 2:
         resultLong  = unit * (swapLong / 100.0 / 360.0) * rate;
         resultShort = unit * (swapShort / 100.0 / 360.0) * rate;
         break;
      default:
         message = "スワップ計算できませんでした";
         break;
   }

   if(swapType != 4) {
      message = StringFormat("%.0f万通貨 買いスワップ:%.0f円 売りスワップ:%.0f円", Tuuka_Tani, resultLong, resultShort);
   }

   // ラベルに表示
   ObjectSetString(0, objectName, OBJPROP_TEXT, message);

   Print("スワップ更新:", Symbol(), " ", message);

   return(rates_total);
}
スポンサーリンク

解説

スワップタイプはMarketInfo(Symbol(),MODE_SWAPTYPE)で取得。

タイプは以下4種類:

  • 0: pips(ポイント)
  • 1: 決済通貨
  • 2: 金利(パーセント表示)
  • 3: 証拠金通貨(未対応)

スワップタイプごとに計算方法を変えています。タイプ3の業者はまだ未確認(対応業者が無い)のため、「スワップ計算できませんでした」と表示します。

このスワップタイプが違うとスワップの計算方法が変わってきますので各FX業者のスワップタイプを参照し、計算方法をわけています。

MT4の仕様画面でスワップタイプとスワップ値を確認する方法

ポイントとなっていれば0、USD等通貨名が書いてあれば1、パーセント表示となっていれば2です。私が利用している、FX業者で3が無いので3は未対応です。
※今後出てきたら追加します

MT4へのインストール手順

ダウンロードしたファイルをMT4に展開し、チャート上に反映するだけで使用可能です。

  1. MT4を起動し、「ファイル」→「データフォルダーを開く」をクリック。
  2. 「MQL4」フォルダを開き、その中の「Indicators」フォルダにダウンロードした CHK_Swap.ex4 ファイルをコピー。
  3. MT4を再起動するか、ナビゲーターで右クリックして「更新」を選択。
  4. チャートにインジケーターをドラッグ&ドロップして適用。

MT4への展開、反映手順が全くわからない場合はこちら👇

パラメータ入力

パラメータの入力値として「Tuuka_Tani」と「display_X」「display_Y」を設けています。

パラメータ説明デフォルト値
Tuuka_Taniスワップ計算に使う通貨単位。10万通貨なら1010
display_X表示位置のX座標(0が左端、数値が大きいほど右)5
display_Y表示位置のY座標(0が上端、数値が大きいほど下)30
MT4スワップ自動計算インジケーターのパラメータ設定画面
スポンサーリンク

注意点と動作確認済みのFX業者

スワップ計算の注意事項

MT4にはスワップ計算タイプというものが4種類あり、FX業者毎に違うようです。
(0:pips, 1:決済通貨, 2:金利, 3:証拠金通貨)

スワップタイプ計算タイプが3のFX業者にまだ巡り合えていないので、3の業者だった場合は『スワップ計算できませんでした』という文言が出るようになっています。巡り合えたら更新しようと思います。※多分1と同じ?

また、基本的には対円(USDJPY,GBPJPY)やドルストレート(EURUSD,AUDNZD)等の通貨に対して動作確認済ですが、XMのGOLDも一応対応済です。(2024/03/28)

※参考情報
OANDA JAPANのデモ口座でスワップ値の動作確認(公式サイトのスワップ額と照らし合わせ)していたのですが、どうやらデモ口座はスワップの値がデタラメ?なのか公式サイト上のスワップ額と全く合いませんでした。

スワップ計算方法が(MODE_SWAPTYPEが0の場合)特殊なんだろうか?全くわからん!と思って諦めかけていたんですが、先日口座開設したのでライブ口座で確認したところ、適切なスワップ値を取ることできました。なので計算も問題ありません。

結局デモ口座で確認していたのがまずかったようです。なので、デモ口座で確認される方は注意してください。

動作確認済のブローカー一覧

現在、以下のFX業者で動作確認済です。

  • OANDA JAPAN(タイプ0)
  • FOREX EXCHANGE(タイプ0)
  • FXTF(タイプ1)
  • 外為ファイネスト(タイプ2)
  • デューカスコピージャパン(タイプ0)
  • XM(タイプ0)
  • Titan(タイプ0)
  • 楽天FX(取得不可。HP参照のみ)
スポンサーリンク

まとめ

以上、『スワップ自動計算のインジケーターをMQL4で作る方法』でした。

本記事で紹介したインジケーターは、MT4から取得できるスワップ値をもとに、 買い・売りスワップを自動計算してチャート上に表示することで、 日々のトレード判断をサポートする目的で作成しています。

特に、次のような方には相性の良いツールです。

  • スワップを含めてポジションを長期保有したい方
  • EAや複数ポジションを運用しており、コスト管理を重視したい方
  • MT4の数値を自分で確認・検証しながらトレードしたい方

一方で、利用にあたっては以下の点に注意してください。

  • スワップ値はブローカーごとに計算方式や提示値が異なる
  • 実際のスワップは MarketInfo から自動取得される数値を元に計算している
  • 掲載しているコードはサンプルとして自由に改造・応用可能
  • 他のインジケーターやEAと組み合わせることで、より実践的な運用が可能

実際に使用する際は、ご利用中のFX業者が公開しているスワップ値と大きなズレがないかを、 一度だけでも確認したうえで使うことをおすすめします。

スワップを「なんとなくのコスト」ではなく、 数値として可視化・管理することで、 トレードの判断精度は確実に上がります。



※ オススメ記事(EAが使える国内FX業者の一覧)

コメント

  1. とっととさんのアイコン とっとと より:

    シンプルなスワップ表示のインジケーターを探していてたどり着きました
    理想としていたインジでとてもいいのですが、表示位置の変更ってできないんでしょうか?
    使ってるEAのコメントが同じ場所に表示されるので判読できない時がちょくちょくあるんです
    せっかくいいものを見つけたので解決策などあればお教え願えませんでしょうか?

    • りょう りょう より:

      とっととさん
      パラメータ設定で表示位置を変更できるようにしました。
      (display_X)で左右位置、(display_Y)で上下位置を変更できます。

      display_の値を60ぐらいにして頂くと少し下に表示されるようになり文字被りを防げると思いますので最新のファイルを同一ボタンからダウンロードして試してみてください。
      ※ダウンロードファイルを最新に差し替えました

  2. 小栃洞運國斎さんのアイコン 小栃洞運國斎 より:

    難平の回数によって、
    売買判断のマルチタイムフレームの枠を変えていくEAを作ったら、
    驚きの結果が出ました、。
    作ってもらえませんか?

  3. けいじさんのアイコン けいじ より:

    素晴らしいインジで有難く使わせていただいてるんですが、時々表示がずっと0のままの時があります
    対処法などありましたらご教授願えますか?

    • りょう りょう より:

      けいじさん

      初めまして、ご利用有難うございます。

      ずっと0の場合は、スワップを表示しているチャートの時間足を5分足→15分足等に変えて頂くと再読み込みしますのでもしかしたら数値が出てくるかもしれません。

      あと、利用しているMT4はどこのMT4を利用されていますか?もしかしたら想定外のスワップ計算方法を採用している可能性があるので、その場合はずっと0になってしまうかもしれません。

      • けいじさんのアイコン けいじ より:

        XMのゴールドがほとんど表示されないんですよね
        何度か表示されてるところを見たことはあるんですが。。。

        • りょう りょう より:

          なるほど、ゴールドですか。
          通貨名称を(USDJPY等)基本6文字で考えていました。XMのゴールドを見たことろGOLDとなっており、ここで問題が起きてそうです。多分直せるので直してみますね。

        • りょう りょう より:

          ゴールドも表示されるように対応しました。

タイトルとURLをコピーしました