特定のドローダウン率に達したら全ての注文をクローズする方法 - MetaTrader 4用のEA

Mike 2016.01.13 19:24 11 0 0
添付ファイル

皆さん、こんにちは!今日は、MetaTrader 4で使えるコードの紹介をします。このコードは、アカウント残高の特定の割合に達した場合に、全ての開いている注文を自動的にクローズする機能を持っています。

使い方は簡単です。まず、クローズしたい注文のマジックナンバーを入力します。全ての注文を制御したい場合は、0を入力してください。そして、ドローダウン率の最大値を設定します。この値に達すると、コードが自動的に注文をクローズします。

このコードを使うには、DD_closeという関数を呼び出すだけです。

このコードに基づいて作成されたEAのヘッダーファイルも添付しています。

// このオプションを使うには、関数を呼び出すだけです : ( DD_close ) 
//+------------------------------------------------------------------+
//|                          グローバルスコープ                            |
//+------------------------------------------------------------------+
bool Close_All_V;
//+------------------------------------------------------------------+
//|                          メイン関数                            |
//+------------------------------------------------------------------+
// DD:               ここでドローダウン率を設定します。100は決して注文をクローズしないことを意味します。
// Magic_Number:     あなたのEAのマジックナンバー。全ての注文を制御したい場合は0を入力します。
void DD_close(int DD,int Magic_Number)
  {
   if(DD(Magic_Number)>=DD)
      Close_All_V=true;
   if(Close_All_V)
      Close_All(Magic_Number);
  }
//+------------------------------------------------------------------+
//|                          クローズチェック                             |
//+------------------------------------------------------------------+
void Check_Close(int Check_Number) // 注文をクローズするか確認
  {
   if(Check_Number<0) Print("OrderClose failed with error: ",ErrorDescription(GetLastError()));
   else Close_All_V=false;
  }
//+------------------------------------------------------------------+
//|                          全てをクローズ                               |
//+------------------------------------------------------------------+
void Close_All(int M_N)
  {
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Loop++;
       if(OrderSymbol()==Symbol())
        if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
          {
           if(OrderType()==OP_BUY)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE));
               if(OrderType()==OP_SELL)
              Check_Close(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE));
              }
      }
  }
//+------------------------------------------------------------------+
//|                          損失を計算                          |
//+------------------------------------------------------------------+
double Loss(int M_N)
  {
   double re=0;
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Loop++;
       if(OrderSymbol()==Symbol())
        if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
           re=re+OrderProfit();
      }
   return re * -1;
  }
//+------------------------------------------------------------------+
//|                  ドローダウン率を計算する                   |
//+------------------------------------------------------------------+
double DD(int M_N)
  {
   return ( 100 / AccountBalance ( ) ) * Loss ( M_N );
  }
//+------------------------------------------------------------------+
リスト
コメント 0