Anda di halaman 1dari 8

Belajar Membuat EA (Bagian 1) – Pengenalan Bahasa MQL

Bahasa MQL? Apa sih itu? Bila anda belum pernah dengar apa itu bahasa (bahasa pemrograman) MQL,
anda berarti sama seperti orang kebanyakan. Banyak trader forex hanya tahu tentang indicator dan Expert
Advisor (EA), tapi saat ditanya bahasa MQL, mereka tidak tahu. Sebenarnya apa sih bahasa MQL itu? MQL
(MetaQuotes Language) adalah bahasa pemrograman untuk memprogram EA, Indicator ataupun script
yang nantinya bisa digunakan pada platform Meta Trader. Ada beberapa versi dari MQL dan yang paling
banyak digunakan adalah 2 versi terakhir yaitu MetaQuotes Language 4 (MQL4) dan MetaQuotes
Language 5 (MQL5). Bahasa pemrograman MQL ini sendiri biasanya digunakan untuk membuat :

 Expert Advisor EA atau banyak dikenal orang sebagai robot adalah program yang berjalan
seiring dengan gerakan harga pada market. EA sendiri punya banyak fungsi. Ada yang
berfungsi memberikan sinyal saja sampai dengan melakukan eksekusi seperti memasang
posisi baru ataupun menutup posisi secara otomatis.EA tersimpan di folder \experts dalam
folder MetaTrader anda.
 Custom Indicator Selain indicator bawaan dari MetaTrader, kita juga bisa membuat
indicator sendiri (custom indicator). Sedikit berbeda dengan EA yang bisa memasang posisi
dan menutup posisi, indicator hanya berfungsi sebagai alat analisa saja. Indicator tidak dapat
memasang posisi ataupun menutup posisi secara otomatis.Custom Indicators tersimpan di
folder \experts\indicators dalam folder Meta Trader anda.
 Script Script adalah program yang dijalankan sekali saja saat diaktifkan. Tidak seperti EA,
Script tidak akan bisa berjalan mengikuti harga yang sedang berjalan. Script biasanya
diaktifkan dengan cara mengclick script tersebut.Scripts tersimpan di folder \experts\scripts
dalam folder Meta Trader anda.
 Library Library adalah sekumpulan fungsi program yang biasanya sering digunakan.
Library ini biasanya merupakan salah satu bagian dari Script / EA / Indicator.Libraries
tersimpan di folder \experts\libraries dalam folder Meta Trader anda.
 Included file Included file adalah file yang berisi bagian teks-teks yang sering
digunakan pada pembuatan sebuah program. Secara fungsi, included file mirip seperti
library. Included file ini nantinya dapat dimasukkan pada EA, scripts, custom indicator
ataupun library pada saat compile. Penggunaan included file lebih disukai programmer
karena penggunaan library biasanya memberikan beban ekstra pada saat EA / indicator /
script dijalankan.Included files tersimpan di folder \experts\include dalam folder Meta
Trader anda

Bagi yang pernah belajar bahasa pemrograman C++ mungkin akan sedikit terbantu saat belajar mengenai
bahasa pemrograman MQL, karena banyak syntax dari bahasa MQL mirip dengan syntax dari bahasa C++.
Satu-satunya kelemahan dari MQL mungkin adalah tidak adanya debugging untuk melacak step by step
program yang dibuat. Okay… Sebagai pengenalan, kita akan langsung masuk ke dasar-dasar dari
pemrograman MQL.

Struktur Program MQL

Untuk dapat memahami bagaimana suatu program ditulis, maka struktur dari program harus dimengerti
terlebih dahulu. Setiap bahasa pemrograman punya struktur yang berbeda. Program MQL ini mirip seperti
kumpulan fungsi seperti halnya C++. Fungsi yang harus ada di MQL adalah start(). Suatu fungsi di program
MQL dibuka dengan kurung kurawal ({)dan ditutup dengan kurawal tutup (}). Di antara kurung kurawal
dapat dituliskan statement-statement program MQL. Berikut adalah struktur dari program MQL.
#property copyright "Pembuat EA"
#property link "Alamat Website"

int init()
{
statemen-statemen;
return(0);
}

int deinit()
{
statemen-statemen;
return(0);
}

int start()
{
statemen-statemen;
return(0);
}

Fungsi di MQL5, minimal ada 3 seperti di atas, yaitu : init, start, dan deinit.

init – fungsi yang akan dijalankan pada saat EA diaktifkan

deinit – fungsi yang akan dijalankan pada saat EA di non aktifkan

start – fungsi yang akan dijalankan pada saat ada tick baru/perubahan harga

Deklarasi Variabel & Tipe Data


