ラウンドナンバーに自動で水平ラインを引く|MT4スクリプト
チャートにラウンドナンバーの水平ラインを引きたいです。
簡単にできる方法はありますか?
※ラウンドナンバー:1.00000や100.000などの節値
FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。
この無料EAで不労所得が稼げます
累計テスト120年以上・リアル取引公開2020年~
このページでわかること•できること
〇チャート上に表示されるラウンドナンバーの水平線を簡単に引くスクリプトについて
〇スクリプトのインストールと使い方
ラウンドナンバーが簡単に引けるスクリプト|RoundNumbers
MT4用スクリプト「RoundNumbers」は、実行するとチャートで表示されている範囲のラウンドナンバー全てに自動で水平ラインを引く。
ドルストレート(1.00000)クロス円(100.000)どちらの桁数にも対応している。
ラウンドナンバーを引いておくとチャートの縮尺が変動した場合でも、距離感を保った分析が継続できる。
ラウンドナンバーズのダウンロード
節値に水平ラインを描画するスクリプト「RoundNumbers」はこちらからダウンロードできる。
ダウンロードするファイルは.ex4となっており、MT4のデータフォルダにある「Scripts」へ移動することでインストールできる。
ラウンドナンバーズのインストール
ダウンロードしたスクリプトはMT4のデータフォルダからScriptsフォルダへ移動することでインストールできる。
ファイルの移動後はMT4の再起動でインストールが完了となる。
スクリプトRoundNumbersの使い方
スクリプトはチャート上にドロップするか、ダブルクリックで実行できる。
スクリプト実行前にパラメーター画面が開くようになっている。
パラメーター画面では線の色や太さ、スタイルなどを設定できる。
パラメーター確定後は確認ダイアログが表示され、最終確認ができる。
描画される水平ラインは、スクリプトが実行される度にリセットされ、再描画されるようになっている。
また、ラウンドナンバーの水平ラインはチャート上に表示されるものだけとなる。
チャート上に表示されていないラウンドナンバーには水平ラインは描画されない。
多くのラウンドナンバーに水平ラインを描画しておきたい場合は、日足以上の上位足でスクリプトを実行すると簡単に対応できる。
ラウンドナンバーの水平ラインを活用する
チャート上に引かれたラウンドナンバー(キーレベル)は、トレードの意思決定に役立つ。
これらのレベルは、サポートおよびレジスタンスレベルとして機能することが多いため、トレーダーはこれを活用してトレード戦略を構築できる。
1. サポートおよびレジスタンスとして利用
サポートレベル
- 価格がラウンドナンバーに近づいたら買いエントリーを検討: 価格がラウンドナンバーに近づいたとき、トレーダーはそのレベルがサポートとして機能する可能性が高いと見なし、買いエントリーを検討できる。
特に、複数のロウソク足がそのレベルで反発している場合は、サポートの強さが確認できる。
レジスタンスレベル
- 価格がラウンドナンバーに近づいたら売りエントリーを検討: 価格がラウンドナンバーに近づいたとき、そのレベルがレジスタンスとして機能する可能性が高いと見なし、売りエントリーを検討する。
特に、複数のロウソク足がそのレベルで反発している場合は、レジスタンスの強さが確認できる。
2. ブレイクアウト戦略
- ラウンドナンバーのブレイクアウトを狙う: ラウンドナンバーは心理的に重要なレベルであり、多くのトレーダーが注目している。
価格がラウンドナンバーを強くブレイクした場合、その方向に大きな動きが発生することがよくある。
このような場合、ブレイクアウト後のエントリーを狙う戦略が有効となる。
ブレイクアウトの確認
- ブレイクアウトの確認のためのフィルター: ブレイクアウトが偽のブレイクアウトでないことを確認するために、ボリュームインディケータや他のテクニカル指標(例えば、RSIやMACD)を使用しブレイクアウトの信頼性を確認する。
3. リトレースメント戦略
- リトレースメントを待つ: ラウンドナンバーをブレイクした後、価格が一時的に戻ってくることがある。
このリトレースメントを待ち、ブレイクしたラウンドナンバーが新しいサポートまたはレジスタンスとして機能するのを確認してからエントリーする。
4. 損切りおよび利確ポイントの設定
- 損切りポイントとして利用: ラウンドナンバーのすぐ下(サポートレベルの場合)やすぐ上(レジスタンスレベルの場合)に損切りポイントを設定することで、リスク管理とする。
- 利確ポイントとして利用: トレードが成功した場合、次のラウンドナンバーを利確ポイントとして設定できる。
これにより、利益を確定するタイミングを明確する。
具体例
例1: サポートとしてのラウンドナンバー
- 観察: EUR/USDが1.10000に近づいている。
- 確認: 1.10000で反発する動きを複数回確認する。
- エントリー: 1.10000で買いエントリー。
- 損切り: 1.09950(1.10000の少し下)に損切り設定。
- 利確: 1.10500(次のラウンドナンバー)に利確設定。
例2: レジスタンスとしてのラウンドナンバー
- 観察: USD/JPYが110.000に近づいている。
- 確認: 110.000で反発する動きを複数回確認する。
- エントリー: 110.000で売りエントリー。
- 損切り: 110.050(110.000の少し上)に損切り設定。
- 利確: 109.500(次のラウンドナンバー)に利確設定。
例3: ブレイクアウト戦略
- 観察: GBP/USDが1.30000のラウンドナンバーに近づいている。
- 確認: 1.30000を大きなボリュームでブレイク。
- エントリー: 1.30100で買いエントリー(ブレイクアウト後)。
- 損切り: 1.29850(1.30000の少し下)に損切り設定。
- 利確: 1.30500(次のラウンドナンバー)に利確設定。
結論
ラウンドナンバーはトレードの意思決定において強力なツールとなる。
これらのレベルを利用し、エントリーおよびエグジットのポイントを明確に設定することで、トレードの精度を高めることができる。
ラウンドナンバーは多くのトレーダーが注目するため、サポートやレジスタンスとして機能する可能性が高いポイントとなっている。
適切なリスク管理とともに、これらのレベルをトレード戦略に組み込むことで、成功率を向上できるはずだ。
ラウンドナンバーと市場ごとのゾーンを表示する
市場の時間帯ごとにできる高値と安値を視覚的にわかりやすくするスクリプトは、ラウンドナンバーのスクリプトと相性が良い。どちらも意識されるレベルとなるため、注文が溜まる傾向にある。これらツールでチャートの意識ポイントを把握することで「意識ポイントに注文が溜まっている」というイメージでチャートを見れるようになる。
チャートのオブジェクトを一括削除する
チャートのオブジェクトを一括で削除できるスクリプトも合わせて使いやすい。
ラウンドナンバーのスクリプトで引かれたラインは自動で削除されない。
手作業になるため、ラインの本数によっては削除にも手間がかかる。
オブジェクトの一括削除を可能としたスクリプトがあるとラウンドナンバーのスクリプトも使いやすくなる。
RoundNumbersのソースコード
//+------------------------------------------------------------------+
//| Round Numbers.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 show_inputs
// パラメーターの宣言
input color LineColor = clrRed; // ラインの色
input ENUM_LINE_STYLE LineStyle = STYLE_DASH; // ラインのスタイル
input int LineWidth = 1; // ラインの太さ
//+------------------------------------------------------------------+
//| スクリプト初期化関数 |
//+------------------------------------------------------------------+
void OnInit()
{
// 実行前に確認メッセージを表示
int result = MessageBox("ラウンドナンバーに水平線を引きますか?", "確認", MB_YESNO | MB_ICONQUESTION);
if (result == IDNO)
{
// ユーザーがNoを選択した場合、スクリプトを終了
Print("スクリプトがユーザーによってキャンセルされました。");
return;
}
// ラウンドナンバーを取得し、水平線を引く
DrawRoundNumberLines();
}
//+------------------------------------------------------------------+
//| ラウンドナンバーを取得し、水平線を引く関数 |
//+------------------------------------------------------------------+
void DrawRoundNumberLines()
{
// チャートの最小価格と最大価格を取得
double minPrice = WindowPriceMin();
double maxPrice = WindowPriceMax();
// 通貨ペアの小数点以下の桁数を取得
int digits = (int)MarketInfo(Symbol(), MODE_DIGITS);
// 桁数に応じたステップサイズを決定
double step = MathPow(10, -digits);
// ラウンドナンバーの範囲を決定
for (double price = minPrice; price <= maxPrice; price += step)
{
if (IsRoundNumber(price, digits))
{
string lineName = "RoundNumberLine_" + DoubleToString(price, digits);
DrawHorizontalLine(lineName, price);
}
}
}
//+------------------------------------------------------------------+
//| 水平線を引く関数 |
//+------------------------------------------------------------------+
void DrawHorizontalLine(string name, double price)
{
// 既存のオブジェクトを削除して再作成
if (ObjectFind(0, name) != -1)
{
ObjectDelete(0, name);
}
// 水平線を描画するためのオブジェクトを作成
ObjectCreate(0, name, OBJ_HLINE, 0, 0, price);
// 水平線の色、スタイル、太さを設定
ObjectSetInteger(0, name, OBJPROP_COLOR, LineColor);
ObjectSetInteger(0, name, OBJPROP_STYLE, LineStyle);
ObjectSetInteger(0, name, OBJPROP_WIDTH, LineWidth);
// 水平線をチャートに表示
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, name, OBJPROP_SELECTED, false);
ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, true);
}
//+------------------------------------------------------------------+
//| ラウンドナンバーかどうかを判定する関数 |
//+------------------------------------------------------------------+
bool IsRoundNumber(double price, int digits)
{
int multiplier = (int)MathPow(10, digits); // 桁数に応じた倍率を計算
int lastDigits = int(price * multiplier) % 1000;
return (lastDigits == 0);
}
//+------------------------------------------------------------------+
//| スクリプト終了関数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 必要に応じて、スクリプト終了時の処理をここに記述
}
//+------------------------------------------------------------------+
//| スクリプト実行関数 |
//+------------------------------------------------------------------+
void OnStart()
{
// OnInitで処理が行われるため、ここには何も記述しない
}
ソースコードの詳細を解説
パラメーターの宣言
input color LineColor = clrRed; // ラインの色 input ENUM_LINE_STYLE LineStyle = STYLE_DASH; // ラインのスタイル input int LineWidth = 1; // ラインの太さ
input
キーワードは、ユーザーが実行前に設定できるパラメーターを宣言するために使用される。LineColor
は、ラインの色を指定する。デフォルト値は赤 (clrRed
)LineStyle
は、ラインのスタイルを指定する。デフォルト値はダッシュ (STYLE_DASH
)LineWidth
は、ラインの太さを指定する。デフォルト値は1
スクリプト初期化関数
void OnInit() { // 実行前に確認メッセージを表示 int result = MessageBox("ラウンドナンバーに水平線を引きますか?", "確認", MB_YESNO | MB_ICONQUESTION); if (result == IDNO) { // ユーザーがNoを選択した場合、スクリプトを終了 Print("スクリプトがユーザーによってキャンセルされました。"); return; } // ラウンドナンバーを取得し、水平線を引く DrawRoundNumberLines(); }
OnInit
関数は、スクリプトが初期化されるときに呼び出される。MessageBox
関数を使って、ユーザーに水平線を引くかどうかを確認する。- ユーザーが「No」を選択した場合、スクリプトは終了。
- ユーザーが「Yes」を選択した場合、
DrawRoundNumberLines
関数が呼び出され、水平線が引かれる。
ラウンドナンバーを取得し、水平線を引く関数
void DrawRoundNumberLines() { // チャートの最小価格と最大価格を取得 double minPrice = WindowPriceMin(); double maxPrice = WindowPriceMax(); // 通貨ペアの小数点以下の桁数を取得 int digits = (int)MarketInfo(Symbol(), MODE_DIGITS); // 桁数に応じたステップサイズを決定 double step = MathPow(10, -digits); // ラウンドナンバーの範囲を決定 for (double price = minPrice; price <= maxPrice; price += step) { if (IsRoundNumber(price, digits)) { string lineName = "RoundNumberLine_" + DoubleToString(price, digits); DrawHorizontalLine(lineName, price); } } }
DrawRoundNumberLines
関数は、チャートの最小価格 (minPrice
) と最大価格 (maxPrice
) を取得する。MarketInfo
関数を使って、通貨ペアの小数点以下の桁数 (digits
) を取得する。MathPow
関数を使って、桁数に応じたステップサイズ (step
) を計算する。- 最小価格から最大価格までループし、各価格がラウンドナンバーかどうかを
IsRoundNumber
関数で判定する。 - ラウンドナンバーであれば、
DrawHorizontalLine
関数を呼び出して水平線を引く。
水平線を引く関数
void DrawHorizontalLine(string name, double price) { // 既存のオブジェクトを削除して再作成 if (ObjectFind(0, name) != -1) { ObjectDelete(0, name); } // 水平線を描画するためのオブジェクトを作成 ObjectCreate(0, name, OBJ_HLINE, 0, 0, price); // 水平線の色、スタイル、太さを設定 ObjectSetInteger(0, name, OBJPROP_COLOR, LineColor); ObjectSetInteger(0, name, OBJPROP_STYLE, LineStyle); ObjectSetInteger(0, name, OBJPROP_WIDTH, LineWidth); // 水平線をチャートに表示 ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(0, name, OBJPROP_SELECTED, false); ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, true); }
DrawHorizontalLine
関数は、指定された価格に水平線を引く。ObjectFind
関数で既存のオブジェクトが存在するか確認し、存在する場合はObjectDelete
関数で削除する。ObjectCreate
関数で水平線を描画するためのオブジェクトを作成する。ObjectSetInteger
関数で、水平線の色 (LineColor
)、スタイル (LineStyle
)、太さ (LineWidth
) を設定する。ObjectSetInteger
関数で、水平線が選択できないように設定し、水平線を右に延長 (RAY_RIGHT
) する。
ラウンドナンバーかどうかを判定する関数
bool IsRoundNumber(double price, int digits) { int multiplier = (int)MathPow(10, digits); // 桁数に応じた倍率を計算 int lastDigits = int(price * multiplier) % 1000; return (lastDigits == 0); }
IsRoundNumber
関数は、指定された価格がラウンドナンバーかどうかを判定。MathPow
関数で桁数に応じた倍率 (multiplier
) を計算し、価格を整数に変換。- 価格の下3桁が000であるかどうかを判定し、ラウンドナンバーであれば
true
を返す。 - リプト終了関数
void OnDeinit(const int reason) { // 必要に応じて、スクリプト終了時の処理をここに記述 }
OnDeinit
関数は、スクリプトが終了する際に呼び出される。ここでは特に処理は記述されていない。
スクリプト実行関数
void OnStart() { // OnInitで処理が行われるため、ここには何も記述しない }
OnStart
関数は、スクリプトのメイン実行関数。このスクリプトでは、OnInit
で処理が行われるため、OnStart
には特に処理は記述されていない。
便利なMT4スクリプト集
-
海外FXのEA_MT4
ラウンドナンバーに自動で水平ラインを引く|MT4スクリプト
-
海外FXのEA_MT4
市場ごとに高値と安値を色分けするMT4ツール|時間帯ブレイクアウト
-
海外FXのEA_MT4
取引履歴をすべてCSVファイルに出力するスクリプト|MT4
-
海外FXのEA_MT4
リスクゼロの損益分岐点でストップ注文するスクリプト|ブレイクイーブン
-
海外FXのEA_MT4
MT4を便利にするスクリプトまとめ
-
海外FXのEA_MT4
すべてのチャートを一括で閉じる方法|通貨ペア選択も可|MT4スクリプト
-
海外FXのEA_MT4
MT4でSL・TP注文を一括でキャンセルする方法
-
海外FXのEA_MT4
ストップロス(損切り)とテイクプロフィット(利食い)を一括で注文する方法
-
海外FXのEA_MT4
MT4一括決済スクリプト|全決済と売り買い決済の選択もできる
-
海外FXのEA_MT4
すべてのチャートを一括で開くMT4スクリプト
-
海外FXのEA_MT4
チャートのトレンドラインやオブジェクトを一括で削除する方法
-
海外FXのEA_MT4
MT4チャートの時間足を一括で切替えるツール
まとめ
MT4用のスクリプト「RoundNumbers」は、チャート上にラウンドナンバーの水平ラインを簡単に引くことができ、トレード戦略に役立てることができる。ラウンドナンバーはサポートやレジスタンスとして機能するため、エントリーやエグジットの判断基準として使いやすく、多くのトレーダーが注目するポイントとなっている。また、ブレイクアウトやリトレースメントを利用した戦略も効果的で、損切りや利確ポイントの設定にも応用できる。
このスクリプトを使うことで、ラウンドナンバーを視覚的に確認しやすくなり、チャート分析の精度が向上する。さらに、市場ごとのゾーンを表示するツールやオブジェクトを一括削除するスクリプトを組み合わせることで、より効率的なチャート分析が可能となる。