เพิ่มการเทรดหลังจากทำกำไร - เทคนิคการใช้ Expert Advisor สำหรับ MetaTrader 4

Mike 2021.07.13 18:50 17 0 0
ไฟล์แนบ

วันนี้เรามาพูดถึงสุดยอดของ Expert Advisor ตัวเล็กๆ ที่ช่วยให้เราสามารถนับจำนวนคำสั่งที่เปิดอยู่ได้อย่างมีประสิทธิภาพกันนะครับ

int OrdersCounter()
  {
   int counter=0;
//---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) // ถ้าคำสั่งถูกเปิดโดย EA นี้
           {
//--- ตรวจสอบว่ามีการทำกำไรหรือไม่
   /* สำหรับการซื้อ เท่านั้นเมื่อ StopLoss เท่ากับหรือสูงกว่า Open Price หมายเหตุ การใช้งานนี้ไม่เหมาะสำหรับคำสั่งรอดำเนินการ เพียงเหมาะกับการซื้อและขายเท่านั้น */
            double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
            if(!XBreakeven) // ถ้าการทำกำไรและ trailing stop ยังไม่เกิดขึ้น
              {
               counter++; //นับตำแหน่ง
              }
           }
   return counter;
  }

เราจะนับเฉพาะคำสั่งที่ ไม่มี StopLoss อยู่เหนือหรือเท่ากับราคาที่เปิดสำหรับการซื้อ และต่ำกว่าราคาที่เปิดสำหรับการขาย กล่าวคือ เราจะนับคำสั่งทั้งหมดที่ยังไม่ถึงจุดทำกำไรหรือ trailing stop ยังไม่ได้ปกป้องราคาที่เปิด

 double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
            if(!XBreakeven) // ถ้าการทำกำไรและ trailing stop ยังไม่เกิดขึ้น

จากนั้นเราจะสร้างตัวนับที่คืนค่าที่เราจะใช้เพื่อจำกัดจำนวนคำสั่งสูงสุด ซึ่งในกรณีนี้เราจะตั้งไว้ที่ 1 คำสั่งเท่านั้น

   if(OrdersCounter()<MaximumOrders)

ดังนั้นเมื่อมีการทำกำไรเกิดขึ้น ฟังก์ชันนี้จะไม่รวมมันในการนับ ซึ่งเมื่อเรามีเพียงตำแหน่งเดียวในตัวอย่างนี้ มันจะคืนค่าเป็นศูนย์และเราก็สามารถเปิดคำสั่งขายใหม่ได้ต่อไป

นอกจากนี้ หากเราไม่ได้สร้างฟังก์ชันทำกำไรนี้ ก็จะไม่สามารถทำได้เลย

void BreakEvenFunction()
  {
//---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
           {
// สำหรับการซื้อ ถ้า Bid สูงกว่าราคาที่เปิด + จำนวน pips ที่ทำกำไร ในทางกลับกันสำหรับการขาย
            double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());
            /* สำหรับการซื้อ เท่านั้นเมื่อ StopLoss เท่ากับหรือสูงกว่า Open Price ในทางกลับกันสำหรับการขาย */
            if(xHybrid)
              {
               bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
              }
           }
  }

ลองใช้กันดูนะครับ!

รายการ
ความคิดเห็น 0