Tutup Semua Order Saat Drawdown Mencapai Persentase Tertentu dengan EA di MetaTrader 4

Mike 2016.01.13 19:24 20 0 0
Lampiran

Halo, teman-teman trader! Kali ini kita akan membahas sebuah kode yang sangat berguna untuk mengelola risiko dalam trading. Kode ini memiliki fungsi untuk menutup semua order yang terbuka saat drawdown mencapai persentase tertentu dari saldo akun kita.

Yang perlu kalian lakukan hanyalah memasukkan nomor magic dari order yang ingin dikontrol (masukkan 0 untuk mengontrol semua order), dan tentukan persentase maksimum drawdown yang akan membuat kode ini menutup order saat mencapai batas tersebut.

Untuk menggunakan kode ini, cukup panggil fungsi DD_close.

Di bawah ini adalah file header dari kode ini beserta EA yang dibangun berdasarkan kode tersebut.

// Untuk menggunakan opsi ini, Anda hanya perlu memanggil fungsi: ( DD_close ) 
//+------------------------------------------------------------------+
//|                          Global scope                             |
//+------------------------------------------------------------------+
bool Close_All_V;
//+------------------------------------------------------------------+
//|                         Fungsi utama                            |
//+------------------------------------------------------------------+
// DD:               Persentase DD, 100 berarti tidak pernah menutup order apapun.
// Magic_Number:     Nomor magic EA Anda, masukkan 0 untuk mengontrol semua order.
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);
  }
//+------------------------------------------------------------------+
//|                          Periksa tutup                             |
//+------------------------------------------------------------------+
void Check_Close(int Check_Number) // cek tutup order
  {
   if(Check_Number<0) Print("OrderClose gagal dengan error: ",ErrorDescription(GetLastError()));
   else Close_All_V=false;
  }
//+------------------------------------------------------------------+
//|                          Tutup semua                               |
//+------------------------------------------------------------------+
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));
              }
        }
  }
//+------------------------------------------------------------------+
//|                          Hitung kerugian                          |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//|                  Hitung persentase drawdown                    |
//+------------------------------------------------------------------+
double DD(int M_N)
  {
   return ( 100 / AccountBalance ( ) ) * Loss ( M_N );
  }
//+------------------------------------------------------------------+
Daftar
Komentar 0