หน้าแรก การเทรดด้วยระบบ โพสต์

กลยุทธ์ Breakout กับฟังก์ชันช่วยเหลือสำหรับ Prop Firm

ไฟล์แนบ
49713.zip (3.14 KB, ดาวน์โหลด 0 ครั้ง)

สวัสดีครับเพื่อนๆ นักเทรดทุกคน,

วันนี้มีอัปเดตเกี่ยวกับ กลยุทธ์ 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;

หวังว่าทุกคนจะได้ประโยชน์จากสคริปต์นี้นะครับ


โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)