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

Klik pada : Expert Advisor — Create in MetaEditor

Klik : Next

Kli : Next >


Klik : Finish

Ada 5 bahagian
- Pengishtiharan pembolehubah
- OnInit( )
- OnDeInit( )
- Start( ) @ OnTick( )
- Fungsi
Semak SOP untuk Entry :
SOP BUY ENTRY BUY
- Pastikan pair yang anda ingin trade tiada NEWS.
- Buka M15 dan cari pair yang TREND SEMASA JELAS UPTREND mengunakan petunjuk 3EMA.
- Buat conformation TREND SEMASA dengan petunjuk MACD.
- sekiranya jelas/conform UPTREND maka tunggu sehingga stoch 3.1.3 masuk ke dalam kawasan OVERSOLD M15.
- Setelah STOCH 3.1.3 masuk ke dalam OVERSOLD anda sekarang dalam situasi STANBY.
- 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.
- Pada TF M1 sila abaikan 3EMA dan MACD. pada M1 kita hanya guna STOCH 3.1.3 untuk lakukan ENTRY BUY.
- Sekiranyanya STOCH 3.1.3 pada M1 menyentuh lavel 0 maka pada ketika itulah kita LAKUKAN ENTRY.
- Entry BUY!!
Disini kita lihat ada beberapa indicator yang diperlukan iaitu :
- Masa tiada News – ikut pair
- 3 EMA TF M15
- STOCH TF M15 OB/OS 80/20
- STOCH TF M1 100/0
- 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