1日の区切りに垂直ラインを引くMT4インジケーター|OneDayLine

1日を区切る垂直線インジケーターのアイキャッチ
  • URLをコピーしました!

1日ごとに区切った垂直ラインをチャートに引きたいのですが。

自動でラインを引ける方法はありますか?

ホシノ

FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。

BBF_MQL5-202400629
リアルトレード公開|EA BBF

このページでわかること・できること

〇1日ごとに垂直ラインを引くインジケーターの紹介

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

〇インジケーターについての詳しい解説

目次

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

ここからファイルのダウンロードが可能。
ダウンロードするファイルは.ex4ファイルのため、MT4のデータフォルダにあるインジケーターフォルダへファイルを移動すればインジケーターは使用できるようになる。

インストール

ダウンロードしたインジケーターはMT4のデータフォルダからindicatorsフォルダを探しファイルを移動する。

ファイル>データフォルダを開く>MQL4>indicators

indicatorsフォルダにファイルを移動し、MT4を再起動するとインストールが完了する。

インジケーターの使い方

onedaylineチャート画像
インジケーターOneDayLineを使って1日を区切る垂直線を描画する

このMT4用インジケーター「OneDayLine」をチャートにセットすると、1日の区切りに垂直ラインを描画できる。
ラインを引く時間は0:00が標準で設定されているが、パラメーター画面で変更が可能だ。
描画されるラインは5本となり、過去にさかのぼって引かれる。

区切る時間を変更できるのは便利ですね

パラメーターについて

onedaylineパラメーター画面
パラメーター画面

インジケーターをチャートにセットするとプロパティが開き、パラメーターを設定できる。

    • タイプ: color
    • デフォルト値: clrGray(グレー)
    • 説明: このパラメーターは、垂直線の色を設定する。
  1. スタイル
    • タイプ: ENUM_LINE_STYLE
    • デフォルト値: STYLE_DASHDOT(点線 )
    • 説明: このパラメーターは、垂直線のスタイルを設定する。利用可能なスタイルは以下:
      • STYLE_SOLID (0): 実線
      • STYLE_DASH (1): 破線
      • STYLE_DOT (2): 点線
      • STYLE_DASHDOT (3): 破線と点線の組み合わせ
      • STYLE_DASHDOTDOT (4): 破線と2つの点線の組み合わせ
    • タイプ: int
    • デフォルト値: 1
    • 説明: このパラメーターは、垂直線の幅を設定する。幅は1以上の整数で指定し、値が大きいほど線が太くなる。
  2. 垂直線を引く時間
    • タイプ: string
    • デフォルト値: "00:00"
    • 説明: このパラメーターは、垂直線を引く時間を設定する。時間はHH:MM形式で指定。例えば、午前10時30分に垂直線を引く場合は"10:30"と入力する。
  3. 垂直線を引く本数
    • : intデフォルト値: 20
    • 説明: 垂直線を描画する過去の日数を指定。この値により、指定した時間に垂直線を描画する過去の日数を設定できる。デフォルトでは過去20日分の垂直線を描画。

使用方法

  1. インジケーターをチャートに追加:
    • MT4プラットフォームで、ナビゲータウィンドウからこのインジケーターをドラッグ&ドロップしてチャートに追加する。
  2. パラメーターの設定:
    • インジケーターのプロパティウィンドウが開く。ここで各パラメーターを設定。
    • LineColor: ドロップダウンメニューから色を選択。
    • LineStyle: ドロップダウンメニューからスタイルを選択。
    • LineWidth: 数値を入力して幅を設定。
    • LineTime: 時間をHH:MM形式で入力。
  3. 設定を反映:
    • パラメーターを設定したら、「OK」ボタンをクリックして設定を反映させる。設定した時間に応じて過去5日分の垂直線が描画される。

注意点

  • 時間形式: LineTimeパラメーターは必ずHH:MM形式で入力する。例えば、"08:15""23:45"のように指定。
  • スタイル選択: LineStyleのスタイルを変更するときは、ドロップダウンメニューから適切なスタイルを選択する。
  • 色設定: LineColorは標準の色定数またはRGB値で設定可能。

