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.
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.
start – fungsi yang akan dijalankan pada saat ada tick baru/perubahan harga
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.
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.
Contoh :
atau
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
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.