MetaTrader4
Mengurus Take Profit Berdasarkan Untung Semasa di MetaTrader 4
Pengenalan Banyak EA (Penasihat Pakar) biasanya menutup pesanan berdasarkan jarak dalam pips dari harga belian. Namun, kod yang digunakan oleh EA Perceptron lebih menumpukan kepada keuntungan semasa. Pendekatan ini memudahkan anda untuk mengurus take profit dengan pelbagai posisi terbuka, sambil memantau jumlah keuntungan semasa berdasarkan nombor ajaib, sekiranya anda menggunakan beberapa instance bot atau EA yang berbeza serentak. Jadilah kawan saya dan ikuti perkembangan saya untuk mendapatkan berita terkini! Penggunaan kod ini juga dapat memberikan impak positif terhadap beberapa masalah yang mungkin timbul apabila menggunakan take profit berdasarkan pips. Contohnya, take profit yang berasaskan pips boleh berubah bergantung kepada slippage broker anda, yang boleh menyekat keuntungan. Dengan menggunakan kod yang berasaskan keuntungan semasa, anda dapat mengelakkan isu ini dan mempunyai lebih kawalan terhadap dagangan anda. Jika anda ingin tahu lebih lanjut tentang cara menetapkan take profit berdasarkan keuntungan semasa, anda boleh merujuk kepada kod EA SwingBot sebagai panduan. … Jumlah Pesanan Mari kita mulakan dengan kod yang mengira jumlah pesanan terbuka yang mempunyai nombor ajaib yang sama. Nombor ajaib adalah pengenalan unik yang ditetapkan kepada sesebuah pesanan oleh pedagang atau EA (Penasihat Pakar). Kod ini menginisialisasi satu pemboleh ubah total_orders dengan nilai kosong. Kemudian, ia melakukan gelung melalui semua pesanan terbuka menggunakan gelung for dan memilih setiap pesanan menggunakan fungsi OrderSelect(). Jika pesanan berjaya dipilih, ia akan menambah nilai total_orders sebanyak 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++;
}
}
} … Mengira Keuntungan Semasa Kod ini menginisialisasi dua pemboleh ubah: ProfittoMinimo dan Profit. Pemboleh ubah ProfittoMinimo digunakan untuk mengaktifkan take profit pada tahap ini, nilainya dinyatakan dalam mata wang akaun. Pemboleh ubah Profit digunakan untuk mengumpul keuntungan semasa semua posisi terbuka yang mempunyai nombor ajaib yang sama. Pemboleh ubah StopLoss digunakan untuk had kerugian. Kod ini menggunakan gelung for untuk mengulangi semua posisi terbuka menggunakan fungsi OrdersTotal(). Untuk setiap posisi terbuka, pesanan yang bersesuaian dipilih menggunakan fungsi OrderSelect(). Jika pesanan berjaya dipilih dan mempunyai nombor ajaib yang sama, keuntungan pesanan ditambah kepada pemboleh ubah 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) // Dalam kes EA berganda, anda boleh mengeluarkan penapis MagicNumber untuk mengekalkan fungsi pada jumlah pesanan
{
Profit += OrderProfit();
}
}
} Keuntungan minimum boleh ditetapkan sebagai pemboleh ubah luaran dan dikonfigurasi dalam pilihan EA: … Menutup Posisi Jika Keuntungan Dicapai Kod ini menggunakan gelung for untuk mengulangi semua pesanan terbuka menggunakan fungsi OrdersTotal(). Gelung bermula dari pesanan terakhir dan pergi ke pesanan pertama. Untuk setiap pesanan, perdagangan yang bersesuaian dipilih menggunakan fungsi OrderSelect(). Jika perdagangan yang dipilih mempunyai simbol yang sama dengan carta semasa, adalah dari jenis OP_BUY, dan mempunyai nombor ajaib yang sama seperti yang ditentukan dalam kod, ia memeriksa jika Profit dagangan adalah lebih besar atau sama dengan ProfittoMinimo. Jika ya, ia menutup perdagangan pada harga bida menggunakan fungsi OrderClose() dan mencetak mesej yang menunjukkan bahawa pesanan belian telah ditutup. Begitu juga, jika perdagangan yang dipilih mempunyai simbol yang sama dengan carta semasa, adalah dari jenis OP_SELL, dan mempunyai nombor ajaib yang sama, ia memeriksa jika Profit dagangan adalah lebih besar atau sama dengan ProfittoMinimo. Jika ya, ia menutup perdagangan pada harga tanyaan menggunakan fungsi OrderClose() dan mencetak mesej yang menunjukkan bahawa pesanan 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) // pesanan hanya akan diubah jika MagicNumber sesuai dengan pesanan semasa.
{
if(Profit >= ProfittoMinimo)
{
OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Harga bida
Print("Pesanan belian ditutup", Profit, " - Had kerugian minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
}
}
if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
{
if(Profit >= ProfittoMinimo)
{
OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Harga tanyaan
Print("Pesanan jual ditutup", Profit, " - Had kerugian minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
}
}
} … Kesimpulan Kod ini mungkin berguna untuk semua strategi menutup posisi yang berasaskan take profit, tetapi ia juga boleh digabungkan dengan trailing stop berdasarkan peningkatan keuntungan semasa. Sistem ini juga berguna dalam kes penggunaan beberapa Penasihat Pakar. Jika anda mengecualikan syarat if pada MagicNumber, anda boleh menetapkan tahap take profit umum untuk mengawal semua posisi terbuka dari semua EA aktif.
2023.10.27