ラウンドナンバーに自動で水平ラインを引く方法|MT4スクリプト

ラウンドナンバーのアイキャッチ
  • URLをコピーしました!

チャートにラウンドナンバーの水平ラインを引きたいのですが。

簡単にできる方法はありますか?


※ラウンドナンバー:1.00000や100.000などの節値

ホシノ

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

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

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

〇チャート上に表示されるラウンドナンバーの水平線を簡単に引くスクリプトについて

〇スクリプトのインストールと使い方

目次

ラウンドナンバーが簡単に引けるスクリプト|RoundNumbers

RoundNumbersチャート画面

MT4用スクリプト「RoundNumbers」は、実行するとチャートで表示されている範囲のラウンドナンバー全てに自動で水平ラインを引く。
ドルストレート(1.00000)クロス円(100.000)どちらの桁数にも対応している。
ラウンドナンバーを引いておくとチャートの縮尺が変動した場合でも、距離感を保った分析が継続できる。

ダウンロードはこちら

スクリプトのインストールと使い方

スクリプトのインストール

ダウンロードしたスクリプトはMT4のデータフォルダからScriptsフォルダへ移動することでインストールできる。
ファイルの移動後はMT4の再起動でインストールが完了となる。

ディレクトリへのアクセス順序
ファイル>データフォルダを開く>MQL4>Scripts

スクリプトRoundNumbersの使い方

スクリプトはチャート上にドロップするか、ダブルクリックで実行できる。
スクリプト実行前にパラメーター画面が開くようになっている。

RoundNumbersパラメーター画面
スクリプトRoundNumbersのパラメーター画面

パラメーター画面では線の色や太さ、スタイルなどを設定できる。

RoundNumbers確認画面
スクリプトの実行前に最終確認ができる

パラメーター確定後は確認ダイアログが表示され、最終確認ができる。
描画される水平ラインは、スクリプトが実行される度にリセットされ、再描画されるようになっている。
また、ラウンドナンバーの水平ラインはチャート上に表示されるものだけとなる。
チャート上に表示されていないラウンドナンバーには水平ラインは描画されない。

ラウンドナンバーの水平ラインを活用する

チャート上に引かれたラウンドナンバー(キーレベル)は、トレードの意思決定に非常に役立つ。
これらのレベルは、サポートおよびレジスタンスレベルとして機能することが多いため、トレーダーはこれを活用してトレード戦略を構築できる。

1. サポートおよびレジスタンスとして利用

サポートレベル

  • 価格がラウンドナンバーに近づいたら買いエントリーを検討: 価格がラウンドナンバーに近づいたとき、トレーダーはそのレベルがサポートとして機能する可能性が高いと見なし、買いエントリーを検討できる。
    特に、複数のロウソク足がそのレベルで反発している場合は、サポートの強さが確認できる。

レジスタンスレベル

  • 価格がラウンドナンバーに近づいたら売りエントリーを検討: 価格がラウンドナンバーに近づいたとき、そのレベルがレジスタンスとして機能する可能性が高いと見なし、売りエントリーを検討する。
    特に、複数のロウソク足がそのレベルで反発している場合は、レジスタンスの強さが確認できる。

2. ブレイクアウト戦略

  • ラウンドナンバーのブレイクアウトを狙う: ラウンドナンバーは心理的に重要なレベルであり、多くのトレーダーが注目している。
    価格がラウンドナンバーを強くブレイクした場合、その方向に大きな動きが発生することがよくある。
    このような場合、ブレイクアウト後のエントリーを狙う戦略が有効となる。

ブレイクアウトの確認

  • ブレイクアウトの確認のためのフィルター: ブレイクアウトが偽のブレイクアウトでないことを確認するために、ボリュームインディケータや他のテクニカル指標(例えば、RSIやMACD)を使用しブレイクアウトの信頼性を確認する。

3. リトレースメント戦略

  • リトレースメントを待つ: ラウンドナンバーをブレイクした後、価格が一時的に戻ってくることがある。
    このリトレースメントを待ち、ブレイクしたラウンドナンバーが新しいサポートまたはレジスタンスとして機能するのを確認してからエントリーする。

4. 損切りおよび利確ポイントの設定

  • 損切りポイントとして利用: ラウンドナンバーのすぐ下(サポートレベルの場合)やすぐ上(レジスタンスレベルの場合)に損切りポイントを設定することで、リスク管理とする。
  • 利確ポイントとして利用: トレードが成功した場合、次のラウンドナンバーを利確ポイントとして設定できる。
    これにより、利益を確定するタイミングを明確する。

具体例

例1: サポートとしてのラウンドナンバー

  1. 観察: EUR/USDが1.10000に近づいている。
  2. 確認: 1.10000で反発する動きを複数回確認する。
  3. エントリー: 1.10000で買いエントリー。
  4. 損切り: 1.09950(1.10000の少し下)に損切り設定。
  5. 利確: 1.10500(次のラウンドナンバー)に利確設定。

例2: レジスタンスとしてのラウンドナンバー

  1. 観察: USD/JPYが110.000に近づいている。
  2. 確認: 110.000で反発する動きを複数回確認する。
  3. エントリー: 110.000で売りエントリー。
  4. 損切り: 110.050(110.000の少し上)に損切り設定。
  5. 利確: 109.500(次のラウンドナンバー)に利確設定。

例3: ブレイクアウト戦略

  1. 観察: GBP/USDが1.30000のラウンドナンバーに近づいている。
  2. 確認: 1.30000を大きなボリュームでブレイク。
  3. エントリー: 1.30100で買いエントリー(ブレイクアウト後)。
  4. 損切り: 1.29850(1.30000の少し下)に損切り設定。
  5. 利確: 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スクリプト集

  • URLをコピーしました!
  • URLをコピーしました!

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

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

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

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

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

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

ポジション監視の時間

集中力は続いてますか?


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


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

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

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

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

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

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

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

オートクローズツール

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

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

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