最小限の利益の確保

 「トレーリングストップ注文」のページでは、ポジションを保有したら即座にトレーリングストップを発動させるためのプログラミング方法について解説しています。

 つまり、「トレーリングストップ注文」のページで解説しているコードによれば、以下のような動作を行うことになります。

  1. 損切り価格までの幅を「100」pips、トレーリングストップ幅を「50」pipsとした注文を出したとする。
  2. 上記注文が約定すると、その瞬間に、約定値から損切り価格までの幅が「50」pipsとなり、損切り価格までの幅を100pipsとした当初の設定は無効となる

 そこで、このページでは、指定したpips数分の利益が発生して初めて、トレーリングストップを発動させるためのプログラミング方法について解説します。

 以下では、具体例として、

  • 当初の損切り価格までの幅を「100」pips
  • トレーリングストップ幅を「50」pips
  • トレーリングストップを発動させるための利益幅を「50」pips

とした場合を掲げています。

 つまり、以下に掲げる具体例においては、ポジションを保有してから「50」pips分の利益が生じると、「ブレークイーブン」(詳細は「こちら」を参照してください。)が設定されることになり、その後は、価格が保有ポジションにとって有利な方向に進んでいくにつれて、損切り価格がその方向に変動していく、ということになります。

 プログラムの全体像を示すと、以下のようになります。

Download (PDF, 31KB)

  1. 変数の宣言
  2. 関数の定義
  3. init()関数の記述
  4. エントリー処理の記述
  5. トレーリングストップの記述
  6. 関連EA

1.変数の宣言

 変数の詳細については「こちら」を参照してください。

 具体例においては、以下のように変数を宣言しています。

//変数の宣言
extern int Magic = 1111;

extern int Stop_Loss      = 100;
extern int Trailing_Stop  = 50;
extern int Minimum_Profit = 50;

int Ticket = 0;

double Pips = 0;

 各変数の意味は、以下のとおりです。

  • Magic
    マジックナンバー(EAを識別する整数値)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Stop_Loss
    ポジションを保有した際の設定される約定価格から損切り価格までの幅(単位はpips)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Trailing_Stop
    トレーリングストップ幅(単位はpips)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Minimum_Profit
    トレーリングストップを発動させる最小の利益幅(単位はpips)を格納します。
    この変数は、EAをチャートに適用した際に、任意の値に設定することができるようにするため、「extern」(詳細は「こちら」を参照してください。)を付けて宣言します。
  • Pips
    AdjustPoint()関数の戻り値を格納します。

>>目次に戻る

2.関数の定義

 関数の詳細については「こちら」を参照してください。

 コードの詳細な解説については「こちら」を参照してください。

>>目次に戻る

3.init()関数の記述

 init()関数の詳細については「こちら」を参照してください。

 コードの詳細な解説については「こちら」を参照してください。

>>目次に戻る

4.エントリー処理の記述

⑴ 買いエントリーでの損切り価格を設定する

 具体例においては、ポジションを保有した当初は、一定の利益が出るまで、約定価格から100pips離れた位置に損切り価格を設定するようにしています。

 買いポジションにおいては、約定価格はAsk」、決済価格はBid」を基準として計算されるため、ポジション保有当初の損切り価格は、以下のように算出されます。

損切り価格 = 注文約定時のBid - 損切りまでの幅 × pips

 したがって、具体例においては、以下のように記述しています。


if(買いエントリー条件)
   {
    Ticket = 
    OrderSend(…,OP_BUY,…,Ask,…,
              Bid - Stop_Loss * Pips,
              …,…,Magic,…,…);
   }
  • OrderSend()関数の詳細については「こちら」を参照してください。

⑵ 売りエントリーでの損切り価格を設定する

 具体例においては、ポジションを保有した当初は、一定の利益が出るまで、約定価格から100pips離れた位置に損切り価格を設定するようにしています。

 買いポジションにおいては、約定価格はBid」、決済価格はAsk」を基準として計算されるため、ポジション保有当初の損切り価格は、以下のように算出されます。

損切り価格 = 注文約定時のAsk + 損切りまでの幅 × pips

 したがって、具体例においては、以下のように記述しています。


if(売りエントリー条件)
   {
    Ticket = 
    OrderSend(…,OP_SELL,…,Bid,…,
              Ask + Stop_Loss * Pips,
              …,…,Magic,…,…);
   }
  • OrderSend()関数の詳細については「こちら」を参照してください。

>>目次に戻る

