การเทรดด้วยระบบ 게시글

การใช้ Trailing Stop พร้อม Magic Number ใน MetaTrader 4

첨부파일
34177.zip (1.19 KB, 다운로드 0회)

การใช้ 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

연관 포스트

댓글 (0)