Laman utama Perdagangan Sistem Siaran

Menggunakan Trailing Stop dengan MagicNumber dalam MetaTrader 4

Lampiran
34177.zip (1.19 KB, Muat turun 0 kali)

Trailing stop sangat membantu dalam trading kita dengan memindahkan stop loss ke kawasan keuntungan, jadi kita sentiasa dapat mengamankan perdagangan secara automatik.

Kita akan mulakan kod dengan menetapkan parameter input 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

Variabel Global

//Variabel Global
double   myPoint    = 0.0;

Apabila kita menjalankan EA ini, fungsi OnInit() akan dilaksanakan untuk kali pertama dan dalam fungsi ini, kita akan mengesahkan serta menginisialisasi variabel input.

int OnInit()
  {
    if (isTrailingStop && trailingStart <= 0){
      Alert ("Parameter tidak betul");
      return(INIT_PARAMETERS_INCORRECT);
   }

   myPoint     = GetPipPoint(Symbol());

   return(INIT_SUCCEEDED);
  }

Setiap kali berlaku pergerakan harga (tick) pada carta di mana EA ini dipasangkan, fungsi OnTick() akan dilaksanakan. Dalam fungsi OnTick() ini, kita akan memanggil fungsi setTrailingStop().

void OnTick()
  {
    //---
     setTrailingStop(MagicNumber);
  }

Fungsi 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(), " gagal update 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(), " gagal update sl");
               }
            }
       }
    } //akhir if magicNumber
   }//akhir for
}

Fungsi standard lain yang diperlukan adalah GetPipPoint()

// Fungsi 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);
}

Jika anda ada sebarang pertanyaan, sila tinggalkan di ruangan komen atau anda juga boleh sertai kumpulan kami untuk berkongsi (dalam bahasa Indonesia) t.me/codeMQL

Kami juga menyediakan Aplikasi SignalForex

Anda boleh sokong kami dengan memuat turun dan terus menggunakan Aplikasi SignalForex untuk menyokong trading anda lebih menguntungkan

https://play.google.com/store/apps/details?id=com.autobotfx.signalforex

Siaran berkaitan

Komen (0)