Langsung ke konten utama

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);
}

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 bisa dicek di sini.

datetime

– tipe data tanggal dan jam

double

– tipe data float (bilangan bulat dan koma)

int

– tipe data integer (bilangan bulat) dari -2 milyar sampe +2 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. List lengkap standard constants dapat dilihat di sini.

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

Fungsi-Fungsi Dasar

Setelah tahu mengenai variabel, tahap berikutnya adalah mengenal fungsi-fungsi dasar dari bahasa MQL. Fungsi-fungsi dasar ini biasanya adalah seperti fungsi untuk menampilkan hasil di layar, fungsi untuk pasang posisi (BUY / SELL) dan beberapa fungsi lainnya. Semua referensinya dapat dilihat di link berikut ini :

Fungsi Umum – Fungsi umum untuk menampilkan tulisan pada layar, menampilkan message box, dll
Fungsi Trading – Fungsi yang berhubungan dengan pasang / tutup posisi, mengecek order yang ada, dll
Fungsi Harga – Fungsi untuk mendapatkan nilai close, high, low, open dari harga.

Sebagai sedikit pengenalan bagi yang baru belajar, berikut adalah beberapa fungsi yang sering sekali saya pakai saat membuat EA.

– Fungsi untuk menampilkan tulisan pada layar

Comment("Teks yang ingin ditampilkan di layar");

– Fungsi untuk mengecek jumlah order yang sudah dipasang

OrdersTotal()

– Fungsi untuk mengecek nilai harga dari market

iClose(Symbol(),0,1)

– Fungsi untuk mengecek jumlah order yang sudah dipasang

AccountFreeMargin()

– Fungsi untuk memasang posisi baru (bisa BUY / SELL)

OrderSend(Symbol(), OP_BUY, var_jml_lot, Ask, var_slippage, 
Bid-var_stoploss*Point, Ask+var_takeprofit*Point, 0);
OrderSend(Symbol(), OP_BUY, var_jml_lot, Ask, var_slippage, 
Bid-var_stoploss*Point, Ask+var_takeprofit*Point, 0);

Decision (Penyeleksian Kondisi) & Looping (Perulangan)

Di dalam program, selain statemen dari fungsi-fungsi yang dijalankan berurutan, juga ada statemen yang memungkinkan program untuk melakukan tindakan tertentu berdasarkan kondisi ataupun melakukan proses perulangan berdasarkan kondisi tertentu. Decision dan looping adalah inti dari sebuah program komputer.

Statemen yang umum biasanya digunakan adalah untuk proses penyeleksian kondisi (IF) dan proses perulangan (Do While). Di dalam MQL, hal ini juga bisa dilakukan. berikut adalah contoh-contoh statemen tersebut :

if(p!=x && p>y) Comment("TRUE");
if(!a) Comment("not 'a'");
for(i=0,j=99; i<100; i++,j--) Comment(array[i][j]);
if(Month() == 12)
  if(Day() == 31) Comment("Happy New Year!");

Buat yang ingin belajar mengenai bahasa pemrograman MQL lebih jauh dapat mengunjungi website berikut ini :



Komentar

Postingan populer dari blog ini

Terjemahan dan Penjelasan 彌勒救苦真經 Mi Le Jiu Ku Zhen Jing (Sutra Buddha Maitreya Menyelamatkan dari Penderitaan)

Pada kesempatan ini, saya akan membagikan terjemahan bahasa Indonesia dari kitab suci  彌勒救苦真經  Mi Le Jiu Ku Zhen Jing, salah satu kitab suci yang paling sering dibaca oleh para pengikut Yiguandao di vihara mereka. Terjemahan ini adalah hasil terjemahan saya pribadi dengan mengacu dari arti huruf per huruf-nya dan tentunya dibantu dengan referensi beberapa hasil terjemahan dari beberapa kalangan Yiguandao. Terjemahan dan penjelasan saya di sini bukanlah apa yang saya yakini secara pribadi, melainkan adalah arti dan makna dari kalimat per kalimatnya berdasarkan apa yang diyakini oleh kalangan Yiguandao. 

Studi tentang Yiguandao (Bagian 1) - Tiga Masa Pancaran 三陽

Di kalangan Yiguandao (di Indonesia lebih dikenal dengan Aliran Maitreya), kita sering mendengar kata-kata " 道真理真天命真 " yang artinya adalah Tao sejati, Kebenaran sejati dan Firman Tuhan sejati . Karena 理真 kebenaran sejati sering disebutkan di banyak ceramah yang diadakan di vihara kalangan Yiguandao, para umat Yiguandao akan beranggapan apa yang diceramahkan adalah sebuah kebenaran mutlak yang tidak mungkin salah.  Saya pun menyakini demikian selama puluhan tahun. Saya pribadi sebenarnya sudah sejak dulu hobi membaca dan saya adalah tipe orang yang tidak bisa kalau disuruh menelan mentah-mentah sebuah ajaran dan langsung mengyakininya sebagai dasar keyakinan tanpa melakukan crosscek terlebih dahulu. Masalahnya dulu kita punya keterbatasan dalam hal akses sumber literasi. Jaman dulu satu-satunya cara untuk mendapatkan akses ke buku-buku literasi adalah dengan menemukan buku-buku fisiknya. Belum ada internet dan belum ada device-device canggih seperti sekarang. Mendapatkan b...

Terjemahan dan Penjelasan Daodejing 道德經 (Bab 1) Tao dan Nama

Sudah cukup lama, saya tertarik belajar mengenai Tao Te Cing dan baru tahun ini saya mulai serius mempelajarinya. Sebenarnya saya pernah mendengar beberapa kali penjelasan tentang Dao De Jing ini di vihara Yiguandao tempat saya sembayang dulu, tapi saya tidak pernah benar-benar mengerti penjelasannya karena sepertinya apapun bunyi baitnya, penjelasannya selalu diarahkan dengan narasi dan doktrin versi mereka sendiri. Karena itu saya memutuskan untuk belajar sendiri mengenai Tao Te Cing ini langsung dari teks aslinya. Karena saya sudah menguasai sedikit bahasa mandarin, saya mengartikan tiap kata-katanya langsung dari bahasa mandarinnya dibantu dengan kamus untuk memahami lebih dalam per katanya. Untuk membantu pemahaman, saya membaca beberapa buku penjelasan mengenai Tao Te Cing yang bagus salah satunya adalah buku Dao De Jing Kitab Suci Agama Tao tulisan Dr. I. D. Like Msc dan Dao De Jing The Wisdom of Laozi tulisan Andi Wang . Ada juga beberapa buku terjemahan Dao De Jing berbahasa I...