P. 1
Tutorial Membuat EA

Tutorial Membuat EA

|Views: 3,286|Likes:
Published by Mas Kazaoo

More info:

Published by: Mas Kazaoo on Apr 05, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

01/17/2013

pdf

text

original

Tutorial membuat Expert Advisor (EA

)
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 lalu anda akan mendapat code kira2 seperti ini :

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 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:

forexindo.Ask+TakeProfit*Point.1. int StopLoss=100.0.10.//+------------------------------------------------------------------+ //| ContohEA1.1) ) { OrderSend(Symbol().com" extern extern extern extern extern extern double Lots=0.MODE_EMA.Bid+StopLoss*Point.OP_SELL.BidTakeProfit*Point.OP_BUY.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008. int MagicNumber=12345.0.0. Forexindo | //| http://www.MagicNumber). int Slippage=5. } } //---return(0).MagicNumber). string txComment="Order EA1".1) > iMA(Symbol().0.10. } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---//---return(0). } //+------------------------------------------------------------------+ . //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---//---return(0).PRICE_CLOSE.Lots.1) < iMA(Symbol(). } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---if (OrdersTotal()==0) { if (iClose(Symbol().Ask.0. } else if (iClose(Symbol().PRICE_CLOSE.mq4 | //| Copyright © 2008. int TakeProfit=150.txComment.Lots. Forexindo" #property link "http://www.1) ) { OrderSend(Symbol().Bid.txComment.MODE_EMA.Slippage.Slippage.forexindo.0.AskStopLoss*Point.

int Slippage=5...7516 (150 pips TP).7519 ya tapi intinya kira2 gitu lah coba kita telaah satu per satu bagiannya. kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour). jika candle jam lalu closenya diatas EMA 10. Jika tidak ada posisi. dan close di 1.7369 dan TP nya . maka sell.1...Logika EA ini. int StopLoss=100.... Code: extern extern extern extern extern extern double Lots=0.. maka buy. ehm. penjelasan di topic ini sekilas aja. buy di open candle yang gw kasih panah (karena candle sebelumnya closed di atas EMA) di 1. harusnya buy nya dapet di harga 1.. kalau candle jam lalu closenya dibawah EMA 10. kira2 seperti ini lah. string txComment="Order EA1". spreadnya lupa gw itung di 1...7366.. int TakeProfit=150.. detailnya nanti akan dijelaskan di masing2 bagian. int MagicNumber=12345.

Code: if (iClose(Symbol(). OrderSend() digunakan untuk melakukan order. berarti dia ngambil harga close dari pair dimana EA di attach..1) > iMA(Symbol().MagicNumber).PRICE_CLOSE.AskStopLoss*Point. dll dll .txComment.MODE_EMA.0. 1 candle sebelom sekarang. yang dalam syntax ini brarti EMA periode 10 diitung dari harga close. simple kan ?. 1 jam sebelum sekarang (biar waktunya sama ama candle yang dibandingkan) Code: OrderSend(Symbol(). Ga ada money managementnya.10. ga ada error catcher nya.OP_BUY. iMA() itu buat ambil nilai moving average. cuman tanda nya aja yang dibalik.Lots. lah EA nya juga simple sekali. ya simple.Ask+TakeProfit*Point. ga ada trailling stop nya. yang berarti perintah dibawahnya (didalem { } ) akan dieksekusi jika tidak ada order sama sekali..0. Code: if (OrdersTotal()==0) Jika semua order = 0.1) ) iClose() itu fungsi untuk mengambil harga close dari candle (detailnya akan dijelaskan di bagian lain) pada syntax ini.Ask. yang dianggap order adalah baik posisi terbuka (buy/sell) atau pending order.0.cukup jelas kan ya extern intinya supaya variable tersebut bisa diubah2 oleh end user yang tidak memiliki akses ke source code EA. termasuk penggunaan error catch nya supaya tidak terjadi tragedi log file ukurannya bergiga2 else if dan yang dibawahnya itu sama.Slippage. nanti akan dijelaskan di bagian lain.

