MetaTrader4
การตั้ง Take Profit ตามกำไรปัจจุบัน - เทคนิคสำหรับ MetaTrader 4
บทนำหลาย ๆ คนที่ใช้ 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 ได้:…ปิดตำแหน่งเมื่อกำไรถึงระดับที่ตั้งไว้โค้ดจะใช้ลูป 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 ที่ทำงานอยู่ได้พร้อมกัน
2023.10.27