1日ごとに区切った垂直ラインでチャートを分析する

1日ごとの高値や安値がパッと見てわかると、ブレイクポイントの把握が早いですね。

このインジケーターを活用する方法を解説する。
OneDayLineを使えば過去4日分が1日ごとに区切られるため、値動きが理解しやすくなる。

  • トレンドの理解
  • 高値と安値
  • 1日の値幅

トレンドの理解

過去数日の値動きでトレンドが発生していたか、否かを把握することで戦略のための判断材料とできる。
押し目を待つ、戻りを待つ、などの判断にはトレンドの理解が必要となる。

高値と安値

1日ごとの高値と安値を理解することで、サポートとレジスタンスを意識したチャート分析が可能となる。
意識ポイントでの反発やブレイクを考慮した戦略には、日ごとの高値安値は適している。

1日の値幅

過去数日の値幅を知ることで、ボラティリティの理解に繋がる。
ボラティリティを理解することでストップやリミットの設定に役立てることができ、また、不利なトレードを見送るような判断を下せるようになる。

垂直ラインと合わせて使えるMT4ツール

垂直ラインを引くインジケーターとあわせて使いやすいMT4用のツールを紹介する。

これらのツールはチャート上で意識されるポイントを視覚的に把握しやすくする。

その他のインジケーターを紹介

OneDayLineのプログラム

//+------------------------------------------------------------------+
//|                                                   OneDayLine.mq4 |
//|                                     Copyright 2024, FX-Bonus.net |
//|                                            https://fx-bonus.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, FX-Bonus.net"
#property link      "https://fx-bonus.net/"
#property version   "1.00"
#property strict
#property indicator_chart_window  // インジケーターをチャートウィンドウに描画

// 入力パラメータの定義
input color LineColor = clrGray;  // 色
input ENUM_LINE_STYLE LineStyle = STYLE_DOT;  // スタイル
input int LineWidth = 1;  // 幅
input string LineTime = "00:00";  // 垂直線を引く時間
input int DaysToDraw = 20;  // 垂直線を引く本数

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   // インジケーターのバッファーは使用しないため、不要
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   // 既存の垂直線を削除
   for (int i = 0; i < DaysToDraw; i++)
     {
      string lineName = "MidnightLine" + IntegerToString(i);
      if (ObjectFind(0, lineName) != -1)
         ObjectDelete(0, lineName);
     }

   // 入力された時間をdatetime型に変換
   int lineTimeSeconds;
   if (!StringToTimeFormat(LineTime, lineTimeSeconds))
      return(rates_total); // 無効な時間形式の場合、何も描画しない

   // 過去n日分の指定された時間に垂直線を描画
   for (int i = 0; i < DaysToDraw; i++)
     {
      datetime timeToDraw = iTime(NULL, PERIOD_D1, i) + (datetime)lineTimeSeconds;
      string lineName = "MidnightLine" + IntegerToString(i);
      ObjectCreate(0, lineName, OBJ_VLINE, 0, timeToDraw, 0);
      ObjectSetInteger(0, lineName, OBJPROP_COLOR, LineColor);
      ObjectSetInteger(0, lineName, OBJPROP_STYLE, LineStyle);
      ObjectSetInteger(0, lineName, OBJPROP_WIDTH, LineWidth);
     }

   return(rates_total);
  }

//+------------------------------------------------------------------+
//| Convert string time to seconds since midnight                    |
//+------------------------------------------------------------------+
bool StringToTimeFormat(string strTime, int &timeResult)
  {
   int hour, min;
   if (StringLen(strTime) != 5 || StringSubstr(strTime, 2, 1) != ":")
      return(false);

   hour = StringToInteger(StringSubstr(strTime, 0, 2));
   min = StringToInteger(StringSubstr(strTime, 3, 2));

   if (hour < 0 || hour > 23 || min < 0 || min > 59)
      return(false);

   timeResult = hour * 3600 + min * 60;
   return(true);
  }
