EAで決済ラインの色を変更する方法【MT4・MQL4対応】

EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

EAで決済された際、チャート上にエントリーから決済までの破線が表示されます。
標準ではロングが青、ショートが赤に固定されていますが、この線の色やスタイルを自由に変更したい場合は、自分でトレンドラインを描画して管理する方法があります。本記事では、MQL4を使って決済ラインをカスタマイズする方法を具体的に解説します。


MT4標準の決済線の色仕様

ロングエントリーは青、ショートエントリーは赤

MT4では、決済ラインの色はブローカーやMT4仕様により固定されています。

  • ロング(Buy)注文:青
  • ショート(Sell)注文:赤

この色はMT4内部で固定されているため、変更はできません。

標準線の色は変更不可

残念ながら、標準機能だけで決済線の色を変更することはできません。
そのため、任意の色やスタイルで線を表示したい場合は、自分でトレンドラインを上から描画する必要があります


自分でトレンドラインを描画して管理する方法

やりたいこと

決済時に以下の処理を行うEAを作りたい場合の例です。

  • ポジションが決済されたとき
  • エントリー時間・価格 → クローズ時間・価格を結ぶトレンドラインを描画
  • 任意の名前・色・線種(破線など)で表示

サンプルコード(決済時に線を描画)

// 決済された直近の注文にトレンドラインを引く
void DrawTradeLine(int ticket, color order_Color)
{
    // 決済済み注文の情報を取得
    if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY))
    {
        Print("注文情報の取得に失敗:", ticket);
        return;
    }

    datetime entryTime = OrderOpenTime();
    double entryPrice = OrderOpenPrice();
    datetime closeTime = OrderCloseTime();
    double closePrice = OrderClosePrice();

    // トレンドライン名(チケット番号で一意化)
    string lineName = "TradeLine_" + IntegerToString(ticket);

    // 既存のラインがあれば削除
    if (ObjectFind(0, lineName) != -1)
        ObjectDelete(0, lineName);

    // トレンドライン作成
    bool created = ObjectCreate(0, lineName, OBJ_TREND, 0,
                                entryTime, entryPrice,
                                closeTime, closePrice);

    if (!created)
    {
        Print("トレンドライン作成失敗: ", lineName);
        return;
    }

    // ラインの見た目設定
    ObjectSetInteger(0, lineName, OBJPROP_COLOR, order_Color);
    ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_DOT);
    ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 1);
    ObjectSetInteger(0, lineName, OBJPROP_RAY_RIGHT, false); // 右に延長しない
}

ポイント

  • ObjectCreate でトレンドラインを作成
  • ObjectSetInteger で色やスタイルを自由に設定
  • チケット番号でライン名を一意化することで、複数ラインにも対応

使用例(OnTickに組み込み)

input color long_trandColor = clrSkyBlue;    //決済ラインカラー(ロング)
input color short_trandColor = clrYellow;    //決済ラインカラー(ショート)

void OnTick()
{
    int total = OrdersHistoryTotal();

    for (int i = total - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
            if (OrderSymbol() != Symbol()) continue;


            // トレンドライン描画
               if(OrderType() == OP_BUY){
                  DrawTradeLine(OrderTicket(), long_trandColor);
               }else{
                  DrawTradeLine(OrderTicket(), short_trandColor);
               }
            break;
        }
    }
}
  • 最新の決済注文を検出して線を描画
  • OnTickに組み込むことで、自動で更新可能

表示例

チャート上には以下のように表示されます:

  • エントリー価格→クローズ価格をロング/ショートに応じてパラメータ設定の色で描画
  • TradeLine_12345678 などチケット番号ごとに名前が付くため複数描画も可能

線の色と、注文時の矢印の色を合わせてあげると見やすいです。


注意点と応用

複数決済ラインの管理

  • 一意の名前を付けることで既存ラインの重複を防止
  • 古いラインを削除することでチャートの見やすさを保てます

ラインの削除・更新方法

  • ObjectDelete を使って任意のラインを削除または全オブジェクトの削除推奨
  • 再描画時には既存ラインを削除してから作成すると安全

✅ まとめ

今回の手法のメリット

  • EAに組み込むことで自動描画が可能
  • 複数決済ラインも管理可能
  • 線が見づらい場合の対処法となる

今回紹介した方法を応用すれば、決済ラインをより見やすくカスタマイズし、自分の取引スタイルに合ったチャート表示を作ることができます。


✅ 他にも多数のEAサンプルを公開中!

今回紹介した内容以外にも、当サイトではさまざまなFX自動売買EAのサンプルコードを提供しています。

自分に合った戦略のEAを見つけたい方は、ぜひチェックしてみてください。


EA開発初心者向けに、今後も実践的なMQL4関数を紹介していきます。
気になる機能やロジックがあれば、ぜひ他の記事もあわせてご覧ください!

コメント