goo blog サービス終了のお知らせ 

トレード備忘録 & MT4/MT5インディケータ及びEAの開発

日々のトレード備忘録及びMT4/MT5に関する事項

EAにトレイリングストップを追加したい

2021-11-14 15:33:47 | 投資

 しばしば、「Trailing Stop(以下TS)を自作のEAに追加する方法が知りたい」というご質問を受けることがあります。筆者は、MT Studio21の一員でもありますので、同機能を付加する際にはMT5への対応を考えなくてはなりません。そのために、結構複雑な関数を用意しているのですが、ここではMT4 EAのための関数を記してみたいと思います。MT4には、便利な関数群が用意されていますが、TSに関する関数は存在しません。MT4画面から手動により個別に設定できるため、特に必要と判断されていないのかもしれません。

まず、パラメータに「TS機能を利用するか否か」の選択をするフラッグを用意します。この例では、input bool UseTrailingStop = false; としています。デフォルトの設定は、原則TS機能は使わないことになっています。もし利用したい場合は、falseをtrueとすればTS機能利用することを選択することになります。

 下記の例は、ライブラリーを利用しない一般的なコーディング例です。EA作成時には、そのまま使えると思います。この例では、関数SetTrailingStop( )はOnTick()終了の後で定義されていますが、外部パラメータの上や下で定義されても結構です。EAのフォーマットの最後に記載し、メモ化しておくと、実際に利用する際にはメモを外すだけで使うことができます。

// 外部パラメータ

sinput int Magic = 123;

input bool UseTrailingStop = false;

input double TSPips = 15;

 

//

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//---

       if(UseTrailingStop == true) SetTrailingStop(TSPips, Magic);

  

  }

//+------------------------------------------------------------------+

 

void SetTrailingStop(double tspips, int magic)

{

  if(_Digits == 3 || _Digits == 5) tspips *= 10;

 

  for(int i=0; i<OrdersTotal(); i++)

  {

     if(OrderSelect(i, SELECT_BY_POS) == false) break;

     if(OrderSymbol() != _Symbol || OrderMagicNumber() != magic) continue;

    

     if(OrderType() == OP_BUY)

     {

        double newsl = Bid - tspips*Point;

        if(newsl >= OrderOpenPrice() && newsl > OrderStopLoss()){

        int ticket = OrderModify(OrderTicket(), 0, newsl, 0, magic);}

       

        break;

     }

    

     if(OrderType() == OP_SELL)

     {

        double newsl = Ask + tspips*Point;

        if(newsl <= OrderOpenPrice() && (newsl < OrderStopLoss() || OrderStopLoss() == 0)){

        int ticket = OrderModify(OrderTicket(), 0, newsl, 0, magic);}

       

        break;

     }

  }

}

       

 



最新の画像もっと見る

コメントを投稿