Variabel adalah suatu pengenal yang digunakan untuk menyimpan suatu nilai dan nilai variabel dapat
berubah-ubah selama proses dalam program. Variabel harus mempunyai nama supaya program dapat
menggunakan nilai yang tersimpan di dalamnya. Variabel dalam MQL sendiri bisa dideklarasikan dalam
beberapa tipe data. Ada beberapa jenis tipe data pada program MQL, yaitu :
Bool = tipe data boolean yang berisi antara true dan false
Color = tipe data untuk warna – pilihan warna yang bisa digunakan
Datetime = tipe data tanggal dan jam
Double = tipe data float (bilangan bulat dan koma)
Int = tipe data integer (bilangan bulat) dari -2 milyar sampe milyar
/ tipe data karakter 1 digit
String = tipe data teks

Selain tipe data di atas, ada juga tipe data array untuk menampung beberapa data sekaligus dalam 1
variabel. Untuk array, akan saya jelaskan lebih lanjut di bagian advance nantinya.

Berikut adalah contoh cara mendeklarasikan variabel dalam program MQL :


extern bool status = true;
static color warna = 0xFFFFFF;
datetime tgl = D'1980.07.19 12:30:27';
int i = 1;
int karakter = 'A';
double d = 1.4211;
string s = "Ticket # 12345";
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
Penggunaan extern di depan deklarasi variabel biasanya digunakan agar variabel dapat juga berfungsi
sebagai input dan bisa diakses dari window property EA di Meta Trader.

Contoh bila kita membuat variabel seperti di bawah ini :

Maka bila di properties dari EA kita akan muncul seperti di bawah ini :

Penggunaan static di depan deklarasi variabel biasanya digunakan untuk mendeklarasikan konstanta di
mana nilainya tidak bisa berubah-ubah seiring dengan berjalannya proses program.

Catatan : Nama variabel di MQL bersifat case sensitive, sehingga variabel Periode_MA berbeda dengan
periode_ma.

Adapun ada beberapa aturan dalam memberi nama variabel yaitu :


– Panjang nama variabel maksimal adalah 31 karakter
– Harus diawali huruf besar, huruf kecil atau _ (tidak bisa angka atau simbol lain selain _ )
– Tidak bisa menggunakan keyword (contoh keyword : bool, color, extern, static, case, else, if, true, false
dan lain-lain)

Keyword sebagai Standard Constants


Untuk lebih mempermudah penulisan program, MQL telah mempunyai semacam konstanta yang sudah
ada dalam program. Konstanta ini biasanya sering dipakai saat kita hendak menuliskan nilai-nilai tertentu
mulai dari market price, timeframe, jenis pemasangan posisi, arrow, dan masih banyak lagi . Semuanya
dapat anda akses hanya dengan menuliskan nama konstantanya. Semua konstanta di sini bertipe int.

Contoh penggunaan Standard Constants (yang berwarna biru) :


OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"My order #1",1,0,Green);
if(ma1tp){if(Ask<ma1)close(OP_BUY);if(Bid>ma1)close(OP_SELL);}
double ma2=iMA(NULL,0,maperiod2,0,MODE_EMA,PRICE_CLOSE,shift);

Catatan / Komentar pada Program


Seperti halnya di semua bahasa pemrograman, anda juga bisa memberikan catatan atau komentar
pada bahasa MQL. Comment di sini tidak akan dibaca oleh program dan hanya berfungsi sebagai
petunjuk atau catatan bagi programmer untuk lebih mengerti mengenai program yang dibuat.

Cara penulisan komentar pada program MQL ada 2 yaitu :

1. Tambahkan // di awal komentar


2. Gunakan /* */

Contoh :

int jumlah_lot=1; // Total Lot untuk pasang posisi

atau

/* Total Lot untuk pasang posisi */


int jumlah_lot=1;

Operator Aritmetika & Assignment Operator


Operator yang digunakan pada bahasa MQL ini sangat mirip dengan bahasa C++. Berikut adalah
beberapa contoh penggunaan operator aritmetika :

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 pembagian setelah B dibagi C. Misalnya 10 % 3 = 1;

A++; //versi singkat dari operasi A=A+1


B--; //versi singkat dari operasi B=B-1

A=B*5; //isi dari A sama dengan B dikali 5


A+=5; //versi singkat dari A=A+5
A-=5; //versi singkat dari A=A-5
A%=5; //versi singkat dari A=A%5;

Selain semua operator aritmetika di atas, kita juga perlu mengetahui beberapa operator
pembanding, yaitu :
== : sama
!= : tidak sama
< : lebih kecil dari > : lebih besar dari
<= : lebih kecil dari atau sama dengan
>= : lebih besar dari atau sama dengan

&& : dan
|| : atau
! : not

Operator pembanding ini biasanya sering digunakan pada penyeleksian kondisi,


contohnya :
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
if (a==b && c<d) { } //jika a sama dengan b dan c lebih kecil dari d
if (!a==b || c>=d) { } //jika a tidak sama dengan b atau c lebih besar
atau sama dengan d

