Cara Nak buat EA M1 Scalper

T & C Rujuk: http://forex.whatta.com.my/?p=2437

1.Buka MQ4

Klik pada : Expert Advisor — Create in MetaEditor

MQL Wizard

Klik : Next

Nama EA: M1 Scalper

Kli : Next >

Klik : Finish

Ruang untuk memasukkan Script

Ada 5 bahagian

  1. Pengishtiharan pembolehubah
  2. OnInit( )
  3. OnDeInit( )
  4. Start( ) @ OnTick( )
  5. Fungsi

Semak SOP untuk Entry :

SOP BUY ENTRY BUY

  1. Pastikan pair yang anda ingin trade tiada NEWS.  
  2. Buka M15 dan cari pair yang TREND SEMASA JELAS UPTREND mengunakan petunjuk 3EMA. 
  3. Buat conformation TREND SEMASA dengan petunjuk MACD.  
  4. sekiranya jelas/conform UPTREND maka tunggu sehingga stoch 3.1.3 masuk ke dalam kawasan OVERSOLD M15.  
  5. Setelah STOCH 3.1.3 masuk ke dalam OVERSOLD anda sekarang dalam situasi STANBY.
  6. Perhatikan dan tunggu STOCH 3.1.3 sentuh level 0 atau jika tidak sentuh 0 akan tetapi STOCH 3.1.3 menunjukkan bentuk sudah mahu membengkok atau mahu berpatah balik SILA TUKAR KE TF M1 SEGERA. 
  7. Pada TF M1 sila abaikan 3EMA dan MACD.  pada M1 kita hanya guna STOCH 3.1.3 untuk lakukan ENTRY BUY.  
  8. Sekiranyanya STOCH 3.1.3 pada M1 menyentuh lavel 0 maka pada ketika itulah kita LAKUKAN ENTRY.  
  9. Entry BUY!!

Disini kita lihat ada beberapa indicator yang diperlukan iaitu :

  1. Masa tiada News – ikut pair
  2. 3 EMA TF M15
  3. STOCH TF M15 OB/OS 80/20
  4. STOCH TF M1 100/0
  5. Entry

Jadi sebelum kita buat script, kita kena buat carta alir untuk M1 Scalper

Signal untuk entry BUY & SELL

//+-----------------------------------------------------------------------+
//  menyemak signal open pos                                              |
//+-----------------------------------------------------------------------+
int signal()
 { 
  double MACD = iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
  double MA50 = iMA(Symbol(),PERIOD_M15,50,0,MODE_EMA,PRICE_CLOSE,0);
  double MA100 = iMA(Symbol(),PERIOD_M15,100,0,MODE_EMA,PRICE_CLOSE,0);
  double MA200 = iMA(Symbol(),PERIOD_M15,200,0,MODE_EMA,PRICE_CLOSE,0);
  double STOC = iStochastic(Symbol(),PERIOD_M15,3,1,3,MODE_EMA,0,MODE_MAIN,0);
  double STOC1 = iStochastic(Symbol(),PERIOD_M1,3,1,3,MODE_EMA,0,MODE_MAIN,0);  
 if(use_buy)  // signal untuk BUY
   { 
     if(MA50>MA100 && MA100>MA200 && Ask>MA50 && MACD>0 && STOC<20 && STOC1==0) return(buy);         
   }   
 if(use_sell)  // signal untuk SELL
   {             
     if(MA50<MA100 && MA100<MA200 && Ask<MA50 && MACD<0 && STOC>100 && STOC1==100) return(sell);
   } 
 return(0);
 }

Signal akan dihantarkan kepada fungsi OrderSend( ) untuk entry BUY/SELL

int  OrderSend(
    string   symbol,              // symbol
    int      cmd,                 // operation
    double   volume,              // volume
    double   price,               // price
    int      slippage,            // slippage
    double   stoploss,            // stop loss
    double   takeprofit,          // take profit
    string   comment=NULL,        // comment
    int      magic=0,             // magic number
    datetime expiration=0,        // pending order expiration
    color    arrow_color=clrNONE  // color
    );
int ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);

Dalam contoh ini;

if(total()==0 && a==0)
   {
//+--- BUY ------------------------------
 if(signal()==buy)
   {
     if(use_tpsl)  ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,Ask-sl*pt,Ask+tp*pt,WindowExpertName(),magic,0,Blue);
     else         ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,0,0,WindowExpertName(),magic,0,Blue);
     }

//+--- SELL ------------------------------  
if(signal()==sell)
  {
    if(use_tp)  ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,Bid+sl*pt,Bid-tp*pt,WindowExpertName(),magic,0,Red);
    else        ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,0,0,WindowExpertName(),magic,0,Red);
     }
   }
    