oya. e=3.tapi ya itu EA paling sederhana. aaa. jadi intinya : (yang paling simple) Code: tipe_data nama_variabel=nilai. extern. bisa diganti int.panjangnya max 31 karakter . bb. bool. Else. Langsung saja kita bahas satu per satu 1. double itu tipe data nya. nama variable ini case sensitive. Bagian 3 . dll a-f itu nama variablenya. a=0.. Deklarasi dan Penamaan Variabel yang valid : Code: double double double double double aa. f=4. tambahi aja extern jadi : Code: extern tipe_data nama_variabel=nilai. If. ada 2 cara . double d=2. klo ude kebiasa coding.tidak bisa menggunakan keyword contoh2 keyword : bool.b=1. nantinya di bagian2 selanjutnya akan dijelaskan lebih detil mengenai fungsi2nya. akan dijelaskan di bagian lain. (soalnya klo pemula jarang pakai array aturan penamaan variabel : .bbb. kombinasi seperti diatas juga bisa dipakai klo mau dibikin biar bisa diubah2 oleh user. string.Syntax dan Hal-hal dasar Syntax dari MQL4 ini mirip c/c++. huruf kecil atau _ (tidak bisa angka atau simbol lain selain _ ) . aaaa=1.. false dan lain2 ) 2. Case.cc=2. static.harus diawali huruf besar. color. true. Comment untuk tulis comment. Nama_Variabel beda ama nama_variabel untuk array.

1. 3. menambahkan // di awal kalimat 2. kalimat sesudahnya // pada baris yang sama tidak akan dibaca oleh program dan apapun yang diapit /* dan */ juga tidak akan dibaca oleh program Bagian 4 . Boolean (bool) Boolean cuman bisa bernilai benar atau salah (true atau false) Code: bool SpreadProtection=true. dan diapit tanda petik 1 4.Tipe Data Tipe Data Di MQL4 ada 7 tipe data : 1. untuk deklarasi menggunakan int. Character (int) Char ini isinya cuman 1 huruf/symbol doank. menggunakan /* */ contoh Code: int stoploss=10. Integer (int) Integer = bilangan tidak berkoma. kata2nya diapit pake tanda petik (") 5. //stoploss dari trade atau Code: /* Stoploss diisi dalam point */ int stoploss=10. hanya 1 huruf. String (string) String = kata2/kalimat Code: string commentOrder="Order by EA1". 2. dari -2 milyar sampe +2 milyar Code: int A=1. Double (double) percis ama integer. cuman double ini untuk bilangan berkoma . karena yang disimpen adalah nomor ascii nya Code: int char1='A'.

