สวัสดีครับเพื่อนๆ นักเทรดทุกคน,
วันนี้มีอัปเดตเกี่ยวกับ กลยุทธ์ Breakout ที่เรียบง่ายแต่มีประสิทธิภาพ มาแบ่งปันกันครับ ในโค้ดนี้ผมได้เพิ่มฟังก์ชันช่วยเหลือสำหรับการท้าทาย Prop Firm เข้าไปด้วย
โดยทั่วไปแล้วเพื่อให้ผ่านการท้าทายของ Prop Firm คุณจะต้องทำตามเงื่อนไขหลักสามข้อดังนี้:
- ทำกำไรให้ถึงเป้าหมาย
- ไม่ละเมิดขีดจำกัดการขาดทุนรายวันสูงสุด
- ไม่ละเมิดขีดจำกัดการขาดทุนสูงสุด
ในโค้ดนี้ ผมได้รวมฟังก์ชันสองฟังก์ชันเพื่อตรวจสอบว่า "ทำกำไรถึงเป้าหมาย" และ "เกือบจะละเมิดขีดจำกัดการขาดทุนรายวัน" ซึ่งจะทำการปิดสถานะทั้งหมดและลบคำสั่งที่รอดำเนินการทั้งหมดโดยอัตโนมัติ สำหรับ "ขีดจำกัดการขาดทุนสูงสุด" นั้นจะขึ้นอยู่กับกลยุทธ์และการจัดการความเสี่ยงของคุณ ดังนั้นจึงไม่มีการกล่าวถึงในสคริปต์ MQL5 นี้
//+------------------------------------------------------------------+ //| ฟังก์ชันช่วยเหลือสำหรับ Prop Firm | //+------------------------------------------------------------------+ // ลบคำสั่งที่รอดำเนินการทั้งหมดและปิดสถานะทั้งหมด void ClearAll(string message) { Comment(message); for (int i = OrdersTotal() - 1; i >= 0; i--) { ulong orderTicket = OrderGetTicket(i); if (OrderSelect(orderTicket)) { trade.OrderDelete(orderTicket); } } for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong posTicket = PositionGetTicket(i); trade.PositionClose(posTicket); } } // ตรวจสอบว่าเราได้ทำกำไรถึงเป้าหมายแล้วหรือยัง bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // ตรวจสอบว่าเรากำลังจะละเมิดขีดจำกัดการขาดทุนรายวันหรือไม่ bool isDailyLimit() { MqlDateTime date_time; TimeToStruct(TimeCurrent(), date_time); int current_day = date_time.day, current_month = date_time.mon, current_year = date_time.year; // ยอดเงินปัจจุบัน double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // รับผลกำไรจากการเทรดที่ปิดวันนี้ HistorySelect(0, TimeCurrent()); int orders = HistoryDealsTotal(); double PL = 0.0; for (int i = orders - 1; i >= 0; i--) { ulong ticket=HistoryDealGetTicket(i); if(ticket==0) { Print("HistoryDealGetTicket failed, no trade history"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // รับเวลาของดีล MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // ตรวจสอบเวลา if (deal_time.day == current_day && deal_time.mon == current_month && deal_time.year == current_year) { PL += profit; } else break; } } double starting_balance = current_balance - PL; double current_equity = AccountInfoDouble(ACCOUNT_EQUITY); return current_equity < starting_balance - DAILY_LOSS_LIMIT; }
พารามิเตอร์ที่เราต้องระบุมีดังนี้:
input string dd = "-------------PROP FIRM CHALLENGE-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100; input double DAILY_LOSS_LIMIT = 4500;
หวังว่าทุกคนจะได้ประโยชน์จากสคริปต์นี้นะครับ
โพสต์ที่เกี่ยวข้อง
- Moving Average EA: เครื่องมือทำเงินใน MetaTrader 5
- เครื่องมือสั่งซื้อ 'Hedger' - ผู้ช่วยมืออาชีพสำหรับ MetaTrader 4
- การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI
- แนะนำ MCM Control Panel สำหรับ EA และอินดิเคเตอร์หลายสกุลเงิน
- สร้างสัญญาณการซื้อขายด้วย MQL5 Wizard: การใช้ EMA และกรองเวลาภายใน