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).
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 :
//+------------------------------------------------------------------+
//|
ContohEA2.mq4 |
//| Copyright © 2010, Forexmenang |
//|
http://www.freerobotea.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010,
Forexmenang"
#property link
"http://www.freerobotea.blogspot.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)
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:
//+------------------------------------------------------------------+
//| ContohEA1.mq4
|
//| Copyright ©
2010, Forexmenang |
//|
http://www.freerobotea.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010,
Forexmenang"
#property link
"http://www.freerobotea.blogspot.com"
extern double Lots=0.1;
extern int StopLoss=100;
extern int TakeProfit=150;
extern string txComment="Order EA1";
extern int MagicNumber=12345;
extern int Slippage=5;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if
(OrdersTotal()==0)
{
if
(iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
}
else if
(iClose(Symbol(),0,1)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,txComment,MagicNumber);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Logika EA ini, kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour), Jika
tidak ada posisi, jika candle jam lalu closenya diatas EMA 10, maka buy, kalau
candle jam lalu closenya dibawah EMA 10, maka sell.
buy di open candle yang gw kasih panah (karena candle sebelumnya closed di
atas EMA) di 1.7366, dan close di 1.7516 (150 pips TP)...
Code:
extern double Lots=0.1;
extern int StopLoss=100;
extern int TakeProfit=150;
extern string txComment="Order EA1";
extern int MagicNumber=12345;
extern int Slippage=5;
cukup jelas kan ya
extern intinya supaya variable tersebut bisa diubah2 oleh end user yang tidak memiliki akses ke source code EA.
extern intinya supaya variable tersebut bisa diubah2 oleh end user yang tidak memiliki akses ke source code EA.
Code:
if (OrdersTotal()==0)
Jika semua order = 0, yang berarti perintah dibawahnya (didalem { } ) akan
dieksekusi jika tidak ada order sama sekali.
yang dianggap order adalah baik posisi terbuka (buy/sell) atau pending order.
yang dianggap order adalah baik posisi terbuka (buy/sell) atau pending order.
Code:
if (iClose(Symbol(),0,1) >
iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
iClose() itu fungsi untuk mengambil harga close dari candle (detailnya akan
dijelaskan di bagian lain)
Ppada syntax ini, berarti dia ngambil harga close dari pair dimana EA di attach, 1 candle sebelom sekarang.
Ppada syntax ini, berarti dia ngambil harga close dari pair dimana EA di attach, 1 candle sebelom sekarang.
iMA() itu buat ambil nilai moving average, yang dalam syntax ini brarti EMA
periode 10 diitung dari harga close, 1 jam sebelum sekarang (biar waktunya sama
ama candle yang dibandingkan)
Code:
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
OrderSend() digunakan untuk melakukan order, nanti akan dijelaskan di
bagian lain, termasuk penggunaan error catch nya supaya tidak terjadi tragedi
log file ukurannya bergiga2
else if dan yang dibawahnya itu sama, cuman tanda nya aja yang dibalik..
.........
Gmana, simple kan ?.. ya simple, lah EA nya juga simple sekali. Ga ada money
managementnya, ga ada trailling stop nya, ga ada error catcher nya, dll
Tidak ada komentar:
Posting Komentar