リスクゼロの損益分岐点でストップ注文するスクリプト|ブレイクイーブン
複数ポジションでの損益分岐点は、計算が大変です。
簡単にリスクゼロのストップ注文ができる方法はありませんか?
FXの不労所得だけで年収2000万を達成しました。
このお悩みに誠意をもって回答します。
この無料EAで不労所得が稼げます
累計テスト120年以上・リアル取引公開2020年~
このページでわかること・できること
〇損益分岐点を計算し、自動でストップ注文する方法
〇スクリプトのダウンロード
〇スクリプトのインストールと使い方
損益分岐点にブレイクイーブンの注文ができるスクリプト|Break even
スクリプト「Break even」を使うと損益分岐点を計算し、自動でストップ注文を入れる。
ポジションがひとつの場合は簡単な作業であるが、複数ポジションの場合に損益分岐点を割り出すには手間がかかる。
このスクリプトを使えば、複数ポジションでも簡単にリスクゼロの位置でストップ注文できる。
ストップ注文には、適用を開始する利益の幅と獲得する利益の量をパラメーターで指定できる。
また、適用する注文は「すべての注文」「買いのみ」「売りのみ」から選択可能。
ブレイクイーブンとは?
「ブレイクイーブン(Break Even)」とは、投資やトレードにおいて損失も利益も出ていない状態、つまり「損益分岐点」を意味する。具体的には、あるポジションを取った後、そのポジションの価格がエントリーポイントと同じ位置に戻ってきた場合、損も得もしていない状態になることを指す。
例えば、株や通貨を買った価格と同じ価格で売った場合、手数料などを考慮しなければ、その取引は「ブレイクイーブン」になる。この概念は、損失を避けるための重要なポイントであり、トレーダーはブレイクイーブンの状態を維持するか、そこから利益を得るための戦略を考えることがよくある。
「Break even」という名前のスクリプトでは、特定の条件下で自動的にストップ注文を設定し、損益分岐点での取引をサポートする。これにより、トレーダーはポジションのリスクを管理しやすくなり、感情的な判断ミスを防ぎながら効率的な取引ができる。
Break evenのダウンロード
損益分岐点にストップ注文ができるスクリプト「Break even」はこちらのリンクからダウンロードできる
ダウンロードするファイルは.ex4で、MT4データフォルダの「Scripts」へ移動してインストールする。「
Break evenのインストール
ダウンロードしたスクリプトはMT4の「scripts」フォルダへ移動し、再起動でインストールが完了する。
MT4から上記の順番でフォルダを開き、スクリプトを移動する。
スクリプトのインストール詳細は以下を参照
Break evenの使い方
MT4へインストールしたスクリプトは、ナビゲーターのスクリプトから呼び出しが可能となる。
スクリプトの起動はダブルクリックやチャートへのドロップで実行できる。
スクリプトを実行するとパラメーター画面が開くので、パラメーターを設定しOKをクリック。
〇現在のチャートシンボルのみ:実行したチャートの通貨ペアのみか、すべての注文に適用させるかを選択。
〇適用する注文:全て、買いのみ、売りのみ、の3点から選択可能。
〇適用開始の利益:全ポジションの合計でどれだけの利益からスクリプトを適用させるかを指定。
〇獲得する利益:確定させる利益の量を指定。
運用開始の利益で設定した値以上に利益がある場合、スクリプトは実行される。
注文取消しスクリプトと併せて使う
SL、TP注文を一括で取消せるスクリプト「DeleteOrders」を使うと、Breakevenで出した注文を一括で取消すことができる。Breakevenで複数ポジションに注文を出した場合、取消すには個々のポジションに対して操作が必要になる。しかし、「DeleteOrders」を使えば一括で取消せる。Breakevenとあわせて使うと便利なツールになっている。
「DeleteOrders」についてはこちらの記事で解説。
スクリプト「ブレイクイーブン」のメリット
リスクゼロの損益分岐点でストップ注文できるスクリプトは「ブレイクイーブン」は、トレーダーにとって便利なツールだ。
複数ポジションに対応し、売りのみ、買いのみの適用もできる。
具体的なメリットを以下にまとめる。
- リスク管理強化: スクリプトは損益分岐点で自動的にストップ注文を行うため、ポジションのリスクを限定できる。
損失が最小限に抑えられるため、トレーダーのリスク管理が簡単に強化される。 - 感情の排除: 感情に左右されずに注文が実行されるため、冷静なトレードが可能となる。
ヒューマンエラーや感情的な判断ミスを未然に回避できる。 - 効率的なエントリー/エグジット: 損益分岐点でのストップ注文は、効率的なエントリーとエグジットを可能にする。
利益を最大化し、損失を最小限に抑えることに役立つ。 - 時間節約: ブレイクイーブンの注文を実行した後は、常にチャートを監視する必要がなくなる。
節約できた時間で他の重要な作業に集中もできる。
これらの要因により、リスクゼロの損益分岐点でストップ注文するスクリプトは、トレードの効率性、リスク管理、感情の排除などをサポートし、トレーダーの取引を強化できる。
Break evenのソースコード
//+------------------------------------------------------------------+
//| 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;
}
double totalLots = 0.0;
double totalPrice = 0.0;
int orders_total = OrdersTotal();
for (int i = 0; i < orders_total; i++)
{
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;
totalLots += OrderLots(); // ロット数の合計
if (OrderType() == OP_BUY)
{
totalPrice += OrderOpenPrice() * OrderLots(); // 買いポジションの価格合計
}
else if (OrderType() == OP_SELL)
{
totalPrice += OrderOpenPrice() * OrderLots(); // 売りポジションの価格合計
}
}
if (totalLots > 0)
{
double averagePrice = totalPrice / totalLots; // 平均エントリープライス
double point = SymbolInfoDouble(Symbol(), SYMBOL_POINT);
double extra_be_distance = AdditionalProfit * point;
int digits = (int)SymbolInfoInteger(Symbol(), SYMBOL_DIGITS);
// 平均価格に基づいたブレイクイーブン価格の計算
double BE_price_buy = NormalizeDouble(averagePrice + extra_be_distance, digits);
double BE_price_sell = NormalizeDouble(averagePrice - extra_be_distance, digits);
for (int i = 0; i < orders_total; i++)
{
if (!OrderSelect(i, SELECT_BY_POS))
{
Print("エラー - 注文が選択できません - ", GetLastError());
continue;
}
if ((OrderTypeFilter == ONLY_SELL) && (OrderType() == OP_BUY)) continue;
if ((OrderTypeFilter == ONLY_BUY) && (OrderType() == OP_SELL)) continue;
if ((OnlyCurrentSymbol) && (OrderSymbol() != Symbol())) continue;
if (OrderType() == OP_BUY)
{
if ((SymbolInfoDouble(OrderSymbol(), SYMBOL_BID) >= BE_price_buy) && (BE_price_buy > OrderStopLoss()))
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), BE_price_buy, OrderTakeProfit(), OrderExpiration()))
Print("OrderModify Buy BE failed ", GetLastError(), " for ", OrderSymbol());
else
Print(OrderSymbol() + " BUY-order #" + IntegerToString(OrderTicket()) + " - Stop Loss moved to BE.");
}
}
else if (OrderType() == OP_SELL)
{
if ((SymbolInfoDouble(OrderSymbol(), SYMBOL_ASK) <= BE_price_sell) && ((BE_price_sell < OrderStopLoss()) || (OrderStopLoss() == 0)))
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), BE_price_sell, OrderTakeProfit(), OrderExpiration()))
Print("OrderModify Sell BE failed ", GetLastError(), " for ", OrderSymbol());
else
Print(OrderSymbol() + " SELL-order #" + IntegerToString(OrderTicket()) + " - Stop Loss moved to BE.");
}
}
}
}
else
{
Print("適用するポジションがありません。");
}
return;
}
ソースコードの解説
1. ENUM_ORDER_TYPES 列挙型
- 注文タイプを定義するための列挙型。ALL_ORDERS(全ての注文)、ONLY_BUY(買い注文のみ)、ONLY_SELL(売り注文のみ)の3つの定数がある。
2. 入力パラメーター
input
ディレクティブを使用して、スクリプトの動作をカスタマイズするためのパラメーターを定義する。OnlyCurrentSymbol
: 現在のチャートのシンボルのみを対象とするかどうかを指定。OrderTypeFilter
: 適用する注文のタイプを指定。MinimumProfit
: ブレークイーブンを適用する最小利益(ポイント)を指定。AdditionalProfit
: ブレークイーブンに追加する利益(ポイント)を指定。
3. void 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チャートの時間足を一括で切替えるツール
まとめ
スクリプト「Break even」は、トレーダーにとって非常に便利なツールである。このスクリプトを使用すると、損益分岐点で自動的にストップ注文を行うことができ、ポジションのリスクを効果的に管理することが可能になる。特に、複数のポジションを持っている場合、それぞれの損益分岐点を手動で計算するのは非常に手間がかかるが、「Break even」を使えば、複数ポジションでも簡単にリスクゼロの位置でストップ注文を設定できる。
また、スクリプトにはさまざまなカスタマイズオプションが用意されており、すべての注文、買いのみ、または売りのみといった適用する注文タイプを選択することができる。さらに、適用開始の利益幅や最低の獲得利益をパラメーターとして指定できるため、トレードスタイルに合わせた柔軟な設定が可能である。
このスクリプトを使用することで、感情に左右されない冷静なトレードが可能になる。自動的にストップ注文が行われるため、ヒューマンエラーや感情的な判断ミスを回避し、効率的なエントリーとエグジットをサポートする。さらに、「Break even」を使うことで常にチャートを監視する必要がなくなり、時間の節約にもつながる。
インストール方法も簡単である。まず、スクリプトのファイルをダウンロードし、MT4のデータフォルダ内の「scripts」フォルダに移動する。その後、MT4を再起動するだけで、スクリプトが利用可能になる。ナビゲーターのスクリプトから簡単に呼び出せ、必要なパラメーターを設定して実行することができる。
「Break even」は、効率的なリスク管理、感情の排除、そしてトレードの効率化を目指すトレーダーにとって、欠かせないツールである。このスクリプトを使うことで、より安定したトレードを実現し、取引の精度とパフォーマンスを向上させることができる。