リスクゼロの損益分岐点でストップ注文するスクリプト|ブレイクイーブン

ブレイクイーブンスクリプトのアイキャッチ
  • URLをコピーしました!

複数ポジションでの損益分岐点は、計算が少し大変です。
簡単にリスクゼロのストップ注文ができる方法はありますか?

ホシノ

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

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

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

〇損益分岐点を計算し、ストップ注文できるスクリプトについて

〇スクリプトのダウンロード

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

目次

損益分岐点にリスクゼロのストップ注文ができるスクリプト|Break even

スクリプト「Break even」を使うと損益分岐点を計算し、ストップ注文を入れてくれる。
ストップ注文は適用開始の利益幅と最低の獲得利益を指定できる。
ポジションがひとつの場合は簡単な作業であるが、複数ポジションの場合に損益分岐点を割り出すには手間がかかる。
このスクリプトを使えば、複数ポジションでも簡単にリスクゼロの位置でストップ注文ができる。
獲得する利益も自由に設定できる。

また、適用する注文は、すべての注文、買いのみ、売りのみから選択可能。

Break evenのダウンロードはこちら

Break evenのインストール

ダウンロードしたスクリプトはMT4の「scripts」フォルダへ移動し、再起動でインストールが完了する。

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

MT4から上記の順番でフォルダを開き、スクリプトを移動する。
スクリプトのインストール詳細は以下を参照

Break evenの使い方

MT4へインストールしたスクリプトは、ナビゲーターのスクリプトから呼び出しが可能となる。

スクリプトの起動はダブルクリックやチャートへのドロップで実行できる。
スクリプトを実行するとパラメーター画面が開くので、パラメーターを設定しOKをクリック。

ブレイクイーブンのパラメーター画面
Breakevenのパラメーター画面

〇現在のチャートシンボルのみ:実行したチャートの通貨ペアのみか、すべての注文に適用させるかを選択。
〇適用する注文:全て、買いのみ、売りのみ、の3点から選択可能。
〇適用開始の利益:全ポジションの合計でどれだけの利益からスクリプトを適用させるかを指定。
〇獲得する利益:確定させる利益の量を指定。

運用開始の利益で設定した値以上に利益がある場合、スクリプトは実行される。

スクリプト「ブレイクイーブン」の便利な点

リスクゼロの損益分岐点でストップ注文できるスクリプトは「ブレイクイーブン」は、トレーダーにとって便利なツールだ。
複数ポジションに対応し、売りのみ、買いのみの適用もできる。
具体的に便利である点は以下より参照いただきたい。

  1. リスク管理強化: スクリプトは損益分岐点で自動的にストップ注文を行うため、ポジションのリスクを限定できる。
    損失が最小限に抑えられるため、トレーダーのリスク管理が簡単に強化される。
  2. 感情の排除: 感情に左右されずに注文が実行されるため、冷静なトレードが可能となる。
    ヒューマンエラーや感情的な判断ミスを未然に回避できる。
  3. 効率的なエントリー/エグジット: 損益分岐点でのストップ注文は、効率的なエントリーとエグジットを可能にする。
    利益を最大化し、損失を最小限に抑えることに役立つ。
  4. 時間節約: ブレイクイーブンの注文を実行した後は、常にチャートを監視する必要がなくなる。
    節約できた時間で他の重要な作業に集中もできる。

これらの要因により、リスクゼロの損益分岐点でストップ注文するスクリプトは、トレードの効率性、リスク管理、感情の排除などをサポートし、トレーダーの取引を強化できる。

スクリプトのプログラム

//+------------------------------------------------------------------+
//|                                                   Break even.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
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
enum ENUM_ORDER_TYPES
{
    ALL_ORDERS = 1, // 全ての注文
    ONLY_BUY = 2,   // 買い注文のみ
    ONLY_SELL = 3   // 売り注文のみ
};

input bool OnlyCurrentSymbol = false; // 現在のチャートのシンボルのみ
input ENUM_ORDER_TYPES OrderTypeFilter = ALL_ORDERS; // 適用する注文
input int MinimumProfit = 0;          // 適用開始の利益(ポイント)
input int AdditionalProfit = 0;       // 獲得する利益(ポイント)

