ในโพสต์นี้เราจะมาแนะนำวิธีการปิดคำสั่งทั้งหมดใน MetaTrader 4 เมื่อการขาดทุนถึงเปอร์เซ็นต์ที่กำหนด ซึ่งจะช่วยให้คุณจัดการความเสี่ยงได้ดีขึ้น
เพียงแค่กรอกหมายเลขมิติของคำสั่ง (หากต้องการควบคุมคำสั่งทั้งหมดให้ใส่ 0) และกำหนดเปอร์เซ็นต์สูงสุดของการขาดทุนที่คุณยอมรับได้ เพื่อให้โค้ดทำการปิดคำสั่งเมื่อถึงระดับนั้น
คุณสามารถเรียกใช้ฟังก์ชัน DD_close เพื่อใช้งานโค้ดนี้ได้เลย
ไฟล์หัวเรื่องที่แนบมานี้คือโค้ดของ EA ที่สร้างจากโค้ดนี้
// เพื่อใช้ตัวเลือกนี้คุณเพียงแค่ต้องเรียกใช้ฟังก์ชัน : ( DD_close ) //+------------------------------------------------------------------+ //| ขอบเขตทั่วไป | //+------------------------------------------------------------------+ bool Close_All_V; //+------------------------------------------------------------------+ //| ฟังก์ชันหลัก | //+------------------------------------------------------------------+ // DD: เปอร์เซ็นต์การขาดทุน ที่ 100 หมายถึงไม่ปิดคำสั่งใดๆ // Magic_Number: หมายเลข EA ของคุณ ใส่ 0 เพื่อควบคุมคำสั่งทั้งหมด 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); } //+------------------------------------------------------------------+ //| ตรวจสอบการปิด | //+------------------------------------------------------------------+ void Check_Close(int Check_Number) // ตรวจสอบการปิดคำสั่ง { if(Check_Number<0) Print("OrderClose failed with error: ",ErrorDescription(GetLastError())); else Close_All_V=false; } //+------------------------------------------------------------------+ //| ปิดทั้งหมด | //+------------------------------------------------------------------+ 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)); } } } //+------------------------------------------------------------------+ //| คำนวณการขาดทุน | //+------------------------------------------------------------------+ 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; } //+------------------------------------------------------------------+ //| คำนวณเปอร์เซ็นต์การขาดทุน | //+------------------------------------------------------------------+ double DD(int M_N) { return ( 100 / AccountBalance ( ) ) * Loss ( M_N ); } //+------------------------------------------------------------------+
ความคิดเห็น 0