5.トレーリングストップの記述

 トレーリングストップを設定するコードの記述については、基本的には「トレーリングストップ注文」のページで解説したものと同様ですが、以下の⑴~⑹の6点において異なります。

⑴ 買いポジションの現在の含み益を算出する

 一定の利益が出てから初めて、トレーリングストップを発動させるためには、現在の買いポジションが、どれだけのpips数の含み益を抱えているのかを確認する必要があります

 保有している買いポジションが、どれだけのpips数の含み益を抱えているかは、以下の計算式により算出されます。

Bid - 約定価格

 そこで、具体例においては、以下のように記述して、保有している買いポジションが抱えている利益となるpips数を、変数Pips_Profitに格納しています。


double Pips_Profit = Bid - OrderOpenPrice();
  • OrderOpenPrice()関数の詳細については「こちら」を参照してください。

⑵ 最小限の利益を格納する

 一定の利益が出てから初めて、トレーリングストップを発動させるためには、トレーリングストップを発動させるための、利益となる最小限のpips数を確認しておく必要があります

 利益となる最小限のpips数は、以下の計算式により算出されます。

トレーリングストップを発動させる最小の利益幅 × pips

 そこで、具体例においては、以下のように記述して、トレーリングストップを発動させる最小の利益幅を、変数Min_Profitに格納しています。


double Min_Profit  = Minimum_Profit * Pips;

⑶ トレーリングストップの条件式に条件を加える

 トレーリングストップを、一定の利益が出てから初めて発動させるためには、トレーリングストップを発動させる条件式に、以下のような条件を加える必要があります。

現在の含み益が最小限の利益以上

 そこで、具体例においては、以下のように、トレーリングストップを発動させる条件式を記述しています。


if(OrderMagicNumber() == Magic && 
   OrderSymbol() == Symbol() && 
   Current_Stop < Max_Stop_Loss && 
   Pips_Profit >= Min_Profit)

⑷ 売りポジションの現在の含み益を算出する

 一定の利益が出てから初めて、トレーリングストップを発動させるためには、現在の売りポジションが、どれだけのpips数の含み益を抱えているのかを確認する必要があります

 保有している売りポジションが、どれだけのpips数の含み益を抱えているかは、以下の計算式により算出されます。

約定価格 - Ask

 そこで、具体例においては、以下のように記述して、保有している売りポジションが抱えている利益となるpips数を、変数Pips_Profitに格納しています。


Pips_Profit = OrderOpenPrice() - Ask;
  • OrderOpenPrice()関数の詳細については「こちら」を参照してください。

⑸ 最小限の利益を格納する

 上記⑵と同様です。

⑹ トレーリングストップの条件式に条件を加える

 上記⑶と同様です。

>>目次に戻る

6.関連EA

新しいトレーリング・ストップ登場!ハサミ打ちで利益を確保!!!
W-Trailing(ダブル・トレーリング)
W-Trailing(ダブル・トレーリング) | fx-on.com

W-Trailing(ダブル・トレーリング)
W-Trailing(ダブル・トレーリング) | fx-on.com

特 徴

  • ユックリしたストップロス機能
    通常のトレーリングストップでは、レートが保有ポジションの利益方向に1pips動いたらストップも1pips切り上がるところ、ストップの切り上がり方を自由に設定できる
    例えば、
    レートが保有ポジションの利益方向に5pips動いたらストップを1pips切り上げる。
    レートが保有ポジションの利益方向に10pips動いたらストップを1pips切り上げる。
    など
  • テイクプロフィットをトレーリングする機能
    一定時間の経過とともに利益確定値を切り下げていく。
    例えば、
    1分経過するごとに利益確定値を1pips切り下げる。
    5分経過するごとに利益確定値を1pips切り下げる。
    など

基本機能

 裁量等で建てたポジションに対してSL/TPを自動操作する。

パラメーター

  • StopLoss,TakeProfit(設定単位はpips)
    EAをチャートに適用した時点で、保有ポジションにSL/TPの設定がない場合に、自動でSL/TPを設定する。
  • StartTrailPips
    トレーリングを開始するPips設定(=レートが始値よりも何pips利益方向に動いたらトレールを開始するかの設定)
  • SLRatio
    レートが「A」pips(例えば3ips)動いたらSLを1pips動かす。
  • TLSeconds
    トレール開始後「B」秒(例えば250秒)経過したらTPを1pips動かす。

 上記EA(W-Trailing(ダブル・トレーリング)W-Trailing(ダブル・トレーリング) | fx-on.com)のより詳しい内容については「こちらW-Trailing(ダブル・トレーリング) | fx-on.com」を参照してください。

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説