Beranda Perdagangan Sistem Postingan

Optimalkan Take Profit Berdasarkan Profit Saat Ini di MetaTrader 4

Lampiran
47010.zip (1.03 KB, Unduh 0 kali)

Pendahuluan

Banyak robot trading (Expert Advisor) biasanya menutup order saat mencapai take profit berdasarkan jarak dalam pips dari harga beli. Namun, kode yang digunakan oleh EA Perceptron lebih mengedepankan profit saat ini. Pendekatan ini memungkinkan kita untuk lebih mudah mengelola take profit dengan banyak posisi terbuka, serta memantau total profit saat ini berdasarkan magic number, terutama jika kamu menggunakan beberapa instance bot atau EA yang berbeda secara bersamaan. Tambah saya sebagai teman dan ikuti feed saya untuk tetap mendapatkan informasi terbaru!

Penggunaan kode ini juga dapat membantu mengatasi beberapa masalah yang muncul saat menggunakan take profit berbasis pips. Misalnya, take profit berbasis pips dapat berubah tergantung pada slippage dari broker, yang bisa membatasi profit. Dengan menggunakan kode berbasis profit saat ini, kamu bisa menghindari masalah ini dan memiliki kontrol lebih terhadap tradingmu.

Jika kamu ingin belajar lebih lanjut tentang cara mengatur take profit berdasarkan profit saat ini, kamu bisa menggunakan kode dari EA SwingBot sebagai referensi.


Total Order

Mari kita mulai dengan kode yang menghitung total jumlah order terbuka dengan magic number yang sama.

Magic number adalah pengenal unik yang diberikan kepada suatu order oleh trader atau EA (Expert Advisor).

Kode ini menginisialisasi variabel total_orders menjadi nol. Kemudian, kode ini akan melakukan iterasi melalui semua order terbuka menggunakan loop for dan memilih setiap order menggunakan fungsi OrderSelect(). Jika order berhasil dipilih, variabel total_orders akan bertambah satu.

//----------------- 
   int total_orders = 0;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == MagicNumber)
         {
         total_orders++;
        }
        }
     }


Menghitung Profit Saat Ini

Kode ini menginisialisasi dua variabel: ProfittoMinimo dan Profit. Variabel ProfittoMinimo digunakan untuk mengaktifkan take profit pada level ini, dan nilainya dinyatakan dalam mata uang akun. Variabel Profit digunakan untuk mengakumulasi profit saat ini dari semua posisi terbuka yang memiliki magic number yang sama. Variabel StopLoss digunakan untuk stop loss.

Kode ini menggunakan loop for untuk melakukan iterasi melalui semua posisi terbuka menggunakan fungsi OrdersTotal(). Untuk setiap posisi terbuka, order yang bersangkutan dipilih menggunakan fungsi OrderSelect(). Jika order berhasil dipilih dan memiliki magic number yang sama, profit dari order tersebut akan ditambahkan ke variabel Profit.

      double ProfittoMinimo = 3; // target profit
      double Profit = 0; // current profit
      
      for(int i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderMagicNumber() == MagicNumber) // Jika menggunakan beberapa EA, kamu bisa menghapus filter MagicNumber untuk menghitung total order
              {
               Profit += OrderProfit();
              }
        }
      }


Profit minimum dapat diatur sebagai variabel eksternal dan dikonfigurasikan dalam opsi EA:

Minimum Profit


Menutup Posisi Jika Profit Tercapai

Kode ini menggunakan loop for untuk iterasi melalui semua order terbuka menggunakan fungsi OrdersTotal(). Loop dimulai dari order terakhir hingga order pertama. Untuk setiap order, trade yang bersangkutan dipilih menggunakan fungsi OrderSelect().

Jika trade yang dipilih memiliki simbol yang sama dengan grafik saat ini, bertipe OP_BUY, dan memiliki magic number yang sama seperti yang ditentukan dalam kode, maka akan diperiksa apakah Profit dari trade tersebut lebih besar atau sama dengan ProfittoMinimo. Jika ya, trade akan ditutup pada harga bid menggunakan fungsi OrderClose() dan mencetak pesan yang menunjukkan bahwa order beli telah ditutup.

Begitu juga, jika trade yang dipilih memiliki simbol yang sama dengan grafik saat ini, bertipe OP_SELL, dan memiliki magic number yang sama seperti yang ditentukan dalam kode, maka akan diperiksa apakah Profit dari trade tersebut lebih besar atau sama dengan ProfittoMinimo. Jika ya, trade akan ditutup pada harga ask menggunakan fungsi OrderClose() dan mencetak pesan yang menunjukkan bahwa order jual telah ditutup.

      for(int e = OrdersTotal() - 1; e >= 0; e--)
        {
         if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // order hanya akan dimodifikasi jika MagicNumber sesuai dengan order yang sedang berlangsung.
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // harga Bid
                  Print("Order beli ditutup", Profit, " - Stoploss minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
              }

            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // harga Ask
                  Print("Order jual ditutup", Profit, " - Stoploss minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
              }
          }
        }


Kesimpulan

Kode ini bisa sangat berguna untuk semua strategi penutupan posisi yang berbasis take profit, dan juga bisa dikombinasikan dengan trailing stop berdasarkan peningkatan profit saat ini. Sistem ini juga bermanfaat jika kamu menggunakan beberapa Expert Advisor. Jika kamu menghapus kondisi if pada MagicNumber, kamu bisa menetapkan level take profit umum untuk mengontrol semua posisi terbuka dari semua EA yang aktif secara bersamaan.



    Postingan terkait

    Komentar (0)