Masukkan script ini kedalam EA: M1 Scalper.mq4

Buat pengistiharan constant & pembolehubah.

int ticketbuy=0; 
int ticketsell=0;

extern bool      use_buy=true; //false;//
extern bool      use_sell=true; //false;//

extern bool      use_tp=true;
extern double    sl=60;
extern double    tp=10;

double pt;

Sekarang script kelihatan seperti dibawah:

//+------------------------------------------------------------------+
 //|                                                   M1 Scalper.mq4 |
 //|                        Copyright 2019, MetaQuotes Software Corp. |
 //|                                             https://www.mql5.com |
 //+------------------------------------------------------------------+
 property copyright "Copyright 2019, MetaQuotes Software Corp."
 property link      "https://www.mql5.com"
 property version   "1.00"
 property strict
 define buy -2
 define sell 2
 extern int       magic=44645602; // magic number
 extern double    start_lot=0.01; // lot saiz permulaan
 int ticketbuy=0; 
 int ticketsell=0;
 extern bool      use_buy=true; //false;//
 extern bool      use_sell=true; //false;//
 extern bool      use_tpsl=true;
 extern double    sl=60;
 extern double    tp=10;
 double pt;
 //+------------------------------------------------------------------+
 //| Expert initialization function                                   |
 //+------------------------------------------------------------------+
 int OnInit()
   {
 //---
 // Mengubah 4 digit menjadi 5 digit
    if(Digits==3 || Digits==5) pt=10*Point;
    else                          pt=Point;
 //---
    return(INIT_SUCCEEDED);
   }
 //+------------------------------------------------------------------+
 //| Expert deinitialization function                                 |
 //+------------------------------------------------------------------+
 void OnDeinit(const int reason)
   {
 //---
 }
 //+------------------------------------------------------------------+
 //| Expert tick function                                             |
 //+------------------------------------------------------------------+
 int start()
 {      
    if(total()==0)           //Memastikan apabila Jumlah Entry = 0, baru buka entry baru
    {
     if(signal()==buy)          //+--- BUY ------------------------------
      {
           if(use_tpsl) ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,Ask-slpt,Ask+tppt,WindowExpertName(),magic,0,Blue);
           else         ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,0,0,WindowExpertName(),magic,0,Blue);
      }
    if(signal()==sell)        //+--- SELL ------------------------------  
      {
           if(use_tpsl) ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,Bid-slpt,Bid-tppt,WindowExpertName(),magic,0,Red);
           else         ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,0,0,WindowExpertName(),magic,0,Red);
      }
    }
   return(0);
 }
 //+----------------------------------------------------------------------------------------+
 //  menyemak signal open pos entry BUY/SELL                                                |
 //+----------------------------------------------------------------------------------------+
 int signal()
 { 
 double MACD = iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   double MA50 = iMA(Symbol(),PERIOD_M15,50,0,MODE_EMA,PRICE_CLOSE,0);
   double MA100 = iMA(Symbol(),PERIOD_M15,100,0,MODE_EMA,PRICE_CLOSE,0);
   double MA200 = iMA(Symbol(),PERIOD_M15,200,0,MODE_EMA,PRICE_CLOSE,0);
   double STOC = iStochastic(Symbol(),PERIOD_M15,3,1,3,MODE_EMA,0,MODE_MAIN,0);
   double STOC1 = iStochastic(Symbol(),PERIOD_M1,3,1,3,MODE_EMA,0,MODE_MAIN,0);  
 if(use_buy)
          { 
             if(MA50>MA100 && MA100>MA200 && Ask>MA50 && MACD>0 && STOC<20 && STOC1==0) return(buy);          
}   
if(use_sell)          
{             
if(MA50<MA100 && MA100<MA200 && Bid<MA50 && MACD<0 && STOC>80 && STOC1==100) return(sell);
          } 
   return(0);
 }
 //+----------------------------------------------------------------------+
 //  Mengira jumlah trade yang dibuka                                     
 //+----------------------------------------------------------------------+
 int total()
 {
   int total=0;
   for(int i=0; i<OrdersTotal(); i++)
   {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       total++;
   }
   return(total);
 }
 //+----------------------------------------------------------------------+

Masukkan beberapa skrip lain yang perlu, hasilnya seperti dibawah

