1 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
PENGENALAN STRUKTUR EA MQL4
Di dalam program MQL4 ada 3 dasar alur yang sudah diberikan atau sebagai standard dalam pembuatan robot. Alur tersebut berisi sekumpulan script atau code yang akan dieksekusi oleh metatrader. Tiap kumpulan alur tersebut memiliki keistimewaan antara lain:
1. Int init() dieksekusi hanya 1 kali saat EA pertama kali di attach ke chart.
2. Int deinit() dieksekusi 1x saat EA di remove dari chart, atau chart ditutup
3. int start() dieksekusi tiap tick (tiap ada update harga baru). Pada laur inilah banyak diisikan atau disisipkan coding atau script untuk
menjalankan EA.
PENGENALAN VARIABEL
Untuk melakukan pemrograman maka kita perlu memberikan nama pada fungsi yang kita buat. Oleh karena itu diperlukanlah sebuah variabel yg berfungsi untuk memberikan nama sekaligus sebagai alat bantu untuk menyederhanakan coding kita.
Cara Penulisan: JenisVariabel NamaVariabel=NilaiVariabel;
Jenis-jenis variabel ada dibawah ini dan penggunaannya disesuaikan dengan kebutuhan. Nama variabel terserah Anda. Nilai variabel harus disesuaikan dengan jenis variabel yang digunakan, jika jenis variabel angka (int, double) maka tidak boleh diberikan nilai variabel berupa kata-kata (string).
Jenis-Jenis variabel antara lain:
1. Int Integer merupakan bilangan tidak berkoma mulai dari minus 2.000.000.000 sampai plus 2.000.000.000. Int Bisa juga untuk menuliskan sebuah karakter. Contoh:
2 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
o int uangsaya=1000;
o int MataUang=’$’ ; //untuk menuliskan karakter dipakai tanda petik
2. Bool Boolean merupakan variabel yang berisi benar atau salah. Nilainya adalah False dan True
a. bool buy=true; b. bool buy=false;
3. String digunakan untuk mendefinisikan sebuah variabel yang akan berisi kata-kata atau kalimat. Contoh:
a. string semboyan=”Saya selalu Untung Trading”;
4. Double digunakan untuk mendefinisikan sebuah variabel yang berisikan data berkoma atau data pecahan misalkan:
double buystop = 1.4567; double sellstop = 1.2039;
5. Color Digunakan untuk mendefinisikan variabel yang nantinya akan berisikan informasi warna. Contoh:
a. Color WarnaKeberuntungan=Red;
b. Bisa dimasukin warna-warna seperti dibawah ini:
Black DarkGreen DarkSlateGray Olive Green Teal Navy Purple
Maroon Indigo MidnightBlue DarkBlue DarkOliveGreen SaddleBrown ForestGreen OliveDrab SeaGreen DarkGoldenrod DarkSlateBlue Sienna MediumBlue Brown DarkTurquoise DimGray
LightSeaGreen DarkViolet FireBrick MediumVioletRed MediumSeaGreen Chocolate Crimson SteelBlue
Goldenrod MediumSpringGreen LawnGreen CadetBlue DarkOrchid YellowGreen LimeGreen OrangeRed
DarkOrange Orange Gold Yellow Chartreuse Lime SpringGreen Aqua
DeepSkyBlue Blue Magenta Red Gray SlateGray Peru BlueViolet
LightSlateGray DeepPink MediumTurquoise DodgerBlue Turquoise RoyalBlue SlateBlue DarkKhaki
IndianRed MediumOrchid GreenYellow MediumAquamarine DarkSeaGreen Tomato RosyBrown Orchid
MediumPurple PaleVioletRed Coral CornflowerBlue DarkGray SandyBrown MediumSlateBlue Tan
DarkSalmon BurlyWood HotPink Salmon Violet LightCoral SkyBlue LightSalmon
Plum Khaki LightGreen Aquamarine Silver LightSkyBlue LightSteelBlue LightBlue
PaleGreen Thistle PowderBlue PaleGoldenrod PaleTurquoise LightGray Wheat NavajoWhite Moccasin LightPink Gainsboro PeachPuff Pink Bisque LightGoldenrod BlanchedAlmond LemonChiffon Beige AntiqueWhite PapayaWhip Cornsilk LightYellow LightCyan Linen
Lavender MistyRose OldLace WhiteSmoke Seashell Ivory Honeydew AliceBlue
LavenderBlush MintCream Snow White
3 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
6. DateTime digunakan untuk mendefinisikan variabel yang nantinya akan berisi mengenai informasi data tanggal dalam format:
Tahun:bulan:hari jam:menit:detik.
Format penulisan yakni: D'dd.mm.yy HH:MM:SS' (ada huruf D didepan tanda petik).
Contoh:
datetime JamKerjaEA = D'31.12.2010 00:00:00'; datetime JamBreakOut= D'14:30:00';
OPERASI DAN EKSPRESI
1. Operasi Aritmetika digunakan dalam hitungan matematika biasa
berupa penambahan, pengurangan, perkalian dan pembagian
CONTOH:
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
A=B%C; //a = sisa bagi (b dibagi c) misal b=8 c=3 maka a=2 // ======Contoh lain =========
int A=1; //A sama dengan 1 A++; // A ditambah satu // ======Contoh lain ========= int B=1; // B sama dengan 1 B--; // B dikurangi 1
Jadi Operasi aritmetika adalah operasi yang menggunakan tanda matematik seperti ditambah, dikurangi, dikali, dibagi, dan sebagainya.
4 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
2. Operasi Assignment merupakan operasi matematik yang
menggunakan +=, -= , %= dan =.
CONTOH:
int a=6; int b=6; int c=12;
a+=5; //a sama dengan a+5 = 6+5 = 11 b-=5; //a sama dengan b-5 = 6-1 = 5 c%=5 // c dibagi 5 sisanya ada = 2
3. Relational operator (operator pembanding), operator ini sering
digunakan dalam merancang sebuah EA. Biasa digunakan dengan fungsi if.
a. == : sama
b. != : tidak sama
c. < : lebih kecil dari
d. > : lebih besar dari
e. <= : lebih kecil dari atau sama dengan
f. >= : lebih besar dari atau sama dengan
CONTOH:
int a=5; int b=10;
if (a==b) {Print ("A sama dengan B lho"); } else {Print ("A tidak sama B");} if (a!=b) {Print (“A tidak sama dengan B”);}
5 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A 4. Operator Logical a. && : dan b. || : atau c. ! : not CONTOH: int a=5; int b=10;
if (a!=b && a>b) {Print ("ABC");} else {Print ("CDE");}
Jika perintah diatas dieksekusi pasti akan muncul pesan “CDE” Berbeda dengan contoh dibawah ini:
if (a!=b || a>b) {Print ("ABC");} else {Print ("CDE");}
Jika a tidak sama dengan b ATAU a lebih besar daripada b maka pernyataan dalam tanda kurung if adalah benar. Untuk script diatas memang a tidak sama dengan B maka akan muncul pesan “ABC”
Mengapa bisa demikian ? pada perintah if (kondisi) {benar} else {salah}, jika kondisi terpenuhi maka script yang akan deksekusi adalah pada kolom benar dan jika kondisi salah atau tidak terpenuhi maka yang akan
dieksekusi adalah kolom salah. Kedua script diatas hampir mirip yang
membedakan adalah satu pakai operator && dan satunya pakai operator ||. If (kondisi1 && kondisi2) {Benar} else {Salah} maka supaya script pada kolom benar tereksekusi maka kondisi1 dan kondisi2 harus terpenuhi. Berbeda dengan If (kondisi1 || kondisi2) {Benar} else {Salah} bila salah satu kondisi saja terpenuhi maka script pada kolom benar akan tereksekusi.
6 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
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 sell, ya akibatnya kita akan loss karena kecerobohan EA.
1. Decision atau bracing artinya mengambil atau memilih keputusan
dari 2 atau lebih kondisi. Ibaratnya kita di perempatan jalan, maka kita harus milih mau lurus, belok kiri atau belok kanan? Tergantung kondisi bukan jika lurus adalah jurang maka kita tidak akan lurus. Jika market dalam trend turun maka harus sell, dan jika market dalam trend naik maka harus buy. Ada 2 macam perintah yaitu if else dan switch.
a. IF – ELSE merupakan perintah membuat decision yang membagi
alur program menjadi 2 atau lebih. Contoh: Kalau candle ditutup bullish, maka buy tapi Kalau candle ditutup bearish, maka sell dan Kalau candle close=open, maka tidak usah trade. Format
penulisan atau syntax:
if (kondisi 1) {langkah A jika kondisi 1 terpenuhi} else {langkah B jika kondisi 1 terpenuhi}
atau jika ingin IF else lebih dari 1, maka
if (kondisi 1) {langkah A jika kondisi 1 terpenuhi} else if (kondisi 2) {langkah B jika kondisi 2 terpenuhi} else {Langkah C jika kondisi 2 tidak terpenuhi}
7 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
Contoh:
if (Close[1] > Open[1]) {Print (“BUY”);} else
if (Close[1] < Open[1] ) {Print (“SELL”);} else {Print (“NO trade”);} Penjelasan singkat skrip diatas:
Jika harga penutupan (close) lebih tinggi daripada pembukaan (open) maka akan muncul pesan BUY, jika harga penutupan (close) lebih rendah dari harga pembukaan (open) maka muncul pesan SELL, jika harga closing tidak lebih tinggi maupun tidak lebih rendah daripada open maka akan muncul pesan NO trade.
b. SWITCH, pada prinsipnya perintah ini sama dengan perintah IF
ELSE namun penggunaan SWITCH dimaksudkan untk
menyederhanakan perintah IF ELSE yang terlalu panjang.
CONTOH:
int a = 0; switch (a) {
case 0 : Print (“MINGGU”); case 1 : Print (“SENIN”); case 2 : Print (“SELASA”); case 3 : Print (“RABU”); case 4 : Print (“KAMIS”); case 5 : Print (“JUMAT”); case 6 : Print (“SABTU”); }
Dari perintah diatas bila a bernilai sama dengan 0 maka akan muncul pesan “MINGGU”.
Fungsi diatas bisa digantikan dengan fungsi IF else yang lebih panjang, Contoh:
8 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
If (a=0) {Print (“MINGGU”);} else If (a=1) {Print (“SENIN”);} else If (a=2) {Print (“SELASA”);} else If (a=3) {Print (“RABU”);} else If (a=4) {Print (“KAMIS”);} else If (a=5) {Print (“JUMAT”);} else If (a=6) {Print (“SABTU”);}
Contoh dengan menggunakan IF ELSE diatas sama dengan menggunakan switch hanya saja pada penggunaan switch dirasa lebih mudah dan lebih singkat terutama jika menggunakan script yang panjang.
2. Looping adalah pengulangan, artinya kita akan memberikan kondisi
supaya robot EA yang kita bangun mengulangi suatu perintah tertentu secara terus menerus. Ada 2 macam perintah yaitu For dan While
a. FOR
contoh syntax:
for (inisialisasi index; kondisi; increment index) { perintah} Contoh Skrip:
int a;
for(a=0; a<5; a++) {Print(a);}
Jika perintah diatas di jalankan, maka akan keluar angka 0,1,2,3,4 Penjelasannya: index pertamaatau index inisialisasi adalah variabel a yang bernilai nol. Pada kondisi, dibatasi bahwa variabel A hanya kurang dari 5 dan pada increment index tertulis a++ berarti nilai A ditambah 1 terus secara bertingkat, baru perintah print (a); itu dijalankan.
9 | P a g eh t t p : / / e C a n d l e s t i c k . c o m J a s a B u a t E A
Bagaimana penggunaan for ini ? saya ambil contoh saya ingin membuat EA yang akan memberikan sinyal peringatan berupa bunyi sebanyak 4x maka script yang diperlukan adalah seperti dibawah ini
int a;
for (a=0;a<4;a++) {Alert (“ALARM EA”);} Penjelasan:
int a membuat variabel a adalah integer (angka bulat tanpa pecahan)
for (a=0;a<4;a++) nilai a awal adalah 0 kemudian
ditambah 1 menjadi 2 ditambah 1 lagi menjadi 3 sudah!! Tidak ditambah 1 lagi menjadi 4 karena syaratnya a<4. Jadi a bisa 0,1,2 atau 3.
Alert (“ALARM EA”); perintah untuk mengeluarkan alert
dengan pesan “ALARM EA”. Perintah alert ini akan dieksekusi sebanyak 4x yakni ketika a bernilai 0, kemudian muncul alert lagi ketika a bernilai 1, muncul lagi ketika a bernilai 2 dan muncul lagi ketika a bernilai 3.
b. WHILE
Sama persis dengan perintah FOR hanya saja jika dalam perintah FOR kita tahu berapa kali pengulangannya. Perintah WHILE digunakan jika kita tidak tahu berapa kali pengulangannya.