บทนำ
หลาย ๆ คนที่ใช้ 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 ที่ทำงานอยู่ได้พร้อมกัน
ความคิดเห็น 0