//+------------------------------------------------------------------+

ソースコードを詳しく解説

このインジケーターは、設定した時間に過去5日分の垂直線をチャートに描画する。

ヘッダ部分

#property strict
#property indicator_chart_window  // インジケーターをチャートウィンドウに描画
  • #property strict: 厳密な型チェックを行う設定で、プログラムの安全性と信頼性を向上させる。
  • #property indicator_chart_window: インジケーターがチャートウィンドウに描画されることを指定。

入力パラメータの定義

input color LineColor = clrGray;  // 色
input ENUM_LINE_STYLE LineStyle = STYLE_DOT;  // スタイル
input int LineWidth = 1;  // 幅
input string LineTime = "00:00";  // 垂直線を引く時間
  • input color LineColor = clrGray;: 垂直線の色を指定。デフォルトはグレー (clrGray)
  • input ENUM_LINE_STYLE LineStyle = STYLE_DOT;: 垂直線のスタイルを指定。デフォルトは点線 (STYLE_DOT)
  • input int LineWidth = 1;: 垂直線の幅を指定。デフォルトは1ピクセル。
  • input string LineTime = "00:00";: 垂直線を描画する時間を指定。デフォルトは午前0時 (00:00)

インジケーターの初期化関数

int OnInit()
  {
   // インジケーターのバッファーは使用しないため、不要
   return(INIT_SUCCEEDED);
  }
  • int OnInit(): インジケーターの初期化関数。この関数はインジケーターがチャートに追加されたときに呼び出される。
  • return(INIT_SUCCEEDED);: 初期化が成功したことを示す。

インジケーターの計算関数

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[])
  {
   // 既存の垂直線を削除
   for (int i = 0; i < 5; i++)
     {
      string lineName = "MidnightLine" + IntegerToString(i);
      if (ObjectFind(0, lineName) != -1)
         ObjectDelete(0, lineName);
     }

   // 入力された時間をdatetime型に変換
   int lineTimeSeconds;
   if (!StringToTimeFormat(LineTime, lineTimeSeconds))
      return(rates_total); // 無効な時間形式の場合、何も描画しない

   // 過去5日分の指定された時間に垂直線を描画
   for (int i = 0; i < 5; i++)
     {
      datetime timeToDraw = iTime(NULL, PERIOD_D1, i) + (datetime)lineTimeSeconds;
      string lineName = "MidnightLine" + IntegerToString(i);
      ObjectCreate(0, lineName, OBJ_VLINE, 0, timeToDraw, 0);
      ObjectSetInteger(0, lineName, OBJPROP_COLOR, LineColor);
      ObjectSetInteger(0, lineName, OBJPROP_STYLE, LineStyle);
      ObjectSetInteger(0, lineName, OBJPROP_WIDTH, LineWidth);
     }

   return(rates_total);
  }
  • int OnCalculate(...): インジケーターの計算関数で、チャートの描画更新時に呼び出される。
  • rates_total: 現在のチャートのバーの数。
  • prev_calculated: 以前に計算されたバーの数。
  • 他の引数 (time[], open[], high[], low[], close[], tick_volume[], volume[], spread[]) は、チャートの各バーのデータを提供。

既存の垂直線を削除

for (int i = 0; i < 5; i++)
  {
   string lineName = "MidnightLine" + IntegerToString(i);
   if (ObjectFind(0, lineName) != -1)
      ObjectDelete(0, lineName);
  }
  • 既存の5本の垂直線を削除する。ObjectFind関数で垂直線が存在するか確認し、存在する場合はObjectDelete関数で削除。

入力された時間をdatetime型に変換

int lineTimeSeconds;
if (!StringToTimeFormat(LineTime, lineTimeSeconds))
   return(rates_total); // 無効な時間形式の場合、何も描画しない
  • StringToTimeFormat関数を使って、入力された時間 (LineTime) を秒数に変換する。無効な時間形式の場合は、何も描画せずに関数を終了。

