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:

…
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
- MQL5 Wizard: Mengoptimalkan Sinyal Perdagangan dengan Morning/Evening Stars dan MFI
- MQL5 Wizard: Ciptakan Expert Advisor Berdasarkan Pola Candlestick dan MFI
- Membuat Expert Advisor MQL5 untuk Sinyal Trading Berdasarkan Dark Cloud Cover dan Piercing Line dengan RSI
- Membuat Expert Advisor dengan MQL5 Wizard: Sinyal Trading Berdasarkan Dark Cloud Cover dan Piercing Line
- Memahami Order Processing Visual untuk MetaTrader 4