void OnStart()
{
    if (!TerminalInfoInteger(TERMINAL_CONNECTED))
    {
        Print("トレードサーバーに接続されていません。終了します。");
        return;
    }

    if ((!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) || (!MQLInfoInteger(MQL_TRADE_ALLOWED)))
    {
        Print("オートトレードが無効です。有効にしてください。終了します。");
        return;
    }
    
    int orders_total = OrdersTotal();
    for (int i = orders_total - 1; i >= 0; i--) // 後ろから処理して、ループ中に1つ以上の注文が閉じられた場合に備える
    {
        if (!OrderSelect(i, SELECT_BY_POS))
        {
            Print("エラー - 注文が選択できません - ", GetLastError());
            continue;
        }
        if (OrderProfit() <= 0) continue; // 損失の注文は常にスキップ
        // 注文がフィルターと一致するかどうかを確認し、一致しない場合は注文をスキップして次に移動する
        if ((OrderTypeFilter == ONLY_SELL) && (OrderType() == OP_BUY)) continue;
        if ((OrderTypeFilter == ONLY_BUY)  && (OrderType() == OP_SELL)) continue;
        if ((OnlyCurrentSymbol) && (OrderSymbol() != Symbol())) continue;

        double point = SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT);
        // 差を計算してdoubleを比較。この差がPoint / 2より大きい場合、注文の利益はMinimumProfitパラメーター以下です。
        if ((MinimumProfit > 0) && ((double)MinimumProfit - MathAbs(OrderOpenPrice() - OrderClosePrice()) / point > point / 2)) continue;

        if (SymbolInfoInteger(OrderSymbol(), SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_DISABLED)
        {
            Print(OrderSymbol(), " で取引が無効です。スキップします。");
            continue;
        }

        double extra_be_distance = AdditionalProfit * point;
        int digits = (int)SymbolInfoInteger(OrderSymbol(), SYMBOL_DIGITS);
        double tick_size = MarketInfo(OrderSymbol(), MODE_TICKSIZE);
        if (tick_size > 0)
        {
            // Tickサイズの精度に合わせて調整する
            extra_be_distance = NormalizeDouble(MathRound(extra_be_distance / tick_size) * tick_size, digits);
        }
        else
        {
            Print(OrderSymbol(), " のTickサイズが0です。スキップします。");
            continue;
        }
        
        if (OrderType() == OP_BUY)
        {
            double BE_price = NormalizeDouble(OrderOpenPrice() + extra_be_distance, digits);
            if ((SymbolInfoDouble(OrderSymbol(), SYMBOL_BID) >= BE_price) && (BE_price > OrderStopLoss())) // 現在の価格が計算されたBE価格より上にあり、現在のストップロスがそれより低い場合にのみ、BEに移動します。
            {
                double prev_sl = OrderStopLoss(); // 前回のSLを記憶する
                // BE価格をSLフィールドに書き込みます。
                if (!OrderModify(OrderTicket(), OrderOpenPrice(), BE_price, OrderTakeProfit(), OrderExpiration()))
                    Print("OrderModify Buy BE failed ", GetLastError(),  " for ", OrderSymbol());
                else
                    Print(OrderSymbol() + " BUY-order #" + IntegerToString(OrderTicket()) + " ロット数 = " + DoubleToString(OrderLots(), 2) + ", 始値 = " + DoubleToString(OrderOpenPrice(), digits) + ", ストップロスが " + DoubleToString(prev_sl, digits) + " から移動しました。");
            }
        }
        else if (OrderType() == OP_SELL)
        {
            double BE_price = NormalizeDouble(OrderOpenPrice() - extra_be_distance, digits);
            if  ((SymbolInfoDouble(OrderSymbol(), SYMBOL_ASK) <= BE_price) && ((BE_price < OrderStopLoss()) || (OrderStopLoss() == 0))) // 現在の価格が計算されたBE価格より下にあり、現在のストップロスがそれより高い(または0)場合にのみ、BEに移動します。
            {
                double prev_sl = OrderStopLoss(); // 前回のSLを記憶する
                // BE価格をSLフィールドに書き込みます。
                if (!OrderModify(OrderTicket(), OrderOpenPrice(), BE_price, OrderTakeProfit(), OrderExpiration()))
                    Print("OrderModify Buy BE failed ", GetLastError(),  " for ", OrderSymbol());
                else
                    Print(OrderSymbol() + " SELL-order #" + IntegerToString(OrderTicket()) + " ロット数 = " + DoubleToString(OrderLots(), 2) + ", 始値 = " + DoubleToString(OrderOpenPrice(), digits) + ", ストップロスが " + DoubleToString(prev_sl, digits) + " から移動しました。");
            }
        }
    }
    return;
}

プログラム解説

1. ENUM_ORDER_TYPES 列挙型

  • 注文タイプを定義するための列挙型です。ALL_ORDERS(全ての注文)、ONLY_BUY(買い注文のみ)、ONLY_SELL(売り注文のみ)の3つの定数があります。

2. 入力パラメーター

  • input ディレクティブを使用して、スクリプトの動作をカスタマイズするためのパラメーターを定義します。
  • OnlyCurrentSymbol: 現在のチャートのシンボルのみを対象とするかどうかを指定します。
  • OrderTypeFilter: 適用する注文のタイプを指定します。
  • MinimumProfit: ブレークイーブンを適用する最小利益(ポイント)を指定します。
  • AdditionalProfit: ブレークイーブンに追加する利益(ポイント)を指定します。

3. void OnStart()

  • スクリプトのメイン関数です。スクリプトの開始時に実行されます。
  • トレードサーバーへの接続とオートトレードの有効化を確認します。
  • 注文を処理するためのループを開始します。後ろから処理しているのは、ループ中に注文が閉じられる可能性があるためです。
  • 各注文に対して以下の処理を行います:
    • 注文が利益を出しているかどうかをチェックし、利益がない場合はスキップします。
    • フィルターに一致しない注文はスキップします。
    • 指定した最小利益以上の利益がある場合、ブレークイーブンを適用します。
    • 注文の取引が無効な場合はスキップします。
    • 注文のタイプ(買い/売り)に応じて、ブレークイーブンの条件を計算して注文を修正します(ストップロスを調整)。

4. OrderModify() 関数

  • 注文のストップロスをブレークイーブンに移動するために使用されます。

このスクリプトは、指定された条件下で注文にブレークイーブンを適用するためのものです。注文が一定の利益を上げた場合に自動的にストップロスを調整し、利益確定を試みます。ただし、このスクリプトは全体の一部であり、他の関数や設定も含まれている可能性があるため、全体の動作を理解するためには全体のコードを確認する必要があります。

便利なMT4スクリプト集

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

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

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

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

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

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

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

ポジション監視の時間

集中力は続いてますか?


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


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

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

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

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

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

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

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

オートクローズツール

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

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

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