การตั้ง Take Profit ตามกำไรปัจจุบัน - เทคนิคสำหรับ MetaTrader 4

Mike 2023.10.27 08:52 28 0 0
ไฟล์แนบ

บทนำ

หลาย ๆ คนที่ใช้ EA มักจะปิดออร์เดอร์เมื่อกำไรถึงระดับที่ตั้งไว้โดยอิงจากระยะห่างในพิปส์จากราคาซื้อ แต่ EA Perceptron มีแนวทางที่แตกต่างออกไป โดยจะปิดออร์เดอร์ตามกำไรปัจจุบัน ซึ่งแนวทางนี้ช่วยให้คุณสามารถจัดการกับการตั้ง Take Profit ได้ง่ายขึ้น แม้จะมีตำแหน่งเปิดอยู่หลายตำแหน่ง โดยสามารถติดตามกำไรปัจจุบันทั้งหมดตามหมายเลข Magic Number ได้ หากคุณใช้บอทหลายตัวหรือ EA ที่แตกต่างกันในเวลาเดียวกัน เพิ่มฉันเป็นเพื่อน และติดตามข่าวสารจากฉันเพื่อไม่พลาดข้อมูลใหม่ ๆ!

การใช้โค้ดนี้ยังช่วยให้คุณหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นจากการตั้ง Take Profit ตามพิปส์ เช่น การเปลี่ยนแปลงที่เกิดจากการ slippage ของโบรกเกอร์ ซึ่งอาจทำให้กำไรของคุณลดลงได้ การใช้โค้ดที่อิงจากกำไรปัจจุบันจะช่วยให้คุณมีการควบคุมที่ดีกว่าในการทำเทรดของคุณ

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่า Take Profit ตามกำไรปัจจุบัน สามารถใช้โค้ดของ EA SwingBot เป็นตัวอย่างได้


จำนวนออร์เดอร์ทั้งหมด

เริ่มต้นด้วยโค้ดที่คำนวณจำนวนออร์เดอร์ที่เปิดอยู่ทั้งหมดที่มีหมายเลข Magic Number เดียวกัน

หมายเลข Magic Number เป็นตัวระบุเฉพาะที่ผู้เทรดหรือ EA (ผู้ช่วยผู้เชี่ยวชาญ) ตั้งให้กับออร์เดอร์

โค้ดนี้จะเริ่มต้นตัวแปร total_orders เป็นศูนย์ จากนั้นจะวนลูปผ่านออร์เดอร์ที่เปิดอยู่ทั้งหมดโดยใช้ลูป for และเลือกแต่ละออร์เดอร์ด้วยฟังก์ชัน OrderSelect() หากเลือกออร์เดอร์ได้สำเร็จ มันจะเพิ่มค่าตัวแปร total_orders ขึ้นทีละหนึ่ง.

//----------------- 
   int total_orders = 0;
   for(int i = 0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderMagicNumber() == MagicNumber)
         {
         total_orders++;
        }
        }
     }


การคำนวณกำไรปัจจุบัน

โค้ดนี้จะเริ่มต้นตัวแปรสองตัวคือ ProfittoMinimo และ Profit โดยตัวแปร ProfittoMinimo ใช้เพื่อเปิดการทำงานของการตั้ง Take Profit ในระดับนี้ ซึ่งค่านี้จะแสดงในสกุลเงินของบัญชี ตัวแปร Profit ใช้เพื่อสะสมกำไรปัจจุบันจากตำแหน่งที่เปิดอยู่ทั้งหมดที่มีหมายเลข Magic Number เดียวกัน และตัวแปร StopLoss ใช้สำหรับการตั้ง Stop Loss.