1.Ask-25*Point. OrderSend(Symbol(). biasanya datetime ini digunakan untuk mengatur waktu expire dari pending order formatnya D'dd..WarnaBuy). atau pakai nilai integer dari RGB nya..MQL4 Documentation 7. Green. EA sudah expired"). warna ini paling gampang ya ditulis saja (Red. function2 tertentu ada paramater warna.16384. misalnya OrderSend Code: color WarnaBuy=Red..Operator dan Ekspresi Operasi dan Ekspresi 1... Datetime (datetime) Datetime ini untuk menyimpan informasi tanggal & waktu ke variabel misal : Code: datetime expiredEA=D'31.mm.Ask.Ask+25*Point.2007 00:00:00'.1. tapi kayaknya sih warna2 umum ude cukup.0. membandingkan waktu sekarang dengan tanggal dan jam expired EA yang sudah disimpan dalam variabel.12.."My order #2". selain itu. kan hanya buat charting aja. Color (color) Color ini buat menyimpan informasi warna.OP_BUY. 6.Code: double Lot=0. bukan seni lukis pilihan warnanya bisa di set di Web colors .yy HH:MM:SS' sekian pembahasan tipe data.. Bagian 5 .3. untuk set warna tanda panah di chartnya. Operator Aritmatika Code: A=B+C A=B-C A=B*C A=B/c //a //a //a //a = = = = b b b b ditambah c dikurangi c dikali c dibagi c . if (TimeCurrent()>expiredEA) { Print("maap. Blue. dll)... } fungsi diatas.

. //A sama dengan 1 A++. cuman dikurangi 1 B=1. //sama kayak diatas. -=. //sama dengan A ditambah 1 //contoh : A=1. Relational operator (operator pembanding) 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. B--. //saat ini A bernilai 3 (karena ditambah 1 lagi) Code: B--. tapi jarang dipake & agak susah dipahami.A=B%C //a = sisa bagi b dengan c . ada +=. //A sama dengan a-4 3. Operator Logical cuman ada 3 yang penting . Assignment operator yang umum dipake cuman = ada banyak sih. Print(B).10 % 3 = 1 . 8 % 3 = 2 Code: A++. //masukkan nilai b dikali 5 ke a a+=5. %= dll. Print (A). //saat ini A bernilai 2 (1+1) A++. //A sama dengan a+5 a-=5. Print (A). jadi gw jelasin di lain waktu saja Code: a=b*5. //saat ini B nilainya 0 2.

Itu termasuk branching. jadi gw jelasin belakangan aja.&& : 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. maka buy Kalau candle ditutup bearish. dikasih opsi berdasarkan kriteria2 tertentu.. Decision/Branching 1. Misalnya menurut kehendak kita. Simplenya begini. maka penulisannya akan jadi seperti ini : Code: //diatas sudah if (iClose(Symbol(). karena dari 1. Program juga harus diperintah seperti itu.1 IF . Bagian 6 .0. walau tidak 100% pasti. kalau salah dalam menyusun decision & looping. Contohnya dalam forex : Kalau candle ditutup bullish. tapi ternyata dia malah diem aja. maka kinerjanya akan tidak sesuai yang kita kehendaki. Sesuai atau tidaknya program komputer berjalan tergantung dari kebenaran anda menulis/menyusun perintah2 decision dan looping Begitu juga dengan EA. maka tidak usah trade (bullish berarti close lebih tinggi dari open. sekarang ini EA harusnya open buy. dan sebaliknya) kalau dalam bahasa MQL4..1)>iOpen(Symbol(). tapi tidak terlalu digunakan untuk EA2 yang sederhana. kesalahannya terletak pada bagian ini. akan dipecah menjadi 2 opsi : opsi 1 : kalau harga 5000 beli 2 opsi 2 : kalau harga diatas 5000. 1. nah itu bisa jadi. Decision dan looping adalah inti dari sebuah program komputer. u suruh temen u beliin nasi empal. kalau harganya 5000 beliin 2 ya.(ELSE) Decision berarti membagi alur program menjadi 2.1) ) { //open buy } .Decision dan Looping Decision dan Looping Pada bagian ini kita akan membahas decision dan looping. ga usah beli Sama juga seperti program. kalau lebih mahal ya ga usah beli.0. maka sell Kalau candle close=open. U bilang. seperti bitwise operator.

0. .1) < 50*Point ) { //open buy } else if (iClose(Symbol().0.0.0.0. untuk branching juga. cuman bahasa dan tata cara penulisannya saja yang beda.0.1)iClose(Symbol(). (di perpus kampus IT biasanya ada) 1. bisa baca2 buku logika & algoritma. semisal kalau candle nya terlalu panjang (lebih dari 50 pips).1) && iClose(Symbol().0.1) ) { //open sell } else { //ga trade } kurang lebih sama seperti kita nyuruh orang. Bedanya switch digunakan untuk membandingkan hal2 yang sebanding.Operator dan Ekspresi) contoh : Code: //diatas sudah if (iClose(Symbol(). yang variabelnya sama.. jika misalnya perlu 2 kondisi.1)>iOpen(Symbol().1) && iOpen(Symbol(). maka kita bisa menggunakan Operator Logical (Bagian 5 .0.2 SWITCH Switch fungsinya sama ama if.else if (iClose(Symbol().1)iOpen(Symbol().0..1)<iOpen(Symbol(). tidak trade.1)<iOpen(Symbol().0.1) < 50*Point ) { //open sell } else { //ga trade } cukup jelas kan ya? gw cuman coba jelasin syntax2 & penulisannya saja kalau misalnya translasi dari bahasa manusia ke bahasa algoritma yang dimengerti komputer.

Looping intinya mengulang. inputan 1 untuk filter menggunakan RSI. case 'C': Print("CASE B or C"). kalau x=B. dst syntaxnya seperti ini : Code: switch(x) { case 'A': Print("CASE A"). maka perintah di case selanjutnya akan dieksekusi juga. jadi misal pada code diatas. break. case '2': bolehTrade=cekCandle(). jika 1 EA punya 3 pilihan filtrasi harga (untuk memfilter false signal). cekCandle(). maka yang keluar adalah CASE B. break. } cekRSI(). case 'B': Print("CASE B"). walau x bukan C) Code: switch(x) { case '1': bolehTrade=cekRSI(). default: Print("NOT A. break. B or C"). kalau tidak. harus diakhiri dengan break. bahwa setiap selesai operasi. maka bisa menggunakan switch. default: Print("Unknown Option"). atau mengulang sepanjang kondisi x terpenuhi.Misal. break. looping juga merupakan jantung dari program komputer dan EA. Looping Selain branching/percabangan. break. break. Dengan batasan2 tertentu. dan bolehTrade adalah boolean x=integer default adalah nilai jika x tidak memenuhi semua kriteria di case (kayak else nya statement If) 2. 2 untuk panjang candle. . } perhatikan. seperti mengulang sebanyak X kali. CASE B or C (yang dibawah case C juga dieksekusi.

4 penjelasannya gini : for (inisialisasi index . j++ ada increment untuk j (supaya index nya naik). tapi seinget gw yang paling sering ya 2 itu....(tiap putaran. kondisi . baru perintah yang di { } itu dijalankan. increment index) for itu butuh 1 variabel untuk index. dimana itu harus terpenuhi. membaca rentetan candle (misal untuk mengecek 3 candle terakhir). j<5. "Ayo. dalam hal ini.1 For contoh syntax : Code: int j.3.. push up 10x !" "Push up terussssss sampai saya bilang stop". . } klo di jalankan.. 2.. Kalau misalnya j dimulai dari angka besar. kita pake j pertama2 j di nol kan dulu.. kalau mau dimulai dari angka yang besar juga bisa. for(j=0.. j nya dikurangi 1 ) contoh script simple untuk cek candle Code: bool allBullCandle=true. ke 0.. j++) { Print(j). maka diganti jadi j-. misal pakai strategi grid/martingale).Misal.. looping di EA ini paling sering digunakan untuk manajemen order (jika ordernya lebih dari 1.1. dan keperluan2 lainnya.2. j<5 adalah kriteria dari looping tersebut. maka akan keluar 0.

. kita bisa pake for. tapi kalau masih ga jelas mau diulang berapa kali. sekali lagi. maka kita pake while penggunaan while ini cukup jarang. kalau kita tau persis berapa kali pengulangannya. 2. bisa2 space harddisk tiba2 abis karena ukuran log file yang jadi bergiga2 lebih parah lagi kalau order berkali2 sampai marginnya abis. untuk transform dari bahasa manusia ke bahasa programming. jadi looping tidak perlu dilanjutkan). } penjelasan allBullCandle bertipe boolean dideklarasikan terlebih dahulu. (jadi gw jelasin ntar'an aja ye contoh syntax nya Code: while(k<n) { y=y*x. k++. kalau hasilnya dibawah 0 (berarti close lebih rendah). yang dipakai dalam hampir setiap . } ) artinya.. break. Bagian 7 .//untuk cek 3 candle terakhir for (int a=1. cek harga close candle a sebelum sekarang . kalau pakai looping ini ati2 ye klo loop nya keliru. dari 1 hingga lebih kecil dari 4 (which is 3).. } } if (allBullCandle) { Print("Bull").a) .a<4. silakan baca2 buku algoritma & logika. maka jalankan 2 baris yang didalem { } nya itu. -------gw cuman coba jelasin syntax2nya aja.iOpen(Symbol(). berarti close dibawah open { allBullCandle=false..harga open candle a sebelum sekarang .0. lalu for. oya.. (kalau ude ketemu 1 candle yang tidak bullish kan otomatis jadi tidak bull. } else { Print ("Tidak Bull"). untuk mengulang bedanya.... selama k lebih kecil dari n. maka variabel allBullCandle langsung diisi nilai false. break berguna untuk menghentikan looping..a)<0) //kalau range negatif.Fungsi Order dan Indikator Teknikal Fungsi Order dan Analisa Teknikal Bagian ini membahas beberapa fungsi yang penting..0.a++) { if (iClose(Symbol().2 While fungsinya sama persis dengan for..

0. klo ordernya berhasil. OP_SELL. OP_BUYSTOP volume itu jumlah lotnya price..0.0. yaitu fungsi order dan fungsi analisa teknikal. double volume. lebih lengkapnya ada di help nya MQL4. kalau sell. atau ubah posisi (sebetulnya fungsinya banyak sih). Gunanya adalah untuk buka.3. string comment=NULL. Kalau ga ntar error.OP_BUY.. Sebetulnya fungsi pada MQL 4 itu banyak sekali. untuk buka buy 1 lot. di bagian "Trading Functions" disini kita bahas beberapa aja (sisanya bisa dibaca sendiri). biar ga kena requote. 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.. maka akan mengembalikan nomor ordernya untuk mengetahui gagal ordernya karena apa. tapi mari kita membahas 2 fungsi dasar dulu saja. kalau buy. kan yang penting ngerti gimana cara baca & pakainya OrderSend() : untuk membuka order Code: int OrderSend( string symbol.1.EA. int magic=0. takeprofit = harga takeprofitnya comment = terserah mau diisi apa.Ask."My order #1".. cuman keterangan aja untuk user magic = magic ini magicnumber.... EA hanya di program untuk memanage order dengan magic number tertentu. pastikan pricenya Ask. kalau misalnya mau order pair tertentu. bisa pake fungsi getLastError() contohnya begini : Code: . Fungsi Order Fungsi ini pasti ada di semua EA.. OP_BUYLIMIT. tutup. 1. datetime expiration=0. OP_SELLSTOP. double price. cmd itu ada 6 : OP_BUY. gunanya untuk mengidentifikasi posisi. color arrow_color=CLR_NONE) contoh. Misalnya saja. symbol itu diisi Symbol() jika mau yang diorderkan sama dengan chart dimana EA jalan.. int cmd.Green). kalau TP cuman 3 pip ya otomatis slippagenya jangan besar2. tanpa tp dan sl : Code: OrderSend(Symbol(). Tapi tergantung strateginya juga.. stoploss = harga stoploss (bukan pips SL). double takeprofit.1.... OP_SELLLIMIT. int slippage. slippage itu isi aja 0-5 pip. ya tulis aja "GBPUSD" atau "EURUSD" misalnya. pricenya Bid. double stoploss.

16384.3.3. atau nomor ticket pada mode SELECT_BY_TICKET select = ya itu tipe select nya..0.OP_BUY.Green).14. yaitu OrderSelect() OrderSelect() ini gunanya untuk memilih order yang akan dimodifikasi/diclose Code: bool OrderSelect( int index. index = adalah index order (0. double price. kalau ga tau nomor ticketnya. } } nomor kode error nya bisa diliat di help nya. if(iRSI(NULL.Ask+25*Point. if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket().2. di MQL4 Reference -> Standard constants > Error codes nah. atau SELECT_BY_TICKET (kalau uda tau nomor . order juga bisa di modify (diubah SL/TP nya) dengan fungsi OrderModify() Code: bool OrderModify( int ticket.Blue).dst) pada mode SELECT_BY_POS .PRICE_CLOSE. double takeprofit.GetLastError()). dan false jika modifikasinya gagal. return(0). atau masih pending (limit/stop order).0.OrderTakeProfit(). int pool=MODE_TRADES) OrderSelect() ini bisa digunakan untuk memilih (men-select .0. datetime expiration.Ask.SELECT_BY_TICKET).1.bahasa indo yang tepat apa ya? ) order baik yang sudah tertutup.BidPoint*TrailingStop. if(ticket<0) { Print("OrderSend failed with error #". ada 1 function lagi yang penting. double stoploss.int ticket.OrderOpenPrice().Ask-25*Point. contoh : Code: if(TrailingStop>0) { OrderSelect(12345. color arrow_color=CLR_NONE) OrderModify() ini akan bernilai true jika modifikasinya berhasil."My order #2".. bisa SELECT_BY_POS (memilih berdasarkan posisi. int select.1. } } } oya. return(0). setelah order dibuka.0)<25) { ticket=OrderSend(Symbol(). pakai yang ini).. lagi terbuka.

OrderClose() ini akan bernilai True kalau berhasil nutup. SELECT_BY_TICKET)==true) { Print("order #12470 open price is ". dan bernilai false kalau gagal nutup posisi untuk OrderDelete().... sekarang saatnya untuk menutup order atau menghapus pending order yang tidak jadi untuk menutup posisi yang kebuka. color Color=CLR_NONE) . oya. int slippage. seperti jumlah lot. pakai OrderClose() (atau OrderCloseBy() kalau hedging) untuk menghapus pending order. Symbol.. kalau mau nutup buy. double price. contoh : Code: if(OrderSelect(12470.. Print("order #12470 close price is ". OrderOpenPrice()). double lots. color Color=CLR_NONE) ticket = nomor ticket lots = jumlah lot yang ditutup. ketik Bid slippage = isi 0-5 sesuai keinginan... pakai OrderDelete() Code: bool OrderClose( int ticket.GetLastError()).. OrderClosePrice()). pool = MODE_TRADES itu untuk milih order yang aktif (limit/stop order/order yang masih kebuka). bisa di select.lengkapnya langsung aje cek di MQL4 Reference -> Trading functions .ticketnya pake yang ini). color = warna tanda di chartnya. jauh lebih simple dari OrderClose() Code: bool OrderDelete( int ticket. pakai harga Ask. TP.. sama seperti OrderModify(). dll fungsi2nya antara laen : OrderLots() = mengetahui jumlah lot OrderTakeProfit() = mengetahui TP OrderStopLoss() = mengetahui SL OrderSymbol() = mengetahui pair nya . order udah bisa di modify. -----ok. } else Print("OrderSelect returned the error of ". SL. kita bisa pakai fungsi2 untuk mengetahui informasi mengenai order tersebut. bisa di post di topic ini. kalau kurang jelas tentang cara pakainya.. MODE_HISTORY untuk memilih order yang udah ditutup/dihapus. kalau misalnya mau ditutup semua ya isi aja OrderLots() price = kalau mau nutup sell. setelah di-select.

. nah selanjutnya..contoh : Code: if(Ask>var1) { OrderDelete(order_ticket).. int shift) misalnya sesuai gambar diatas. } 4 fungsi tadi adalah fungsi2 dasar untuk trade. rulenya kalau close candle sebelomnya diatas EMA 144. int applied_price. gw buka buy. harusnya sudah bisa bikin EA yang sederhana (untuk latihan. bisa di cek di MQL4 Reference . kita akan bahas fungsi2 untuk membaca nilai dari indikator teknikal seperti Moving Average.. functionnya iMA() Code: double iMA( string symbol. int timeframe. ) 2.. int period. int ma_shift. Code: .Technical indicators gw kasih contoh moving average aja. Fungsi Indikator Teknikal Di help mql4....... int ma_method.. return(0). dll setelah pembahasan fungsi indikator teknikal ini. MACD.

//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2.PRICE_CLOSE.. ma20_2=iMA(Symbol().MODE_EMA.) contoh laen.PRICE_CLOSE.. MODE_LWMA untuk applied_price. ma20_2=0. berarti terjadi cross ya tinggal di coding aje.0.144.MODE_EMA. ma20_1.144.MODE_EMA.0. dan EMA 10 lebih rendah dari EMA 20 pada candle 1.. ma20_2=iMA(Symbol()..0. ma20_2=0..2)..0. MA cross kalau EMA 10 motong EMA 20 dari atas. MODE_EMA.. Code: double ma10_1.. rsi1=iRSI(Symbol(). kira2 kayak gini 1) cek EMA 10 dan 20 pada candle 2 sebelom sekarang 2) cek EMA 10 dan 20 pada candle 1 sebelom sekarang 3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2.1).MODE_EMA.144..0.0. if (iClose(Symbol(). ma10_2. strategi paling populer sepanjang masa.. //1) cek EMA 10 dan 20 pada candle 2 sebelom sekarang ma10_2=iMA(Symbol(). MODE_SMMA. open sell klo diterjemahin ke perintah2 komputer.PRICE_CLOSE. ma1=iMA(Symbol().0.2).1)>ma1) { //open buy.0..PRICE_CLOSE. double rsi1=0.. Code: double ma10_1. //2) cek EMA 10 dan 20 pada candle 1 sebelom sekarang ma10_1=iMA(Symbol(). .. //1) cek EMA 10 dan 20 pada candle 2 sebelom sekarang ma10_2=iMA(Symbol().0.0.PRICE_CLOSE.144. ma20_1=iMA(Symbol().PRICE_CLOSE.. itu ada 4 (bisa di klik sih di help nya).. berarti terjadi cross if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 ) { //open sell.2).PRICE_CLOSE.0. dan EMA 10 lebih rendah dari EMA 20 pada candle 1. ada MODE_SMA.144.PRICE_CLOSE..0.//pertama musti siapin variabel double ma1=0.144.PRICE_CLOSE. ma20_1.144.144.0.0. } untuk ma_method.0.2).. mau dikasih filter RSI buat detek overbought (supaya lebih klop). ma20_1=iMA(Symbol().MODE_EMA.MODE_EMA.MODE_EMA. //2) cek EMA 10 dan 20 pada candle 1 sebelom sekarang ma10_1=iMA(Symbol().1).144.1).PRICE_CLOSE.1).0. itu ada 7.1). klik aja di link helpnya untuk detailnya (daripada gw tulis lagi.0.0.1).. } kurang canggih.14.0...0.MODE_EMA.MODE_EMA. ma10_2.

Jika tidak ada posisi. dan function... klo misalnya diperlukan 7) Confirmator : kalau misalnya EA cuman trade hari senin-kamis.. kalau candle jam lalu closenya dibawah EMA 10. dll bisa dibaca sendiri di referencenya.. sebuah EA yang sederhana/standard (bukan EA yang kompleks seperti neural network.//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2. kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour). atau yang misalnya terdiri dari beberapa modul yang mengontrol trade sendiri2).Menyusun EA gw kasih X karena gw masih blom tau nomer berapa.. agar coding terlihat rapi. sekaligus mempermudah debugging bagian2nya : 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. } gampang kan untuk indikator2 laen seperti macd. gw mau bikin EA yang kayak di Bagian 2 . nomor 8. 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 .... jika candle jam lalu closenya diatas EMA 10. maka buy. (sekarang ude dikasih nomer. pada dasarnya. dan. loop & decision...... bahasan selanjutnya adalah membuat EA sederhana yang komplit (bisa dicompile & bisa jalan) (tapi ga tau profitable atau ga... bikin EA nya jadi lebih gampang misalnya begini. belum inget. sto.) Bagian 8 . berarti terjadi cross if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 && rsi1 > 70 ) { //open sell.. ok... ada 3-4 bagian lagi yang membahas operasi. dan EMA 10 lebih rendah dari EMA 20 pada candle 1. maka sell. maka biasanya ditaruh di bagian ini..) karena sebelum bab ini. karena dapat menggunakan TP/SL sebagai closingnya) 4) CloseSellSignal : sama seperti CloseBuySignal 5) MoneyManagement : buat itung lotsize secara otomatis 6) Trail : buat trailling posisi. envelope. terdiri atas beberapa bagian/struktur.Contoh EA Logika EA ini. Klo 7 bagian itu sudah ketemu. par-sar.. bagian ini biasanya dibikinkan fungsi tersendiri....

Forexindo | //| http://www. dan juga tidak trade di hari Jumat (gw tambahi rulenya) kira2 source code nya jadi begini Code: //+------------------------------------------------------------------+ //| ContohEA3.AskStopLoss*Point. int StopLoss=100.Ask+TakeProfit*Point. //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---//---return(0).forexindo.OP_BUY.mq4 | //| Copyright © 2008. int MagicNumber=12345.txComment.candle sebelumnya 3) ga ada 4) ga ada 5) Lotnya otomatis diitung berdasarkan SL dan persen risiko.MagicNumber).com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008. string txComment="Order EA1". 6) Ga pake trail. jadi ga ada 7) Posis baru dibuka kalau sedang tidak ada posisi. } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---if (bolehTrade()) //kalau boleh trade { if (BuySignal() ) //kalau ada signal buy { OrderSend(Symbol(). int Slippage=5. Forexindo" #property link "http://www. } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---//---return(0).itungLot().forexindo. int TakeProfit=150.Slippage.Ask.com" extern extern extern extern extern extern double RiskPercent=5. } else if (SellSignal() ) //kalau ada signal sell { .

} logikanya jadi rapi dan jelas.Bid+StopLoss*Point.0. xLots=NormalizeDouble(AccountBalance()*RiskPercent/100 /StopLoss / 10. } } bool SellSignal() { //kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle sebelumnya if (iClose(Symbol().1) < iMA(Symbol(). oya.txComment. } else { return(true).OP_SELL. } } double itungLot() { //ini untuk itung lot secara otomatis berdasarkan SL dan persen risk double xLots=0.PRICE_CLOSE.itungLot()..0. return (xLots). } } bool bolehTrade() { //kalau jumat.10. atau kalau ada order terbuka.1) ) { return(true).0.0.0.MODE_EMA. EA juga ga trade if (DayOfWeek()==5 || OrdersTotal()>0) { return (false). sekilas mengenai operator || berarti atau && berarti dan (nanti akan dijelaskan di bagian tentang operator) .Slippage.10.1).. } //+------------------------------------------------------------------+ bool BuySignal() { //kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle sebelumnya if (iClose(Symbol().BidTakeProfit*Point. } else { return(false).Bid. EA ga trade . } } //---return(0).1) > iMA(Symbol().OrderSend(Symbol().PRICE_CLOSE.MODE_EMA. } else { return(false).MagicNumber).1) ) { return(true).0.

. sebagai contoh.Bagian 9 ...Implementasi Custom Indikator iCustom Jika anda memiliki indikator sendiri. indikator ini menampilkan bar range seperti ini : nah. 7) Posisi baru dibuka kalau sedang tidak ada posisi. gw punya indikator range1 (gw attach ex4 nya). dan juga tidak trade di hari Jumat. dan ingin membuat EA berdasarkan indikator tersebut. int shift) ok. maka ada 2 solusi yang bisa dipakai. dan range candle jam sekarang dan jam sebelumnya tidak boleh lebih dari 100 pip. fungsi lengkapnya : Code: double iCustom( string symbol. gw mau mengimplementasikan nilai dari indikator ini (range=absolute(high-low)) ke EA gw. int mode. kita pake aja contoh EA yang di bagian 8. 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). int timeframe. . . dan juga tidak trade di hari Jumat (gw tambahi rulenya) gw tambahi jadi 7) Posisi baru dibuka kalau sedang tidak ada posisi.. string name.

