Belajar MQL4 1st
Belajar MQL4 1st
Melalui tutorial dibawah ini maka diharapkan anda lebih memahami mengenai MQL4 itu sendiri. Disini akan dibahas
mulai dari pengenalan MQL4, cara menyusun dan membuat EA, hingga nantinya cara backtest dan optimasi EA.
Dengan pemahaman yang lebih mendalam mengenai tutorial ini diharapkan anda bisa sukses dalam bertrading dan
membuka op dengan tepat. Data dibawah ini diambil dari forexindo.com dan disadur pada halaman ini, dengan tujuan
untuk memberikan informasi kepada para pemula yang ingin mempelajari lebih mendetail mengenai MQL4. Silahkan
diabaikan saja halaman ini bila anda sudah mengerti dan memahami tentang MQL4.
Saat ini, tutorial MQL4 terdiri dari 8 bagian :
Bagian 1 - Pengenalan : membahas tentang MQL4 dan kegunaannya.
Bagian 2 - Contoh EA Sederhana : membahas Expert Advisor beserta contohnya
Bagian 3 - Syntax dan Hal Dasar : membahas variable dan comment.
Bagian 4 - Tipe Data : membahas tipe data pada MQL4 beserta contohnya.
Bagian 5 - Operator dan Ekspresi : membahas operator dan ekspresi pada MQL4 beserta contohnya.
Bagian 6 - Decision dan Looping : membahas penggunaan branching dan looping untuk mengatur alur program EA.
Bagian 7 - Order dan Analisa Teknikal : membahas cara membuat EA melakukan order dan menggunakan indikator
teknikal.
Bagian 8 - Menyusun EA : membahas cara menyusun EA. Diharapkan pembaca sudah bisa membuat EA yang
sederhana.
Bagian 9 - Penggunaan iCustom : membahas cara menyusun EA dengan basis entry berdasarkan custom indikator.
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
logika-logika dan paramater-parameter tertentu.
Custom Indicator, hampir sama seperti EA, cuma tidak bisa melakukan trading. Dan dapat menggunakan function-
function 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 sudah terbiasa dengan C/C++, harusnya tidak 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).
Contoh EA Sederhana
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
lalu anda akan mendapat code kira-kira seperti ini :
code:
//+------------------------------------------------------------------+
//| 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 init() dijalankan 1x saat EA pertama kali di drag ke chart;
yang di dalam deinit() dijalankan 1x saat EA di remove dari chart, atau chart ditutup
yang di dalam start() dijalankan tiap tick (tiap ada harga baru)
nah, coba lihat EA super simple berikut ini :
code:
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
Logika EA ini, kira-kira (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.
kira-kira seperti ini lah...... buy di open candle yang saya kasih
panah (karena candle sebelumnya closed di atas EMA) di 1.7366,
dan close di 1.7516 (150 pips TP)...
coba kita telaah satu per satu bagiannya..... penjelasan di topic ini
sekilas aja... detailnya nanti akan dijelaskan di masing-masing
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;
cukup jelas kan ya
extern intinya supaya variable tersebut bisa diubah-ubah2 oleh end user yang tidak memiliki akses ke source code EA.
code:
if (OrdersTotal()==0)
Jika semua order = 0, yang berarti perintah dibawahnya (didalam { } ) 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 bergiga-giga
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
tapi ya itu EA paling sederhana, nantinya di bagian-bagian selanjutnya akan dijelaskan lebih detil mengenai fungsi2nya...
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
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
&& : 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
Decision dan Looping
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 perintah-
perintah 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)
Decision berarti membagi alur program menjadi 2.
Simplenya begini, u suruh teman u membelikan nasi empal. U bilang, kalau harganya 5000 dibelikan 2 ya, kalau lebih
mahal ya tidak usah beli.
Itu termasuk branching, karena dari 1, akan dipecah menjadi 2 opsi :
opsi 1 : kalau harga 5000 beli 2
opsi 2 : kalau harga diatas 5000, tidak usah beli
Sama juga seperti program. Program juga harus diperintah seperti itu, dikasih opsi berdasarkan kriteria-kriteria tertentu.
Contohnya dalam forex :
Kalau candle ditutup bullish, maka buy
Kalau candle ditutup bearish, maka sell
Kalau candle close=open, maka tidak usah trade
(bullish berarti close lebih tinggi dari open, dan sebaliknya)
kalau dalam bahasa MQL4, maka penulisannya akan jadi seperti ini :
code:
//diatas sudah
if (iClose(Symbol(),0,1)>iOpen(Symbol(),0,1) )
{
//open buy
}
else if (iClose(Symbol(),0,1)<iOpen(Symbol(),0,1) )
{
//open sell
}
else
{
//ga trade
}
kurang lebih sama seperti kita menyuruh orang, cuma 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
}
cukup jelas kan ya?
Saya cuma coba menjelaskan syntax-syntax & penulisannya saja kalau misalnya translasi dari bahasa manusia ke bahasa
algoritma yang dimengerti komputer, bisa baca-baca buku logika & algoritma... (di perpus kampus IT biasanya ada)
1.2 SWITCH
Switch fungsinya sama ama if, untuk branching juga. Bedanya switch digunakan untuk membandingkan hal-hal yang
sebanding, yang variabelnya sama.
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
syntaxnya seperti ini :
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;
}
perhatikan, bahwa setiap selesai operasi, harus diakhiri dengan break;
kalau tidak, maka perintah di case selanjutnya akan dieksekusi juga.
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;
}
cekRSI(), cekCandle(), dan bolehTrade adalah boolean
x=integer
default adalah nilai jika x tidak memenuhi semua kriteria di case (kayak else nya statement If)
Bagian ini membahas beberapa fungsi yang penting, yang dipakai dalam hampir setiap 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:
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 tidak kena requote. Tapi tergantung strateginya juga, kalau TP cuman 3 pip ya otomatis
slippagenya jangan besar-besar...
stoploss = harga stoploss (bukan pips SL)...
takeprofit = harga takeprofitnya
comment = terserah mau diisi apa..... cuman keterangan aja untuk user
magic = magic ini magicnumber, gunanya untuk mengidentifikasi posisi. Misalnya saja, 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, kalau ordernya berhasil, maka akan
mengembalikan nomor ordernya
untuk mengetahui gagal ordernya karena apa, bisa pake fungsi getLastError()
contohnya begini :
code:
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...
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 sudah tahu nomor ticketnya pakai yang ini)...
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 fungsi-fungsi untuk mengetahui informasi mengenai order tersebut, seperti jumlah
lot, SL, TP, Symbol, dll
...lengkapnya langsung saja 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 menutup, dan bernilai false kalau gagal
menutup posisi
code:
bool OrderDelete( int ticket, color Color=CLR_NONE)
contoh :
code:
if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}
4 fungsi tadi adalah fungsi-fungsi dasar untuk trade.... nah selanjutnya, kita akan bahas fungsi-fungsi 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 sebelumnya diatas EMA 144, saya buka buy...
code:
//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;
rsi1=iRSI(Symbol(),0,14,PRICE_CLOSE,1);
//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 indikator-indikator lain 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...)
Menyusun EA
ok, pada dasarnya, sebuah EA yang sederhana/standard (bukan EA yang kompleks seperti neural network, atau yang
misalnya terdiri dari beberapa modul yang mengontrol trade sendiri-sendiri)... terdiri atas beberapa bagian/struktur..
bagian ini biasanya dibikinkan fungsi tersendiri, agar coding terlihat rapi, sekaligus mempermudah debugging
bagiannya :
1. BuySignal : pada kondisi apa EA buka buy
2. SellSignal : pada kondisi apa EA buka sel
3. CloseBuySignal : pada kondisi apa EA nutup posisi buy (yang ini tidak harus ada, karena dapat menggunakan
TP/SL sebagai closingnya)
4. CloseSellSignal : sama seperti CloseBuySignal
5. MoneyManagement : buat itung lotsize secara otomatis
6. Trail : buat trailling posisi, klo misalnya diperlukan
7. Confirmator : kalau misalnya EA cuman trade hari senin-kamis, maka biasanya ditaruh di bagian ini..
Kalau 7 bagian itu sudah ketemu, bikin EA nya jadi lebih gampang
misalnya begini, gw mau bikin EA yang kayak di Bagian 2 - Contoh EA
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
kalau di breakdown jadi 7 bagian tadi :
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 candle sebelumnya
3) Tidak ada
4) Tidak ada
5) Lotnya otomatis diitung berdasarkan SL dan persen risiko.
6) Tidak pakai trail, jadi tidak ada
7) Posis baru dibuka kalau sedang tidak ada posisi, dan juga tidak trade di hari Jumat (gw tambahi rulenya)
kira-kira source code nya jadi begini
code:
extern double RiskPercent=5;
extern int StopLoss=100;
extern int TakeProfit=150;
extern string txComment="Order EA1";
extern int MagicNumber=12345;
extern int Slippage=5;
//+------------------------------------------------------------------+
//| 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
{
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);
}
logikanya jadi rapi dan jelas...
oya, sekilas mengenai operator
|| berarti atau & berarti dan (nanti akan dijelaskan di bagian tentang operator)
EA ini kelihatannya simple sekali codingnya paling butuh 5-10 menit doank.... tapi kalau di backtest, profitable lho
(terlepas dari dradownnya yang gede)...
iCustom
Jika anda memiliki indikator sendiri, dan ingin membuat EA berdasarkan indikator tersebut, maka ada 2 solusi yang bisa
dipakai.
1. menggunakan function iCustom()
2. mengembed algoritma indikator ke EA nya
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, saya punya indikator range1 (saya attach ex4 nya). indikator ini menampilkan bar range seperti ini :
contoh indikator yang kasih keluaran 6 output : (saya ambil dari indikator member di bagian 8)
maka kalau mau ambil nilai DownTrendLine misalnya, ya mode nya diisi 5
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)
nah.... jadi begitu
paramater-paramater inputnya ditaruh seperti itu (garis-garis biru) (semoga mengerti kalau melihat gambarnya)...
terus mode yang sya maksud itu untuk mendapatkan nilai yang saya kasih garis ijo
iCustom ini cukup luas penerapannya.. tapi basicnya ya seperti contoh-contoh diatas..
--------------------------------------------------------------------------------
indikator-indikator terlampir
Attached Files
bband-forexindo.mq4 (5.2 KB)
range1.ex4 (2.0 KB)