MetaTraderを使ってFXの完全自動売買をしています。FX業者はBroco。
<< 経済、あなた発を読んで | main | ぜひお読みください、このブログの方針 >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - | pookmark |
[EA Tip 3] トレイリングストップを追加する

 「トレイリングストップ(Trailing Stop)とは?」についてはgoogleで検索してもらうとして…。

EAにトレイリングストップ機能を手作業で追加したいときは、ここはもう深く考えず、先人が作ったものをコピー&ペーストするのが安全です。

一口にトレイリングストップといってもTSDやFFを見るとたくさんのパターンがありますが、ここでは最もポピュラーな手法をご紹介します。私もこれを使うことが多いです(スキャル系EAにはあまり使わないので、最近は本機能を使っていません^^;)。

(1) extern変数に次の2つを用意して、好きな値で初期化する。

extern int TrailingStop=50; // if 0, MoveTrailingStop() will not be called
extern int MagicNumber=123456;


(2) EAファイルの後ろのほうにMoveTrailingStop()関数を追加しておく。もちろん関数名は何でもいいですが、start()関数で呼ぶときに名前を合わせなければなりません。

void MoveTrailingStop()
{
   int cnt,total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
   {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) continue;
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
      {
         if(OrderType()==OP_BUY)
         {
            if(TrailingStop>0) 
            {                
               if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*TrailingStop,Digits))||(OrderStopLoss()==0))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue);
                  return;
               }
            }
         }
         else if(OrderType()==OP_SELL)
         {
            if(TrailingStop>0) 
            {                
               if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*TrailingStop,Digits)))||(OrderStopLoss()==0))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                  return(0);
               }
            }
         }
      }
   }
}

なんか、ここまでやるかというくらいNormalizeDouble()関数を多用していますが、念のためです。また、次の項で示すようにTrailingStop変数がゼロのときは呼ばないようにしていますが、将来コピペしたときうっかりこの関数を常時呼んでしまっても正常に動くよう、TrailingStop変数がプラスかどうか内部で再チェックしています。

(3) start()関数の最初のほうで、次の命令を追加する。タイムフィルターの後ろに置くのが妥当でしょう。

   if(TrailingStop>0)
     MoveTrailingStop();


以上です。

見るとおわかりの通り、extern int TrailingStop=0;とゼロに指定すると、トレイリングストップ機能を呼ばなくなります。

トレイリングストップを本当に使うかどうか、EAを最適化する段階で結構考えますもんね。


 にほんブログ村 為替ブログ FX システムトレード派へ
にほんブログ村

FXランキング
FXランキング

人気ブログランキングへ
人気ブログランキング

| ☆のんき☆ | EA作成Tips | 11:39 | comments(2) | trackbacks(0) | pookmark |
スポンサーサイト
| スポンサードリンク | - | 11:39 | - | - | pookmark |
参考にさせていただきました。ありがとうございます。
| チェキ | 2010/08/26 1:19 AM |
こんにちは
普通、トラリピのEAというと指値でやり、ストップの無いものが多いですよね。
多くの人が、これで実運用していて利益を上げているのですが、
指値ですし、ストップも無いし、私には恐いです。

近頃、 逆指値トラリピEAでストップが入れられるものを着物トレーダーさんからもらいました。
これにトレーリングストップがつけば、もっと利益が上がると思っていましたので早速やってみます。
ありがとうございました。
| とめ | 2010/10/21 6:36 PM |









http://nonki777.jugem.jp/trackback/25
CATEGORIES
CALENDAR
SMTWTFS
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< April 2017 >>
おすすめリンク
PROFILE
SELECTED ENTRIES
ARCHIVES
RECENT COMMENTS
RECENT TRACKBACK
クリックお願いします
カウンター
SPONSORED LINKS
MOBILE
qrcode
RECOMMEND
このページの先頭へ