โค้ดจะใช้ลูป for เพื่อวนผ่านตำแหน่งที่เปิดอยู่ทั้งหมดโดยใช้ฟังก์ชัน OrdersTotal() สำหรับแต่ละตำแหน่งที่เปิดอยู่ จะเลือกออร์เดอร์ที่เกี่ยวข้องด้วยฟังก์ชัน OrderSelect() หากเลือกออร์เดอร์ได้สำเร็จและมีหมายเลข Magic Number เดียวกัน จะนำกำไรของออร์เดอร์นั้นไปบวกกับ Profit.

      double ProfittoMinimo = 3; // กำไรเป้าหมาย
      double Profit = 0; // กำไรปัจจุบัน
      
      for(int i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderMagicNumber() == MagicNumber) // หากใช้หลาย EA สามารถลบเงื่อนไข MagicNumber ได้เพื่อรักษาฟังก์ชันในจำนวนออร์เดอร์ทั้งหมด
              {
               Profit += OrderProfit();
              }
        }
      }


กำไรขั้นต่ำสามารถตั้งค่าเป็นตัวแปรภายนอกและปรับแต่งในตัวเลือก EA ได้:

Minimum Profit


ปิดตำแหน่งเมื่อกำไรถึงระดับที่ตั้งไว้

โค้ดจะใช้ลูป for เพื่อวนผ่านออร์เดอร์ที่เปิดอยู่ทั้งหมดโดยใช้ฟังก์ชัน OrdersTotal() โดยเริ่มจากออร์เดอร์ล่าสุดไปจนถึงออร์เดอร์แรก สำหรับแต่ละออร์เดอร์จะเลือกการเทรดที่เกี่ยวข้องด้วยฟังก์ชัน OrderSelect().

หากการเทรดที่เลือกมีสัญลักษณ์เดียวกับกราฟปัจจุบัน เป็นประเภท OP_BUY และมีหมายเลข Magic Number เดียวกันตามที่ระบุในโค้ด จะตรวจสอบว่ากำไรของการเทรดนั้นมากกว่าหรือเท่ากับ ProfittoMinimo หากใช่ จะปิดการเทรดที่ราคาบิดโดยใช้ฟังก์ชัน OrderClose() และพิมพ์ข้อความแสดงว่าการซื้อได้ถูกปิดแล้ว

ในทำนองเดียวกัน หากการเทรดที่เลือกมีสัญลักษณ์เดียวกับกราฟปัจจุบัน เป็นประเภท OP_SELL และมีหมายเลข Magic Number เดียวกันตามที่ระบุในโค้ด จะตรวจสอบว่ากำไรของการเทรดนั้นมากกว่าหรือเท่ากับ ProfittoMinimo หากใช่ จะปิดการเทรดที่ราคา Ask โดยใช้ฟังก์ชัน OrderClose() และพิมพ์ข้อความแสดงว่าการขายได้ถูกปิดแล้ว

      for(int e = OrdersTotal() - 1; e >= 0; e--)
        {
         if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // ออร์เดอร์จะถูกแก้ไขเฉพาะเมื่อ Magic Number ตรงกับออร์เดอร์ที่กำลังดำเนินการอยู่
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // ราคาบิด
                  Print("Buy order closed", Profit, " - Stoploss minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }

            if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
              {
               if(Profit >= ProfittoMinimo)
                 {
                  OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // ราคาขาย
                  Print("Sell order closed", Profit, " - Stoploss minimum: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
                 }
          }
          }
        }


บทสรุป

โค้ดนี้สามารถเป็นประโยชน์สำหรับกลยุทธ์การปิดตำแหน่งที่อิงจาก Take Profit แต่ยังสามารถรวมกับการตั้ง Trailing Stop ที่อิงจากการเพิ่มขึ้นของกำไรปัจจุบันได้อีกด้วย ระบบนี้ยังมีประโยชน์ในกรณีที่มีผู้ช่วยผู้เชี่ยวชาญหลายตัว หากคุณไม่ต้องการใช้เงื่อนไข if ที่เกี่ยวกับ Magic Number สามารถกำหนดระดับ Take Profit ทั่วไปเพื่อควบคุมตำแหน่งที่เปิดอยู่ทั้งหมดจาก EA ที่ทำงานอยู่ได้พร้อมกัน



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