水平線を引く事は、FXやる上ではとても基本で重要なのですが、慣れてくると面倒。
そこで、当時の高値と安値に自動的に水平線を引くインジケーターを作ってみました。
目次
実行イメージ
当時(D1)の高値、および、短い足で見るとサポートライン、レジスタンスラインになりやすい、H1、H4の高値、安値にもラインを引くようにしてみました。


矢野テック
スキャルピングする上では、なかなか便利
インジケーターダウンロード
以下よりダウンロードして、MT4のデータフォルダ内のIndicatorフォルダに入れてください。
MQL4のソースコード
簡単なコードなので、一応、ソースコードも公開。
//+------------------------------------------------------------------+
//| reg_sapo.mq4 |
//| Copyright 2020, Yanoteck |
//| https://investment-vmoney.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Yanoteck"
#property link "https://investment-vmoney.com/"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_color1 Yellow; //D1 Low and High
#property indicator_color2 clrPeru; //H4 Low and High
#property indicator_color3 clrIndianRed; //H1 Low and High
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
ObjectDelete("D1 Low");
ObjectDelete("D1 High");
ObjectDelete("H4 Low");
ObjectDelete("H4 High");
ObjectDelete("H1 Low");
ObjectDelete("H1 High");
//---
return(INIT_SUCCEEDED);
}
int OnDeinit()
{
ObjectDelete("D1 Low");
ObjectDelete("D1 High");
ObjectDelete("H4 Low");
ObjectDelete("H4 High");
ObjectDelete("H1 Low");
ObjectDelete("H1 High");
return 0;
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
int i=0;
//Torday
double d1_high=iHigh(NULL, PERIOD_D1,0);
double d1_low=iLow(NULL, PERIOD_D1,0);
if (Period() < PERIOD_D1) {
ObjectDelete("D1 Low");
ObjectCreate("D1 Low",OBJ_HLINE, 0, Time[0], d1_low);
ObjectSet("D1 Low", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("D1 Low", OBJPROP_COLOR, indicator_color1);
ObjectSet("D1 Low", OBJPROP_WIDTH, 2);
ObjectDelete("D1 High");
ObjectCreate("D1 High",OBJ_HLINE, 0, Time[0], d1_high);
ObjectSet("D1 High", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("D1 High", OBJPROP_COLOR, indicator_color1);
ObjectSet("D1 High", OBJPROP_WIDTH, 2);
}
//h4
double h4_high = iHigh(NULL, PERIOD_H4,0);
double h4_low = iLow(NULL,PERIOD_H4,0);
if (Period() < PERIOD_H4) {
ObjectDelete("H4 Low");
ObjectCreate("H4 Low",OBJ_HLINE, 0, Time[0], h4_low);
ObjectSet("H4 Low", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("H4 Low", OBJPROP_COLOR, indicator_color2);
ObjectSet("H4 Low", OBJPROP_WIDTH, 2);
ObjectDelete("H4 High");
ObjectCreate("H4 High",OBJ_HLINE, 0, Time[0], h4_high);
ObjectSet("H4 High", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("H4 High", OBJPROP_COLOR, indicator_color2);
ObjectSet("H4 High", OBJPROP_WIDTH, 2);
}
//h1
double h1_high = iHigh(NULL, PERIOD_H1,0);
double h1_low = iLow(NULL,PERIOD_H1,0);
if (Period() < PERIOD_H1) {
ObjectDelete("H1 Low");
ObjectCreate("H1 Low",OBJ_HLINE, 0, Time[0], h1_low);
ObjectSet("H1 Low", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("H1 Low", OBJPROP_COLOR, indicator_color3);
ObjectSet("H1 Low", OBJPROP_WIDTH, 2);
ObjectDelete("H1 High");
ObjectCreate("H1 High",OBJ_HLINE, 0, Time[0], h1_high);
ObjectSet("H1 High", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("H1 High", OBJPROP_COLOR, indicator_color3);
ObjectSet("H1 High", OBJPROP_WIDTH, 2);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
課題点

矢野テック
水平線の上に、文字列を表示させたいね。「D1高値」とかね、分かりやすく。
ObjectCreateを使えば良いんだけど、どの時間に表示するかを調べないといけない。








ご質問はコメント欄からお願いします
コメント一覧 (3件)
はじめまして。大変貴重な情報をありがとうございます。
一点、質問させて下さい。
>水平線の上に、文字列を表示させたいね。「D1高値」とかね、分かりやすく。
>ObjectCreateを使えば良いんだけど、どの時間に表示するかを調べないといけない。
この具体的な記述方法をご教授頂けないでしょうか。
私が実現したい事は、水平線を描写した際に水平線の上に「高値」といった文字を表示させた上で、水平線を移動しても、その文字情報は水平線から離れずに同時に移動できるようにしたいです。
お手数ですが、何卒宜しくお願い致します。
水平線の上に文字列を表示する機能はMQL4には無いです。これを大前提で考えます。水平線に文字列を表示するには、文字列だけObjectCreateを使って別のオブジェクトを作って表示させます。「MQL4 チャート テキスト表示」などでGoogleで検索すると、たくさんサンプルが出てくるので、やり方は分かると思います。
単に文字を表示するだけでも8〜9行書かないといけません。そして、文字列を表示する際は、座標も指定しないといけないので、水平線のちょい下あたりの座標を指定すれば、水平線の位置が変わったら追随してくれます。
ご丁寧にありがとうございます!
頂いた回答踏まえて、やり方調べてみますね。
この度はありがとうございました!!