การใช้ Trailing Stop นั้นช่วยสนับสนุนการเทรดของเราได้อย่างมาก โดยการปรับระดับ Stop Loss ให้เข้าใกล้กำไร เพื่อให้เรามั่นใจว่าการเทรดของเราจะปลอดภัยมากขึ้นเสมอ
วันนี้เราจะมาดูวิธีการเขียนโค้ด Trailing Stop โดยเริ่มจากการกำหนดพารามิเตอร์สำหรับ Trailing Stop กันก่อน
input bool isTrailingStop = true; // Trailing Stop input int trailingStart = 15; // Trailing Start (pips) input int trailingStep = 5; // Trailing Step (pips) input int MagicNumber = 0; // Magic Number
เรามีกระบวนการทำงานที่สำคัญคือการใช้ Global Variable
// Global Variable double myPoint = 0.0;
เมื่อเราทำการรัน Expert Advisor (EA) ตัวนี้ ฟังก์ชัน OnInit() จะถูกเรียกใช้เป็นครั้งแรกในฟังก์ชันนี้เราจะทำการตรวจสอบและกำหนดค่าเริ่มต้นของพารามิเตอร์ต่างๆ
int OnInit() { if (isTrailingStop && trailingStart <= 0){ Alert("พารามิเตอร์ไม่ถูกต้อง"); return(INIT_PARAMETERS_INCORRECT); } myPoint = GetPipPoint(Symbol()); return(INIT_SUCCEEDED); }
ในทุกครั้งที่มีการเคลื่อนไหวของราคา (Tick) บนชาร์ตที่ EA นี้เชื่อมโยงอยู่ ฟังก์ชัน OnTick() จะถูกเรียกใช้ โดยในฟังก์ชันนี้จะเรียกใช้ฟังก์ชัน setTrailingStop()
void OnTick() { //--- setTrailingStop(MagicNumber); }
ฟังก์ชัน setTrailingStop()
void setTrailingStop(int magicNumber=0){ if (isTrailingStop==false) return; int tOrder = 0; string pair = ""; double sl = 0.0, tp = 0.0; pair = Symbol(); tOrder = OrdersTotal(); for (int i=tOrder-1; i>=0; i--){ bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){ if (OrderType() == OP_BUY){ if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice() && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() ) ){ sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits()); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print("#", OrderTicket(), " ไม่สามารถอัปเดต SL ได้"); } } } if (OrderType() == OP_SELL){ if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice() && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0) ) { sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() ); if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){ Print("#", OrderTicket(), " ไม่สามารถอัปเดต SL ได้"); } } } } // สิ้นสุดเงื่อนไข magicNumber }// สิ้นสุดลูป for }
ฟังก์ชันมาตรฐานอื่นๆ ที่จำเป็นคือ GetPipPoint()
// ฟังก์ชัน GetPipPoint double GetPipPoint(string pair) { double point= 0.0; int digits = (int) MarketInfo(pair, MODE_DIGITS); if(digits == 2 || digits== 3) point= 0.01; else if(digits== 4 || digits== 5) point= 0.0001; return(point); }
หากท่านมีคำถาม สามารถแสดงความคิดเห็นไว้ด้านล่าง หรือสามารถเข้าร่วมกลุ่มเพื่อแชร์ความรู้ t.me/codeMQL
นอกจากนี้เรายังมีแอปพลิเคชัน SignalForex ที่สามารถช่วยให้การเทรดของคุณทำกำไรได้มากขึ้น
คุณสามารถสนับสนุนเราได้โดยการดาวน์โหลดและใช้งานแอป SignalForex ได้ที่ Google Play Store