//+------------------------------------------------------------------+
 //|                                               M1 Scalper 1.0.mq4 |
 //|                                        wan md hatta @ julai 2018 |
 //|                                               whatta58@gmail.com |
 //+------------------------------------------------------------------+
 
 property copyright "wanmdhatta"
 property link      "whatta58@gmail.com"
 define buy -2
 define sell 2
 //---- input parameters
 extern bool      use_profit_target=true;
 extern double    deposit_acc=100; //
 extern double    profit_target=100;
 //=============================================
 extern bool      use_buy=true; //false;//
 extern bool      use_sell=true; //false;//
 extern int       magic=44645610; // AUD/446 CAD/994 CHF/250 EUR/938 GBP/325 GOLD/204 JPY272  NZD/899  USD/456
 extern double    start_lot=0.1;
 extern double    range=5;
 extern int       level=15;
 double    min_profit=start_lotrange10;
 double    tp_in_money=20;
 extern bool      level_mode=true;
 extern bool      use_tp=true;
 double    sl=60;
 extern double    tp=10;
 extern bool      use_money_management=false;
 extern double    use_percent_lost=50;// % lost
 extern bool      use_cutloss_macd=true; //false; //
 double pt;
 double minlot;
 double stoplevel;
 int prec=0;
 int ticketbuy=0; 
 int ticketsell=0;
 int check;
 //+------------------------------------------------------------------+
 //| expert initialization function                                   |
 //+------------------------------------------------------------------+
 int init()
   {
 //----
    if(Digits==3 || Digits==5) pt=10*Point;
    else                          pt=Point;
    minlot   =   MarketInfo(Symbol(),MODE_MINLOT);
    stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
    if(start_lot<minlot)      Print("lotsize is to small.");
    if(sl<stoplevel)   Print("stoploss is to tight.");
    if(tp<stoplevel) Print("takeprofit is to tight.");
    if(minlot==0.01) prec=2;
    if(minlot==0.1)  prec=1;
 //----
    return(0);
   }
 //+------------------------------------------------------------------+
 //| expert deinitialization function                                 |
 //+------------------------------------------------------------------+
 int deinit()
   {
 //----
 //----
    return(0);
   }
 //+------------------------------------------------------------------+
 //| expert start function                                            |
 //+------------------------------------------------------------------+
 int start()
 {
 if(use_profit_target && (AccountProfit()+ AccountBalance())>=(deposit_acc + profit_target))
    {
      Comment("\n  profit target achieved.");
  closeall();  closeall();  closeall();  return(0);
 }
 //Comment
 Comment("\n \n---------------------------------------", 
            "\n Spread=", MarketInfo(Symbol(),MODE_SPREAD),
            "\n AccountNumber: ", AccountNumber(),          
            "\n AccountBalance: ", AccountBalance(),
            "\n PairProfit: ", profit(),
            "\n Orders Total : ", total(), 
            "\n Orders History Total : ", historytotal(), 
        "\n \n---------------------------------------",        
"\n MagicNumber : ",magic,        
"\n Order Lots  : ",OrderLots(),        
"\n Trend  "        
"\n MA = ",iMA(Symbol(),PERIOD_M15,50,3,MODE_SMA,PRICE_CLOSE,0),         "\n STOC15 = ",iStochastic(Symbol(),PERIOD_M15,3,1,3,MODE_EMA,0,MODE_MAIN,0),        
"\n STOC1 = ",iStochastic(Symbol(),PERIOD_M1,3,1,3,MODE_EMA,0,MODE_MAIN,0),         "\n \n---------------------------------------");
 //+---------------------------------------------------------------------+    
 if(total()==0)
    {
 //+--- BUY ------------------------------
  if(signal()==buy)  
{       
if(use_tp)   ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,0,Ask+tp*pt,WindowExpertName(),magic,0,Blue);       
else         ticketbuy=OrderSend(Symbol(),0,start_lot,Ask,3,0,0,WindowExpertName(),magic,0,Blue);  
}
 //+--- SELL ------------------------------  
  if(signal()==sell)  
{       
if(use_tp)  ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,0,Bid-tp*pt,WindowExpertName(),magic,0,Red);       
else        ticketsell=OrderSend(Symbol(),1,start_lot,Bid,3,0,0,WindowExpertName(),magic,0,Red);  
}
 }
 //+----------------------------------------------------------------------+
 // Menggunakan jika terbalik arah       
 //+----------------------------------------------------------------------+  
 if(level_mode && total()>0 && total()<level)       
{           
if(use_tp)    ticketbuy=OrderSend(Symbol(),0,lastlot,Ask,3,0,Ask+tppt,WindowExpertName(),magic,0,Blue);          
else          ticketbuy=OrderSend(Symbol(),0,lastlot,Ask,3,0,0,WindowExpertName(),magic,0,Blue);                            
}    
if(type==1 && Bid>=op+range*pt)       
{         
if(use_tp)     ticketsell=OrderSend(Symbol(),1,lastlot,Bid,3,0,Bid-tppt,WindowExpertName(),magic,0,Red);
         else           ticketsell=OrderSend(Symbol(),1,lastlot,Bid,3,0,0,WindowExpertName(),magic,0,Red);
      } 
    }
 //+------------------------------------------------------------------+
 //| Cutloss guna STOC                                                  | 
 //+------------------------------------------------------------------+
 if(use_cutloss_macd && profit()>0)//
    {  
 double MACDm = iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double MACDs = iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
 if (OrderType()==OP_BUY && MACDs>MACDm ) 
       {
          closeall();
          closeall();
          closeall();
       }
    if (OrderType()==OP_SELL  && MACDs<MACDm )
       {
          closeall();
          closeall();
          closeall();
       }
    }    
 //+------------------------------------------------------------------+
 //| expert take profit                                              |
 //+------------------------------------------------------------------+
    if(profit()>=tp_in_money || a>0) 
    {
       closeall();
       closeall();
       closeall();
       a++;
       if(total()==0) a=0;
    }
 //+------------------------------------------------------------------+
 //| Money Managment                                                  |
 //| expert  close all selepas D1                                     |
 //+------------------------------------------------------------------+
 if(use_money_management && total()>=5) //5
    {
       double equity = AccountEquity();
       double balance = AccountBalance();
 if (equity < (100-use_percent_lost)/100*(balance))
       {
          closeall();
          closeall();
          closeall();
       }
    }
 return(0);
 }
 //+----------------------------------------------------------------------------------------+
 //  Mengira jumlah profit                                                       |
 //+----------------------------------------------------------------------------------------+
 double profit()
 {
    double profit=0; 
    for(int i=0; i<OrdersTotal(); i++)
    {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       profit+=OrderProfit();
    }
    return(profit);
 }
 //+----------------------------------------------------------------------------------------+
 //  Mengira jumlah trade yang dibuka                                                       |
 //+----------------------------------------------------------------------------------------+
 int total()
 {
   int total=0;
   for(int i=0; i<OrdersTotal(); i++)
   {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       total++;
   }
   return(total);
 }
 //+----------------------------------------------------------------------------------------+
 //  Mengira jumlah trade yang dah tutup                                                       |
 //+----------------------------------------------------------------------------------------+
 int historytotal()
 {
   int histotal=0;
   for(int i=0; i<OrdersHistoryTotal(); i++)
   {
       OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       histotal++;
   }
   return(histotal);
 }
 //+----------------------------------------------------------------------------------------+
 //  menyemak signal open pos                                                               |
 //+----------------------------------------------------------------------------------------+
 int signal()
 { 
 double MACD = iMACD(Symbol(),PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   double MA50 = iMA(Symbol(),PERIOD_M15,50,0,MODE_EMA,PRICE_CLOSE,0);
   double MA100 = iMA(Symbol(),PERIOD_M15,100,0,MODE_EMA,PRICE_CLOSE,0);
   double MA200 = iMA(Symbol(),PERIOD_M15,200,0,MODE_EMA,PRICE_CLOSE,0);
   double STOC = iStochastic(Symbol(),PERIOD_M15,3,1,3,MODE_EMA,0,MODE_MAIN,0);
   double STOC1 = iStochastic(Symbol(),PERIOD_M1,3,1,3,MODE_EMA,0,MODE_MAIN,0);  
   double stoc30s = iStochastic(Symbol(),PERIOD_M15,30,3,3,MODE_SMA,1,MODE_SIGNAL,0);
   double stoc30m = iStochastic(Symbol(),PERIOD_M15,30,3,3,MODE_SMA,1,MODE_MAIN,0);
 if(use_buy)
          { 
             if(MA50>MA100 && MA100>MA200 && Ask>MA50 && MACD>0 && STOC<20 && stoc30m>stoc30s && STOC1==0) return(buy);
          }
   if(use_sell)
          {
             if(MA5080 && stoc30m<stoc30s && STOC1==100) return(sell);
          } 
 return(0);
 }
 //+------------------------------------------------------------------+
 //| expert close position                                            |
 //+------------------------------------------------------------------+
 void closeall()
 {
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
       OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       if(OrderType()>1) OrderDelete(OrderTicket());
       else
       {
         if(OrderType()==0) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
         else               OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
       }
   }
 }
 //=================================================================

Kalau tak faham boleh wasapp

Leave a Reply

Your email address will not be published. Required fields are marked *