Price Constants
Calculations of technical indicators require price values and/or values of volumes, on which
calculations will be performed. There are 7 predefined identifiers from the
ENUM_APPLIED_PRICE enumeration, used to specify the desired price base for calculations.

ENUM_APPLIED_PRICE

ID Value Description
PRICE_CLOSE 0 Close price
PRICE_OPEN 1 Open price
PRICE_HIGH 2 The maximum price for the period
PRICE_LOW 3 The minimum price for the period
PRICE_MEDIAN 4 Median price, (high + low)/2
PRICE_TYPICAL 5 Typical price, (high + low + close)/3
PRICE_WEIGHTED 6 Weighted close price, (high + low + close + close)/4

ENUM_STO_PRICE

ID Description
STO_LOWHIGH Calculation is based on Low/High prices
STO_CLOSECLOSE Calculation is based on Close/Close prices
Series Array Identifiers
Series array identifier used with ArrayCopySeries(), iHighest() and iLowest() functions. It can be
any of the following values:

ID Value Description
MODE_OPEN 0 Open price
MODE_LOW 1 Low price
MODE_HIGH 2 High price
MODE_CLOSE 3 Close price
MODE_VOLUME 4 Volume, used in iLowest() and iHighest() functions
MODE_TIME 5 Bar open time, used in ArrayCopySeries() function

ENUM_MA_METHOD

ID Value Description
MODE_SMA 0 Simple averaging
MODE_EMA 1 Exponential averaging
MODE_SMMA 2 Smoothed averaging
MODE_LWMA 3 Linear-weighted averaging
KONSTAN NILAI KETERANGAN
MODE_LOW 1 Harga minimum hari
MODE_TINGGI 2 Harga hari maksimum
MODE_TIME 5 Waktu centang terakhir yang masuk.
MODE_BID 9 Harga penawaran terakhir yang masuk. Untuk simbol saat ini, disimpan dalam
variabel yang telah ditentukan sebelumnya Bid .
MODE_ASK 10 Harga permintaan masuk terakhir. Untuk simbol saat ini, disimpan dalam variabel
yang telah ditentukan sebelumnya Ask .
MODE_POINT 11 Ukuran poin dalam mata uang kutipan. Untuk simbol saat ini, disimpan dalam
variabel yang telah ditentukan sebelumnya Point .
MODE_DIGITS 12 Hitungan digit setelah titik desimal dalam simbol harga. Untuk simbol saat ini,
disimpan dalam variabel yang telah ditentukan Digits .
MODE_SPREAD 13 Sebarkan nilai dalam poin.
MODE_STOPLEVEL 14 Nilai StopLoss/TakeProfit minimal yang diizinkan dalam poin.
MODE_LOTSIZE 15 Ukuran lot dalam mata uang dasar.
MODE_TICKVALUE 16 Nilai tick minimal dalam mata uang deposit.
MODE_TICKSIZE 17 Ukuran centang minimal dalam mata uang kutipan.
MODE_SWAPLONG 18 Tukar posisi panjang.
MODE_SWAPSHORT 19 Tukar posisi short.
MODE_STARTING 20 Tanggal mulai perdagangan (biasanya digunakan untuk futures).
MODE_EXPIRATION 21 Tanggal kedaluwarsa perdagangan (biasanya digunakan untuk futures).
MODE_PERDAGANGAN 22 Perdagangan diperbolehkan untuk simbol.
DIPERBOLEHKAN
MODE_MINLOT 23 Ukuran lot minimal yang diizinkan.
MODE_LOTSTEP 24 Langkah untuk mengubah banyak.
MODE_MAXLOT 25 Ukuran lot maksimum yang diizinkan.
MODE_SWAPTYPE 26 Metode perhitungan swap. 0 - dalam poin; 1 - dalam mata uang dasar simbol; 2 -
berdasarkan bunga; 3 - dalam mata uang margin.
MODE_PROFITCALCMODE 27 Modus perhitungan keuntungan. 0 - Valas; 1 - CFD; 2 - Kontrak Berjangka.
MODE_MARGINCALCMODE 28 Mode perhitungan margin. 0 - Valas; 1 - CFD; 2 - Kontrak Berjangka; 3 - CFD untuk
indeks.
MODE_MARGININIT 29 Persyaratan margin awal untuk 1 lot.
MODE_MARGINMAINTENANCE 30 Margin untuk mempertahankan posisi terbuka dihitung untuk 1 lot.
MODE_MARGINHEDGED 31 Margin lindung nilai dihitung untuk 1 lot.
MODE_MARGINPERLU 32 Margin bebas diperlukan untuk membuka 1 lot untuk pembelian.
MODE_FREEZELEVEL 33 Pesan tingkat pembekuan dalam poin. Jika harga eksekusi berada dalam kisaran yang
ditentukan oleh level pembekuan, pesanan tidak dapat diubah, dibatalkan, atau
ditutup.

Anda mungkin juga menyukai