com
Bagian 1 - Pengenalan
Pengenalan MQL 4
MQL4 adalah bahasa pemrograman yang terdapat pada platform MetaTrader 4. MQL4 ini
paling umum digunakan untuk membuat Expert Advisor (EA), Custom Indicator, dan
Script.
Expert Advisor / EA, seperti yang sudah kita ketahui, adalah program untuk
mengotomasi trading anda berdasarkan logika2 dan paramater2 tertentu.
Custom Indicator, hampir sama seperti EA, cuma tidak bisa melakukan trading. Dan
dapat menggunakan function2 indicator.
Script, sama seperti EA, hanya saja dilakukan hanya 1x saat script dijalankan.
Untuk membuat program/script dengan MQL 4, caranya cukup mudah, cukup jalankan
saja MetaEditor.
MQL4 ini struktur dan syntax nya mirip C/C++. Jadi kalau udah kebiasa dengan C/C++,
harusnya ga akan mengalami kesulitan membuat program dengan MQL4. Kesulitannya
mungkin saat debugging..
Lebih lanjutnya, MQL4 dapat melakukan interkoneksi dengan file DLL. Hal tersebut
memungkinkan pemrograman yang lebih kompleks dan rumit, dan tentu saja, sangat
memungkinkan untuk disusupi spyware/virus oleh pembuat EA (terutama yang pakai
DLL).
Bagian 2 - Contoh EA
Bahasan yang pertama, adalah EA (setelah EA, baru kita akan membahas custom
indicator dan script).
Untuk memulai membuat EA, setelah masuk MetaEditor, pilih File -> New -> pilih Expert
Advisor, lalu masukkan Copyright dan Link
http://slidepdf.com/reader/full/tutorial-membuat-ea 1/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Code:
//+------------------------------------------------------------------+
//| ContohEA2.mq4 |
//| Copyright © 2008, Forexindo |
//| http://www.forexindo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Forexindo"
#property link "http://www.forexindo.com"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
Sedikit penjelasan,
yang di dalam start() dijalankan tiap tick (tiap ada harga baru)
Code:
http://slidepdf.com/reader/full/tutorial-membuat-ea 2/28
5/14/2018 TutorialMembuatEA-slidepdf.com
//+------------------------------------------------------------------+
//| ContohEA1.mq4 |
//| Copyright © 2008, Forexindo |
//| http://www.forexindo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Forexindo"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (OrdersTotal()==0)
{
if (iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-
StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
}
else if (iClose(Symbol(),0,1) <
iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-
TakeProfit*Point,txComment,MagicNumber);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
http://slidepdf.com/reader/full/tutorial-membuat-ea 3/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Logika EA ini, kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour), Jika tidak ada
posisi, jika candle jam lalu closenya diatas EMA 10, maka buy, kalau candle jam lalu
closenya dibawah EMA 10, maka sell.
kira2 seperti ini lah...... buy di open candle yang gw kasih panah (karena candle
sebelumnya closed di atas EMA) di 1.7366, dan close di 1.7516 (150 pips TP)...
ehm, spreadnya lupa gw itung harusnya buy nya dapet di harga 1.7369 dan TP nya
di 1.7519
ya tapi intinya kira2 gitu lah
coba kita telaah satu per satu bagiannya..... penjelasan di topic ini sekilas aja...
detailnya nanti akan dijelaskan di masing2 bagian.
Code:
extern double Lots=0.1;
extern int StopLoss=100;
extern int TakeProfit=150;
extern string txComment="Order EA1";
extern int MagicNumber=12345;
extern int Slippage=5;
http://slidepdf.com/reader/full/tutorial-membuat-ea 4/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Code:
if (OrdersTotal()==0)
Jika semua order = 0, yang berarti perintah dibawahnya (didalem { } ) akan dieksekusi
jika tidak ada order sama sekali.
yang dianggap order adalah baik posisi terbuka (buy/sell) atau pending order.
Code:
if (iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
iClose() itu fungsi untuk mengambil harga close dari candle (detailnya akan dijelaskan di
bagian lain)
pada syntax ini, berarti dia ngambil harga close dari pair dimana EA di attach, 1 candle
sebelom sekarang.
iMA() itu buat ambil nilai moving average, yang dalam syntax ini brarti EMA periode 10
diitung dari harga close, 1 jam sebelum sekarang (biar waktunya sama ama candle yang
dibandingkan)
Code:
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-
StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
OrderSend() digunakan untuk melakukan order, nanti akan dijelaskan di bagian lain,
termasuk penggunaan error catch nya supaya tidak terjadi tragedi log file ukurannya
bergiga2
else if dan yang dibawahnya itu sama, cuman tanda nya aja yang dibalik..
simple kan ?.. ya simple, lah EA nya juga simple sekali. Ga ada money managementnya,
ga ada trailling stop nya, ga ada error catcher nya, dll dll
http://slidepdf.com/reader/full/tutorial-membuat-ea 5/28
5/14/2018 TutorialMembuatEA-slidepdf.com
tapi ya itu EA paling sederhana, nantinya di bagian2 selanjutnya akan dijelaskan lebih
detil mengenai fungsi2nya...
yang valid :
Code:
double aa;
double aaa,bbb;
double aaaa=1;
double bb,cc=2;
double a=0,b=1;
double d=2,
e=3,
f=4;
double itu tipe data nya, bisa diganti int, string, bool, dll
a-f itu nama variablenya.
klo ude kebiasa coding, kombinasi seperti diatas juga bisa dipakai
klo mau dibikin biar bisa diubah2 oleh user, tambahi aja extern
jadi :
Code:
extern tipe_data nama_variabel=nilai;
oya, nama variable ini case sensitive. Nama_Variabel beda ama nama_variabel
untuk array, akan dijelaskan di bagian lain. (soalnya klo pemula jarang pakai array )
aturan penamaan variabel :
contoh2 keyword : bool, color, extern, static, Case, Else, If, true, false dan lain2
2. Comment
untuk tulis comment, ada 2 cara
http://slidepdf.com/reader/full/tutorial-membuat-ea 6/28
5/14/2018 TutorialMembuatEA-slidepdf.com
contoh
Code:
int stoploss=10; //stoploss dari trade
atau
Code:
/*
Stoploss diisi dalam point
*/
int stoploss=10;
kalimat sesudahnya // pada baris yang sama tidak akan dibaca oleh program
dan apapun yang diapit /* dan */ juga tidak akan dibaca oleh program
1. Integer (int)
Integer = bilangan tidak berkoma, dari -2 milyar sampe +2 milyar
Code:
int A=1;
2. Boolean (bool)
Boolean cuman bisa bernilai benar atau salah (true atau false)
Code:
bool SpreadProtection=true;
3. Character (int)
Char ini isinya cuman 1 huruf/symbol doank, untuk deklarasi menggunakan int, karena
yang disimpen adalah nomor ascii nya
Code:
int char1='A';
4. String (string)
String = kata2/kalimat
Code:
string commentOrder="Order by EA1";
5. Double (double)
percis ama integer, cuman double ini untuk bilangan berkoma
http://slidepdf.com/reader/full/tutorial-membuat-ea 7/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Code:
double Lot=0.1;
6. Color (color)
Code:
color WarnaBuy=Red;
OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order
#2",16384,0,WarnaBuy);
warna ini paling gampang ya ditulis saja (Red, Blue, Green, dll), atau pakai nilai integer
dari RGB nya..
tapi kayaknya sih warna2 umum ude cukup, kan hanya buat charting aja, bukan seni
lukis
7. Datetime (datetime)
misal :
Code:
datetime expiredEA=D'31.12.2007 00:00:00';
if (TimeCurrent()>expiredEA) { Print("maap, EA sudah expired"); }
fungsi diatas, membandingkan waktu sekarang dengan tanggal dan jam expired EA yang
sudah disimpan dalam variabel...
selain itu, biasanya datetime ini digunakan untuk mengatur waktu expire dari pending
order
1. Operator Aritmatika
Code:
A=B+C //a = b ditambah c
A=B-C //a = b dikurangi c
A=B*C //a = b dikali c
A=B/c //a = b dibagi c
http://slidepdf.com/reader/full/tutorial-membuat-ea 8/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Code:
A++; //sama dengan A ditambah 1
//contoh :
A=1; //A sama dengan 1
A++;
Print (A); //saat ini A bernilai 2 (1+1)
A++;
Print (A); //saat ini A bernilai 3 (karena ditambah 1 lagi)
Code:
B--; //sama kayak diatas, cuman dikurangi 1
B=1;
B--;
Print(B); //saat ini B nilainya 0
2. Assignment operator
Code:
a=b*5; //masukkan nilai b dikali 5 ke a
a+=5; //A sama dengan a+5
a-=5; //A sama dengan a-4
Code:
== : sama
!= : tidak sama
< : lebih kecil dari
> : lebih besar dari
<= : lebih kecil dari atau sama dengan
>= : lebih besar dari atau sama dengan
contoh penerapan
Code:
if (a==b) { } //kalau a sama dengan b
if (a>b) { } // kalau a lebih besar dari b
if (a!=b) { } // kalau a tidak sama dengan b
4. Operator Logical
http://slidepdf.com/reader/full/tutorial-membuat-ea 9/28
5/14/2018 TutorialMembuatEA-slidepdf.com
&& : dan
|| : atau
! : not
contoh penerapan :
Code:
if (a==b && c<d) { } //jika a sama dengan b dan c lebih kecil dari d
if (!a==b || c>=d) { } //jika a sama dengan b adalah salah (berarti a tidak sama
dengan b) atau c lebih besar dari atau sama dengan d
==========
ada beberapa operator lain, seperti bitwise operator, tapi tidak terlalu digunakan untuk
EA2 yang sederhana, jadi gw jelasin belakangan aja.
Pada bagian ini kita akan membahas decision dan looping. Decision dan looping adalah
inti dari sebuah program komputer. Sesuai atau tidaknya program komputer berjalan
tergantung dari kebenaran anda menulis/menyusun perintah2 decision dan looping
Begitu juga dengan EA, kalau salah dalam menyusun decision & looping, maka
kinerjanya akan tidak sesuai yang kita kehendaki. Misalnya menurut kehendak kita,
sekarang ini EA harusnya open buy, tapi ternyata dia malah diem aja... nah itu bisa jadi,
walau tidak 100% pasti, kesalahannya terletak pada bagian ini.
1. Decision/Branching
1.1 IF - (ELSE)
Sama juga seperti program. Program juga harus diperintah seperti itu, dikasih opsi
berdasarkan kriteria2 tertentu.
Contohnya dalam forex :
kalau dalam bahasa MQL4, maka penulisannya akan jadi seperti ini :
Code:
//diatas sudah
if (iClose(Symbol(),0,1)>iOpen(Symbol(),0,1) )
{
//open buy
}
http://slidepdf.com/reader/full/tutorial-membuat-ea 10/28
5/14/2018 TutorialMembuatEA-slidepdf.com
else if (iClose(Symbol(),0,1)<iOpen(Symbol(),0,1) )
{
//open sell
}
else
{
} //ga trade
kurang lebih sama seperti kita nyuruh orang, cuman bahasa dan tata cara penulisannya
saja yang beda.
jika misalnya perlu 2 kondisi, semisal kalau candle nya terlalu panjang (lebih dari 50
pips), tidak trade, maka kita bisa menggunakan Operator Logical (Bagian 5 - Operator
dan Ekspresi)
contoh :
Code:
//diatas sudah
if (iClose(Symbol(),0,1)>iOpen(Symbol(),0,1) && iClose(Symbol(),0,1)-
iOpen(Symbol(),0,1) < 50*Point )
{
//open buy
}
else if (iClose(Symbol(),0,1)<iOpen(Symbol(),0,1) && iOpen(Symbol(),0,1)-
iClose(Symbol(),0,1) < 50*Point )
{
//open sell
}
else
{
} //ga trade
1.2 SWITCH
Switch fungsinya sama ama if, untuk branching juga. Bedanya switch digunakan untuk
membandingkan hal2 yang sebanding, yang variabelnya sama.
http://slidepdf.com/reader/full/tutorial-membuat-ea 11/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Misal, jika 1 EA punya 3 pilihan filtrasi harga (untuk memfilter false signal), maka bisa
menggunakan switch.
inputan 1 untuk filter menggunakan RSI, 2 untuk panjang candle, dst
Code:
switch(x)
{
case 'A':
Print("CASE A");
break;
case 'B':
Print("CASE B");
case 'C':
Print("CASE B or C");
break;
default:
Print("NOT A, B or C");
break;
}
jadi misal pada code diatas, kalau x=B, maka yang keluar adalah CASE B, CASE B or C
(yang dibawah case C juga dieksekusi, walau x bukan C)
Code:
switch(x)
{
case '1':
bolehTrade=cekRSI();
break;
case '2':
bolehTrade=cekCandle();
break;
default:
Print("Unknown Option");
break;
}
2. Looping
http://slidepdf.com/reader/full/tutorial-membuat-ea 12/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Misal...
looping di EA ini paling sering digunakan untuk manajemen order (jika ordernya lebih
dari 1, misal pakai strategi grid/martingale), membaca rentetan candle (misal untuk
mengecek 3 candle terakhir), dan keperluan2 lainnya....
tapi seinget gw yang paling sering ya 2 itu..
2.1 For
contoh syntax :
Code:
int j;
for(j=0; j<5; j++)
{
Print(j);
}
pertama2 j di nol kan dulu. kalau mau dimulai dari angka yang besar juga bisa...
j<5 adalah kriteria dari looping tersebut, dimana itu harus terpenuhi, baru perintah yang
di { } itu dijalankan.
j++ ada increment untuk j (supaya index nya naik). Kalau misalnya j dimulai dari angka
besar, ke 0, maka diganti jadi j-- (tiap putaran, j nya dikurangi 1 )
Code:
bool allBullCandle=true;
http://slidepdf.com/reader/full/tutorial-membuat-ea 13/28
5/14/2018 TutorialMembuatEA-slidepdf.com
allBullCandle=false;
break;
}
}
penjelasan
2.2 While
artinya, selama k lebih kecil dari n, maka jalankan 2 baris yang didalem { } nya itu....
--------
gw cuman coba jelasin syntax2nya aja, sekali lagi, untuk transform dari bahasa manusia
ke bahasa programming, silakan baca2 buku algoritma & logika..
oya, kalau pakai looping ini ati2 ye klo loop nya keliru, bisa2 space harddisk tiba2
abis karena ukuran log file yang jadi bergiga2
http://slidepdf.com/reader/full/tutorial-membuat-ea 14/28
5/14/2018 TutorialMembuatEA-slidepdf.com
EA. Sebetulnya fungsi pada MQL 4 itu banyak sekali, tapi mari kita membahas 2 fungsi
dasar dulu saja, yaitu fungsi order dan fungsi analisa teknikal.
1. Fungsi Order
Fungsi ini pasti ada di semua EA. Gunanya adalah untuk buka, tutup, atau ubah posisi
(sebetulnya fungsinya banyak sih)...
disini kita bahas beberapa aja (sisanya bisa dibaca sendiri), kan yang penting ngerti
gimana cara baca & pakainya
Code:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage,
double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime
expiration=0, color arrow_color=CLR_NONE)
Code:
OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"My order #1",1,0,Green);
symbol itu diisi Symbol() jika mau yang diorderkan sama dengan chart dimana EA
jalan.. kalau misalnya mau order pair tertentu, ya tulis aja "GBPUSD" atau "EURUSD"
misalnya...
price, kalau buy, pastikan pricenya Ask, kalau sell, pricenya Bid. Kalau ga ntar error.
slippage itu isi aja 0-5 pip, biar ga kena requote. Tapi tergantung strateginya juga, kalau
TP cuman 3 pip ya otomatis slippagenya jangan besar2...
comment = terserah
magic = magic mau diisi apa.....
ini magicnumber, gunanyacuman keterangan
untuk aja untuk
mengidentifikasi user Misalnya saja,
posisi.
EA hanya di program untuk memanage order dengan magic number tertentu, maka EA
tersebut ga akan modify/close order manual u (karena order manual tidak ada magic
number)
expiration = khusus untuk pending order
color = warna tanda di chartnya
fungsi OrderSend() ini akan mengembalikan nilai -1 kalau ordernya gagal, klo ordernya
berhasil, maka akan mengembalikan nomor ordernya
untuk mengetahui gagal ordernya karena apa, bisa pake fungsi getLastError()
contohnya begini :
Code:
http://slidepdf.com/reader/full/tutorial-membuat-ea 15/28
5/14/2018 TutorialMembuatEA-slidepdf.com
int ticket;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order
#2",16384,0,Green);
if(ticket<0)
{
Print("OrderSend failed with error #",GetLastError());
return(0);
}
}
nomor kode error nya bisa diliat di help nya, di MQL4 Reference -> Standard constants -
> Error codes
nah, setelah order dibuka, order juga bisa di modify (diubah SL/TP nya) dengan fungsi
OrderModify()
Code:
bool OrderModify( int ticket, double price, double stoploss, double takeprofit,
datetime expiration, color arrow_color=CLR_NONE)
OrderModify() ini akan bernilai true jika modifikasinya berhasil, dan false jika
modifikasinya gagal...
contoh :
Code:
if(TrailingStop>0)
{
OrderSelect(12345,SELECT_BY_TICKET);
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-
Point*TrailingStop,OrderTakeProfit(),0,Blue);
return(0);
}
}
}
Code:
bool OrderSelect( int index, int select, int pool=MODE_TRADES)
OrderSelect() ini bisa digunakan untuk memilih (men-select - bahasa indo yang tepat
apa ya? ) order baik yang sudah tertutup, lagi terbuka, atau masih pending (limit/stop
order)..
index = adalah index order (0,1,2,3,dst) pada mode SELECT_BY_POS ; atau nomor
ticket pada mode SELECT_BY_TICKET
select = ya itu tipe select nya, bisa SELECT_BY_POS (memilih berdasarkan posisi, kalau
ga tau nomor ticketnya, pakai yang ini), atau SELECT_BY_TICKET (kalau uda tau nomor
http://slidepdf.com/reader/full/tutorial-membuat-ea 16/28
5/14/2018 TutorialMembuatEA-slidepdf.com
pool = MODE_TRADES itu untuk milih order yang aktif (limit/stop order/order yang
masih kebuka), MODE_HISTORY untuk memilih order yang udah ditutup/dihapus.
contoh :
Code:
if(OrderSelect(12470, SELECT_BY_TICKET)==true)
{
Print("order #12470 open price is ", OrderOpenPrice());
Print("order #12470 close price is ", OrderClosePrice());
}
else
Print("OrderSelect returned the error of ",GetLastError());
oya, setelah di-select, kita bisa pakai fungsi2 untuk mengetahui informasi mengenai
order tersebut, seperti jumlah lot, SL, TP, Symbol, dll
...lengkapnya langsung aje cek di MQL4 Reference -> Trading functions ; kalau kurang
jelas tentang cara pakainya, bisa di post di topic ini...
------
ok, order udah bisa di modify, bisa di select, sekarang saatnya untuk menutup order
atau menghapus pending order yang tidak jadi
untuk menutup posisi yang kebuka, pakai OrderClose() (atau OrderCloseBy() kalau
hedging)
Code:
bool OrderClose( int ticket, double lots, double price, int slippage, color
Color=CLR_NONE)
sama seperti OrderModify(), OrderClose() ini akan bernilai True kalau berhasil nutup,
dan bernilai false kalau gagal nutup posisi
Code:
bool OrderDelete( int ticket, color Color=CLR_NONE)
http://slidepdf.com/reader/full/tutorial-membuat-ea 17/28
5/14/2018 TutorialMembuatEA-slidepdf.com
contoh :
Code:
if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}
4 fungsi tadi adalah fungsi2 dasar untuk trade.... nah selanjutnya, kita akan bahas
fungsi2 untuk membaca nilai dari indikator teknikal seperti Moving Average, MACD, dll
setelah pembahasan fungsi indikator teknikal ini, harusnya sudah bisa bikin EA yang
sederhana (untuk latihan...... )
functionnya iMA()
Code:
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method,
int applied_price, int shift)
misalnya sesuai gambar diatas, rulenya kalau close candle sebelomnya diatas EMA 144,
gw buka buy...
Code:
http://slidepdf.com/reader/full/tutorial-membuat-ea 18/28
5/14/2018 TutorialMembuatEA-slidepdf.com
//pertama musti siapin variabel
double ma1=0;
ma1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
if (iClose(Symbol(),0,1)>ma1)
{ //open buy......
}
untuk ma_method, itu ada 4 (bisa di klik sih di help nya), ada MODE_SMA, MODE_EMA,
MODE_SMMA, MODE_LWMA
untuk applied_price, itu ada 7, klik aja di link helpnya untuk detailnya (daripada gw tulis
lagi...)
Code:
double ma10_1, ma20_1, ma10_2, ma20_2=0;
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah
dari EMA 20 pada candle 1, berarti terjadi cross
kurang canggih.... mau dikasih filter RSI buat detek overbought (supaya lebih klop)...
Code:
double ma10_1, ma20_1, ma10_2, ma20_2=0;
double rsi1=0;
http://slidepdf.com/reader/full/tutorial-membuat-ea 19/28
5/14/2018 TutorialMembuatEA-slidepdf.com
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah
dari EMA 20 pada candle 1, berarti terjadi cross
if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 && rsi1 > 70 )
{
//open sell......
gampang kan
untuk indikator2 laen seperti macd, par-sar, sto, envelope, dll bisa dibaca sendiri di
referencenya....
bahasan selanjutnya adalah membuat EA sederhana yang komplit (bisa dicompile & bisa
jalan) (tapi ga tau profitable atau ga...)
Bagian 8 - Menyusun EA
gw kasih X karena gw masih blom tau nomer berapa... (sekarang ude dikasih nomer,
nomor 8..)
karena sebelum bab ini, ada 3-4 bagian lagi yang membahas operasi, loop & decision,
dan function, dan..... belum inget...
bagian2nya :
Logika EA ini, kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour), Jika tidak ada posisi, jika candle
jam lalu closenya diatas EMA 10, maka buy, kalau candle jam lalu closenya dibawah EMA 10, maka
sell. TP nya 150 dan SL nya 100 pips
1) BuySignal : kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada
candle sebelumnya
2) SellSignal : kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada
http://slidepdf.com/reader/full/tutorial-membuat-ea 20/28
5/14/2018 TutorialMembuatEA-slidepdf.com
candle sebelumnya
3) ga ada
4) ga ada
Code:
//+------------------------------------------------------------------+
//| ContohEA3.mq4 |
//| Copyright © 2008, Forexindo |
//| http://www.forexindo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Forexindo"
#property link "http://www.forexindo.com"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (bolehTrade()) //kalau boleh trade
{
if (BuySignal() ) //kalau ada signal buy
{
OrderSend(Symbol(),OP_BUY,itungLot(),Ask,Slippage,Ask-
StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
}
else
{ if (SellSignal() ) //kalau ada signal sell
http://slidepdf.com/reader/full/tutorial-membuat-ea 21/28
5/14/2018 TutorialMembuatEA-slidepdf.com
OrderSend(Symbol(),OP_SELL,itungLot(),Bid,Slippage,Bid+StopLoss*Point,Bid-
TakeProfit*Point,txComment,MagicNumber);
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool BuySignal()
{
//kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle
sebelumnya
if (iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
return(false);
}
}
bool SellSignal()
{
//kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle
sebelumnya
if (iClose(Symbol(),0,1) < iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
} return(false);
}
bool bolehTrade()
{
//kalau jumat, EA ga trade ; atau kalau ada order terbuka, EA juga ga trade
if (DayOfWeek()==5 || OrdersTotal()>0) { return (false); } else { return(true);
}
}
double itungLot()
{
//ini untuk itung lot secara otomatis berdasarkan SL dan persen risk
double xLots=0;
xLots=NormalizeDouble(AccountBalance()*RiskPercent/100 /StopLoss / 10,1);
return (xLots);
}
http://slidepdf.com/reader/full/tutorial-membuat-ea 22/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Jika anda memiliki indikator sendiri, dan ingin membuat EA berdasarkan indikator
tersebut, maka ada 2 solusi yang bisa dipakai.
menggunakan iCustom lebih simpel dan rapi daripada mengembed algoritma indikator
ke dalam EA (karena EA nya nanti jadi panjang codingnya)..
fungsi lengkapnya :
Code:
double iCustom( string symbol, int timeframe, string name, ..., int mode, int
shift)
ok, sebagai contoh, gw punya indikator range1 (gw attach ex4 nya). indikator ini
menampilkan bar range seperti ini :
7) Posisi baru dibuka kalau sedang tidak ada posisi, dan juga tidak trade di hari Jumat (gw tambahi
rulenya)
gw tambahi jadi
7) Posisi baru dibuka kalau sedang tidak ada posisi, dan juga tidak trade di hari Jumat, dan range
candle jam sekarang dan jam sebelumnya tidak boleh lebih dari 100 pip.
http://slidepdf.com/reader/full/tutorial-membuat-ea 23/28
5/14/2018 TutorialMembuatEA-slidepdf.com
[code]
double range0, range1=0;
range0=iCustom(Symbol(),0,"range1",0,0); //range pada candle jam sekarang
range1=iCustom(Symbol(),0,"range1",0,1); //range pada candle jam sebelom sekarang
[code]
Code:
bool bolehTrade()
{
//kalau jumat, EA ga trade ; atau kalau ada order terbuka, EA juga ga trade
if (DayOfWeek()==5 || OrdersTotal()>0) { return (false); } else { return(true);
}
}
Code:
bool bolehTrade()
{
//kalau jumat, EA ga trade ; atau kalau ada order terbuka, EA juga ga trade
//klo range diatas 100 untuk candle sekarang dan sebelomnya, juga ga trade
range0=iCustom(Symbol(),0,"range1",0,0); //range pada candle jam sekarang
range1=iCustom(Symbol(),0,"range1",0,1); //range pada candle jam sebelom
sekarang
if (DayOfWeek()==5 || OrdersTotal()>0 || range0>100 || range1>100 ) { return
(false); } else { return(true); }
}
gampang kan
pada iCustom :
Symbol() = symbol dimana ea dipasang
0 = timeframe dimana ea dipasang (kalau mau fix 30 menit, ya isi aja PERIOD_M30)
range1 = nama ex4 custom indikatornya ( range1.ex4)
0 = mode
0,1 (paling belakang) = shift (penjelasannya ada di bagian fungsi indikator)
mode
Mode dalam iCustom itu untuk memilih mendapatkan nilai dari buffer yang mane (buffer
0-7)
http://slidepdf.com/reader/full/tutorial-membuat-ea 24/28
5/14/2018 TutorialMembuatEA-slidepdf.com
kebetulan indikator range1 tadi cuman 1 kluaran outputnya, jadi ya pilih mode 0
contoh indikator yang kasih keluaran 6 output : (gw ambil dari indikator member di
bagian 8)
Code:
iCustom(Symbol(),0,"namaindi",........(inputan).....,5,0)
nah, kebetulan juga indikator range1 tadi tidak ada inputan, bagaimana klo indikatornya
ada inputan, seperti yang di bagian 8 (Bagian 8 - Menyusun EA)
http://slidepdf.com/reader/full/tutorial-membuat-ea 25/28
5/14/2018 TutorialMembuatEA-slidepdf.com
iCustom ini cukup luas penerapannya.. tapi basicnya ya seperti contoh2 diatas..
indikator2 terlampir
Attached Files
bband-forexindo.mq4 (5.2 KB, 227 views)
range1.ex4 (2.0 KB, 193 views)
Senior Member
Join Date
http://slidepdf.com/reader/full/tutorial-membuat-ea 26/28
5/14/2018 TutorialMembuatEA-slidepdf.com
Aug 2008
Posts
526
Bagian 10 - Money Management
pada tutorial kali ini saya akan coba menambahkan money management pada sebuah
ea.
ea yang akan diutak-atik adalah ea standard metatrader yaitu "MACD Sample".
saya akan mencoba supaya setiap ordernya hanya menggunakan 1% dari balance. jadi
kalau total ordernya ada 5 bersamaan berarti margin yang terpakai cuma 5%.
"misalnya balance kita 10.000 maka 1% nya berarti 100 usd. nah di sini kita akan
menghitung 100 usd itu berapa lot."
supaya settingan persen nya bisa diubah sesuai keinginan, maka pertama kita
tambahkan extern input seperti ini:
Code:
extern int Risk=1; // dalam percent
extern double lotDigit=1; //berapa decimal lot yang diijinkan. kalau fxopen 1
digit.
untuk menghitung persentase margin, kita juga harus mengetahui berapa margin yang
dibutuhkan untuk order 1 lot,
untuk itu akan kita definisikan seperti ini:
Code:
double margin=MarketInfo(Symbol(), MODE_MARGINREQUIRED) ;
nah sekarang kita masuk dalam code MM nya, yaitu menghitung berapa lot untuk order
1 persen dari balance.
Code:
double LotSize()
{
double lot=0;
lot=NormalizeDouble((AccountBalance()*Risk/100)/margin, lotDigit) ; // di sini
kita sudah mendapatkan nilai lotnya
if (lot>MarketInfo(Symbol(),MODE_MAXLOT)) {
lot=MarketInfo(Symbol(),MODE_MAXLOT); } // di sini di filter supaya jika lotnya
lebih besar dari batas maximum lot yang ditentukan broker, maka lotnya diubah
sesuai batas maximum lot
if (lot<MarketInfo(Symbol(),MODE_MINLOT)) {
lot=MarketInfo(Symbol(),MODE_MINLOT); } // di sini juga di filter supaya jika
lotnya lebih kecil dari batas minimum yang sudah ditentukan oleh broker, maka
lotnya diubah sesuai batas minimum tersebut
} return (lot);
Code:
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd
sample",16384,0,Green);
diubah jadi
Code:
http://slidepdf.com/reader/full/tutorial-membuat-ea 27/28
5/14/2018 TutorialMembuatEA-slidepdf.com
ticket=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,0,Ask+TakeProfit*Point,"macd
sample",16384,0,Green);
MACD Sample+MM.mq4 (6.3 KB, 86 views)
http://slidepdf.com/reader/full/tutorial-membuat-ea 28/28