.1). //range pada candle jam sekarang range1=iCustom(Symbol().0. EA ga trade .0. range0=iCustom(Symbol(). custom indikatornya bernama range1.ex4 (ada di folder expert/indicator) maka. //range pada candle jam sebelom sekarang [code] sedangkan di EA nya. range1=0."range1". atau kalau ada order terbuka. contoh sekarang.1). } else { return(true). EA juga ga trade if (DayOfWeek()==5 || OrdersTotal()>0) { return (false). atau kalau ada order terbuka. asalnya : Code: bool bolehTrade() { //kalau jumat. gimana caranya untuk mendapatkan nilai dari iCustom."range1"."range1". } } gampang kan pada iCustom : Symbol() = symbol dimana ea dipasang 0 = timeframe dimana ea dipasang (kalau mau fix 30 menit.0.0. } else { return(true)."range1".0).ex4) 0 = mode 0. //range pada candle jam sekarang range1=iCustom(Symbol().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) . ya isi aja PERIOD_M30) range1 = nama ex4 custom indikatornya (range1. //range pada candle jam sebelom sekarang if (DayOfWeek()==5 || OrdersTotal()>0 || range0>100 || range1>100 ) { return (false).0. syntaxnya begini : [code] double range0.0. juga ga trade range0=iCustom(Symbol().0.0).nah.0. } } ditambahi jadi begini Code: bool bolehTrade() { //kalau jumat. EA ga trade . EA juga ga trade //klo range diatas 100 untuk candle sekarang dan sebelomnya.