垂直線を描画

for (int i = 0; i < 5; i++)
  {
   datetime timeToDraw = iTime(NULL, PERIOD_D1, i) + (datetime)lineTimeSeconds;
   string lineName = "MidnightLine" + IntegerToString(i);
   ObjectCreate(0, lineName, OBJ_VLINE, 0, timeToDraw, 0);
   ObjectSetInteger(0, lineName, OBJPROP_COLOR, LineColor);
   ObjectSetInteger(0, lineName, OBJPROP_STYLE, LineStyle);
   ObjectSetInteger(0, lineName, OBJPROP_WIDTH, LineWidth);
  }
  • iTime関数を使って、過去5日分の日付を取得し、lineTimeSecondsを加算して描画する時間を計算する。
  • ObjectCreate関数を使って垂直線を作成し、ObjectSetInteger関数で色 (LineColor)、スタイル (LineStyle)、幅 (LineWidth) を設定する。

時間文字列を秒数に変換する関数

bool StringToTimeFormat(string strTime, int &timeResult)
  {
   int hour, min;
   if (StringLen(strTime) != 5 || StringSubstr(strTime, 2, 1) != ":")
      return(false);

   hour = StringToInteger(StringSubstr(strTime, 0, 2));
   min = StringToInteger(StringSubstr(strTime, 3, 2));

   if (hour < 0 || hour > 23 || min < 0 || min > 59)
      return(false);

   timeResult = hour * 3600 + min * 60;
   return(true);
  }
  • bool StringToTimeFormat(string strTime, int &timeResult): 文字列の時間 (strTime) を秒数 (timeResult) に変換する関数。
  • 時間形式 (HH:MM) をチェックし、有効な形式でない場合は false を返す。
  • 時間 (hour) と分 (min) を整数に変換し、範囲をチェックする。
  • hourmin を秒数に変換して timeResult に格納し、true を返す。

まとめ

このインジケーター「OneDayLine」を使えば、チャートに5本の1日区切りラインを引くことができる。
インジケーターはこのページでダウンロードが可能。
パラメーター設定でラインの時間を自由に指定できるほか、ラインのスタイルや色も変更が可能。

1日ごとに区切ることで、トレンドの理解や高値安値、値幅など多くの情報を簡単に得られるようになる。
その他ツールで市場ごとに色分けしたり、ラウンドナンバーに水平線を引いたりと併用も可能。

プログラムの詳細についても解説している。

更新情報

  • 2024/06/28
    • 垂直線の本数を変更できるように修正。n本とし、パラメーターで設定できるようになった。標準は20本。
  • URLをコピーしました!
  • URLをコピーしました!

このEAを使って、将来の見通しが立ちました

収入を増やしたい、将来のための資産が欲しい、支払いに縛られない自由な生活がしたい

このEAを使うと将来が見通せます。

22年以上で無敗の安定取引。リスク0%運用も可能なロジック。年利100%越えの上級者向け取引も可能。

マネーマシンとして育て上げることで大きな不労所得を得られます。

BBF-Girl
ドリームEA_BBF 無料ダウンロード
BBF_MQL5-202400629
リアルトレード公開|EA BBF

ポジション監視の時間

集中力は続いてますか?


オートクローズツールを使ってポジション管理を自動化


自動ポジション管理だから万が一でも大丈夫

あなたは空いた時間を自由に、効率的に使えます

自動決済ルールは独自にカスタム可能

ストップ、リミット変更にも対応。

エントリー後のポジション管理をすべて自動化できるトレーディングサポートツール。

トレード中のちょっとした離席など、念のためセットといった使い方も可能。

MT4用自動決済ツール【AutoCloseTool】は無料で入手できます。

オートクローズツール

取引ごとにキャッシュバックが発生します

もらわないだけ損している
取引ごとに毎回発生する現金のキャッシュバック
海外FXのキャッシュバックはメリットしかないサービスです

取引ごとにキャッシュバック
目次