Dalam dunia trading, kadang-kadang kita perlu mengambil langkah berani untuk melindungi modal kita. Salah satu cara untuk melakukannya adalah dengan menutup semua pesanan apabila drawdown mencapai peratusan tertentu daripada baki akaun. Dengan menggunakan sistem trading ini, anda boleh mengautomasikan proses ini dengan mudah.
Untuk menggunakan sistem ini, anda perlu memasukkan nombor magic bagi pesanan (masukkan 0 untuk mengawal semua pesanan) dan peratusan maksimum drawdown yang membolehkan logik kod ini menutup pesanan setelah mencapai tahap tersebut.
Cukup dengan memanggil fungsi DD_close untuk menggunakan kod ini.
Di bawah ini adalah fail header kod ini berserta EA yang dibina berdasarkan kod ini.
// Untuk menggunakan pilihan ini, anda hanya perlu memanggil fungsi : ( DD_close ) //+------------------------------------------------------------------+ //| Skop Global | //+------------------------------------------------------------------+ bool Close_All_V; //+------------------------------------------------------------------+ //| Fungsi Utama | //+------------------------------------------------------------------+ // DD: Di sini adalah peratusan DD, 100 bermaksud tidak akan menutup sebarang pesanan. // Magic_Number: Nombor magic EA anda, masukkan 0 untuk mengawal semua pesanan. 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); } //+------------------------------------------------------------------+ //| Semak tutup | //+------------------------------------------------------------------+ void Check_Close(int Check_Number) // semak tutup pesanan { if(Check_Number<0) Print("OrderClose failed with 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)); } } } //+------------------------------------------------------------------+ //| Kira 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; } //+------------------------------------------------------------------+ //| Kira peratusan drawdown | //+------------------------------------------------------------------+ double DD(int M_N) { return ( 100 / AccountBalance ( ) ) * Loss ( M_N ); } //+------------------------------------------------------------------+
Komen 0