5. ya mode nya diisi 5 Code: iCustom(Symbol().kebetulan indikator range1 tadi cuman 1 kluaran outputnya......."namaindi"... jadi ya pilih mode 0 contoh indikator yang kasih keluaran 6 output : (gw ambil dari indikator member di bagian 8) maka klo mo ambil nilai DownTrendLine misalnya.0) nah...Menyusun EA) .0. seperti yang di bagian 8 (Bagian 8 ..(inputan)... bagaimana klo indikatornya ada inputan. kebetulan juga indikator range1 tadi tidak ada inputan.

ex4 (2..0 KB. 193 views) Senior Member Join Date ...nah.mq4 (5.. 227 views) range1. indikator2 terlampir Attached Files   bband-forexindo.2 KB.. klo ada pertanyaan silakan di post. tapi basicnya ya seperti contoh2 diatas.. jadi begitu paramater2 inputannya ditaruh seperti itu (garis2 biru) (moga2 ngerti klo liat gambarnya)... terus mode yang gw maksud itu untuk mendapatkan nilai yang gw kasih garis ijo iCustom ini cukup luas penerapannya.

Ask. nah sekarang kita masuk dalam code MM nya. } // di sini juga di filter supaya jika lotnya lebih kecil dari batas minimum yang sudah ditentukan oleh broker.Aug 2008 Posts 526 Bagian 10 . lot=NormalizeDouble((AccountBalance()*Risk/100)/margin. Code: double LotSize() { double lot=0.MODE_MAXLOT). // di sini kita sudah mendapatkan nilai lotnya if (lot>MarketInfo(Symbol(). semua perintah ordersend dalam ea tersebut. untuk menghitung persentase margin. kalau fxopen 1 digit. diubah jadi Code: ." supaya settingan persen nya bisa diubah sesuai keinginan. MODE_MARGINREQUIRED) . "misalnya balance kita 10. //berapa decimal lot yang diijinkan. kita juga harus mengetahui berapa margin yang dibutuhkan untuk order 1 lot.Green). maka lotnya diubah sesuai batas minimum tersebut return (lot). ea yang akan diutak-atik adalah ea standard metatrader yaitu "MACD Sample".0. saya akan mencoba supaya setiap ordernya hanya menggunakan 1% dari balance. jadi kalau total ordernya ada 5 bersamaan berarti margin yang terpakai cuma 5%.MODE_MINLOT). yaitu menghitung berapa lot untuk order 1 persen dari balance. maka pertama kita tambahkan extern input seperti ini: Code: extern int Risk=1."macd sample". bagian lotnya diubah jadi LotSize() untuk memanggil fungsi MoneyManagement yang sudah kita buat di atas contoh yang ini Code: ticket=OrderSend(Symbol().OP_BUY. lotDigit) . // dalam percent extern double lotDigit=1.16384. } selanjutnya tinggal mengaplikasikan kode2 di atas ke dalam EA MACD Sample.0. maka lotnya diubah sesuai batas maximum lot if (lot<MarketInfo(Symbol().Lots.MODE_MINLOT)) { lot=MarketInfo(Symbol().MODE_MAXLOT)) { lot=MarketInfo(Symbol(). untuk itu akan kita definisikan seperti ini: Code: double margin=MarketInfo(Symbol(). } // di sini di filter supaya jika lotnya lebih besar dari batas maximum lot yang ditentukan broker.Money Management pada tutorial kali ini saya akan coba menambahkan money management pada sebuah ea. nah di sini kita akan menghitung 100 usd itu berapa lot.000 maka 1% nya berarti 100 usd.3.Ask+TakeProfit*Point.

3 KB.3.ticket=OrderSend(Symbol().Ask+TakeProfit*Point.0.0."macd sample".Ask.Green).mq4 (6.16384. code finalnya seperti ini: Attached Files  MACD Sample+MM. 86 views) .OP_BUY.LotSize().

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->