Belajar Membuat EA (Bagian 2) – Membuat EA Sederhana

Setelah membaca mengenai dasar-dasar dari pemrograman MQL, sekarang marilah kita coba untuk praktek membuat EA yang sederhana. EA yang coba saya buat ini sangatlah sederhana. Logikanya begini :

EA akan melakukan pengecekan terlebih dahulu apakah sudah ada posisi atau tidak di market. Bila tidak, maka EA akan  langsung memasang posisi baru. EA akan melakukan BUY bila harga penutupan (close) candle terakhir berada di atas garis Moving Average atau akan melakukan SELL bila harga penutupan (close) candle terakhir berada di bawah garis Moving Average.

Sebelum mulai membuat MQL, pertama-tama kita mesti memahami konsep dari strategi trading yang akan kita buat EA-nya. Dalam setiap strategi trading yang ingin dibuatkan EA-nya, kita perlu mengetahui :

– Indikator apa yang digunakan?
– Bagaimana cara OP (Open Posisi) ke dalam market ?
– Bagaimana cara Exit baik itu TP (Take Profit) maupun SL (Stop Loss) ?

Langkah 1 – Buat Template

Sebelum memulai coding, pertama-tama kita mesti membuat templatenya terlebih dahulu. Template di sini sangatlah penting untuk memudahkan kita memahami dengan cara kerja dari EA tersebut. Template ini juga akan membantu pada saat backtesting nanti. Dari contoh di atas, saya akan membuat templatenya terlebih dahulu. Caranya tinggal menempelkan 1 garis MA (saya menggunakan MA periode 30). Setelah selesai membuat template, jangan lupa untuk menyimpan template tersebut.

template-save

Langkah 2 – Membuat Expert Advisor Baru

Selanjutnya kita tinggal membuka layar MQL Language Editor yang bisa diakses dengan cara mengclick icon MQL Editor atau bisa diakses melalui menu Tools > MetaQuotes Language Editor.


Screen shot 2014-01-18 at 11.59.27 AM
Selanjutnya akan muncul Window baru dan pilih File > New. Pilih Expert Advisor.

create new expert advisor
Beri nama Expert Advisor yang ingin anda buat. Dalam hal ini saya memberikan nama EA Buy Sell pada EA ini. Selanjutnya click Finish.

create-new-ea
Setelah mengclick finish, maka kita akan masuk ke dalam layar editor dari MQL.

ea-buy-sell

Langkah 3 – Coding

Setelah kita masuk ke dalam layar editor, kita bisa mulai melakukan coding. Semua bahasa pemrograman di MQL ini biasanya diletakkan di dalam int start(). Mengapa ada di sini? Karena setiap kali ada gerakan chart dalam MetaTrader, fungsi start() ini akan dijalankan. EA berjalan karena ada gerakan tick dari market. Setiap ada gerakan 1 pips dari market, maka start() akan dipanggil. Inilah dasar dari bahasa pemrograman EA.

Contoh paling sederhana dari sebuah program adalah menuliskan satu baris teks pada layar chart yaitu dengan mengetikkan command berikut :

Comment ("Teks yang muncul di layar")

ea-buy-sell-coding

Setelah selesai, kita bisa save dan langsung meng-compilenya. Click Compile yang ada di bagian atas dari MQL Editor.

Screen shot 2014-01-18 at 12.26.02 PM

Bila coding kita benar, maka tidak ada pesan error seperti tampak pada gambar berikut ini.

compile-ea

Sekarang coba untuk melihat hasil coding kita di MetaTrader. Click saja View > Strategy Tester. Pilih EA yang kita buat tadi selanjutnya click Start.

ea-strategy-tester

Karena chart visual yang dimunculkan pada saat Backtest ini adalah chart kosong, kita bisa membuka template yang sudah kita buat sebelumnya. Di bagian pojok kiri atas kita akan melihat teks yang kita masukkan akan muncul pada layar.

load-template

Langkah 4 – Membuat Variabel

Setelah berhasil mengetes EA awal tadi, sekarang kita kembali ke coding untuk lanjut membuat EA MA Buy Sell. Salah satu komponen dari bahasa pemrograman adalah adanya variabel. Di dalam MQL, biasanya variabel akan banyak digunakan sebagai parameter seperti misalnya untuk Stop Loss, Take Profit, dan lain sebagainya. Cara membuat variable bisa dilihat di bagian artikel saya sebelumnya.

Pertama-tama, kita buat variabel untuk Take Profit, Stop Loss, Slippage (perbedaan nilai harga yang ditoleransi pada saat masuk posisi) serta nilai dari periode untuk garis Moving Average (MA). Sebagai contoh di sini saya anggap periode MA adalah 30 dan nilai Take Profit dan Stop Loss-nya adalah 20.

//+------------------------------------------------------------------+
//| MA Buy Sell.mq4 |
//| Forex Trading For Living @forextradingforliving.com |
//| http://www.forextradingforliving.com |
//+------------------------------------------------------------------+
#property copyright "Forex Trading For Living @forextradingforliving.com"
#property link "http://www.forextradingforliving.com"
extern int TakeProfit = 30;
extern int StopLoss = 30;
extern int Slippage = 3;

extern int periodeMA = 30;

Catatan : Bila broker yang anda gunakan 5 digit, maka tambahkan angka 0 di belakang masing-masing Take Profit, Stop Loss dan Slippage

Langkah 5 – Mengecek apakah ada Posisi atau Pending Order

Dalam pembuatan program EA, saya biasanya akan membuat sebuah baris pengecekan yang akan mengecek apakah sudah ada posisi di market atau tidak. Hampir semua EA yang ada akan melakukan pengecekan ini. Ini adalah untuk menghindari pemasangan posisi yang terus menerus, karena program akan selalu dijalankan setiap tick-nya. Baris pengecekannya adalah sebagai berikut :

if (OrdersTotal()==0)
 {
 // Lakukan BUY / SELL Berdasarkan Posisi harga terhadap MA
 }

Langkah 6 – Mengecek apakah ada harga ada di atas / bawah dari garis MA

Nah… Selanjutnya kita tinggal membuat statemen pengecekan yang mengecek posisi harga apakah berada di bawah atau di atas garis Moving Average (MA). Baris untuk mengecek adalah sebagai berikut :

if (iClose(Symbol(),0,1) > iMA(Symbol(),0,periodeMA,0,MODE_EMA, 
PRICE_CLOSE,1) )
{
  // Lakukan BUY
}
else
if (iClose(Symbol(),0,1) < iMA(Symbol(),0,periodeMA,0,MODE_EMA, 
PRICE_CLOSE,1) )
{
  // Lakukan SELL
}

Fungsi untuk mendapatkan nilai harga penutupan (close) menurut referensi adalah :

double iClose(string symbol, int timeframe, int shift)

Keterangan :
symbol – Symbol the data of which should be used to calculate indicator. NULL means the current symbol.
timeframe – Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe.
shift – Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago).

Di sini arti dari iClose(Symbol(),0,1) adalah :

  • symbol : Symbol() – Mengambil pair mata uang tempat dijalankannya EA
  • timeframe :  0 – Timeframe yang digunakan adalah timeframe yang sedang aktif
  • shift : 1 – Ini artinya nilai close (harga penutupan) yang  diambil adalah dari 1 candle sebelum price yang sedang aktif

Sedangkan fungsi Moving Average sendiri menurut referensi adalah sebagai berikut :

double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Parameters:
symbol – Symbol the data of which should be used to calculate indicator. NULL means the current symbol.
timeframe – Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe.
period – Averaging period for calculation.
ma_shift – MA shift. Indicators line offset relate to the chart by timeframe.
ma_method – MA method. It can be any of the Moving Average method enumeration value.
applied_price – Applied price. It can be any of Applied price enumeration values.
shift – Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago).

Berarti arti dari  iMA(Symbol(),0,periodeMA,0,MODE_SMA, PRICE_CLOSE,1) adalah :

  • symbol : Symbol() – Mengambil pair mata uang tempat dijalankannya EA
  • timeframe :  0 – Timeframe yang digunakan adalah timeframe yang sedang aktif
  • period : periodeMA – periode dari MA yang digunakan diambil dari variabel periodeMA
  • ma_shift : 0 – tidak ada penggunaan shift pada MA
  • ma_method : MODE_SMA – kita menggunakan Simple Moving Average (SMA)
  • applied_price : PRICE_CLOSE – MA dihitung berdasarkan harga penutupan (close) dari market
  • shift : 1 – Nilai MA yang dihitung adalah berdasarkan harga penutupan (close) dari 1 candle sebelum price yang sedang aktif

Langkah 7 – Melakukan proses Buy dan Sell

Setelah membuat logika di atas, kita tinggal memasukkan perintah untuk memasang posisi BUY / SELL sesuai dengan kondisi. Baris perintahnya adalah sebagai berikut :

Untuk posisi BUY

OrderSend(Symbol(),OP_BUY, 1.0, Ask, Slippage, Bid-StopLoss*Point, 
Ask+TakeProfit*Point, "BELI", 12345, 0, Green);

Untuk posisi SELL

OrderSend(Symbol(),OP_SELL, 1.0, Bid, Slippage, Ask+StopLoss*Point, 
Bid-TakeProfit*Point, "JUAL", 12345, 0, Red);

Berdasarkan referensi, format dari fungsi BUY dan SELL adalah sebagai berikut :

int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Berarti arti dari OrderSend(Symbol(),OP_BUY, 1.0, Ask, Slippage, Bid-StopLoss*Point, Ask+TakeProfit*Point, “BELI”, 0, 0, Green); adalah :Parameters :
symbol
– Symbol for trading.
cmd – Operation type. It can be any of the Trade operation enumeration.
volume – Number of lots.
price – Preferred price of the trade.
slippage – Maximum price slippage for buy or sell orders.
stoploss – Stop loss level.
takeprofit – Take profit level.
comment – Order comment text. Last part of the comment may be changed by server.
magic – Order magic number. May be used as user defined identifier.
expiration – Order expiration time (for pending orders only).
arrow_color – Color of the opening arrow on the chart. If parameter is missing or has CLR_NONE value opening arrow is not drawn on the chart.

  • symbol : Symbol() – Mengambil pair mata uang tempat dijalankannya EA
  • cmd :  OP_BUY – Memasang posisi BUY
  • volume : 1.0 – Jumlah lot yang dipasang adalah 1 lot
  • price : Ask – Posisi buy yang dipasang adalah pada nilai Ask dari market
  • slippage : Slippage – Nilai slippage yang ditoleransi pada saat masuk posisi berdasarkan variabel Slippage
  • stoploss : Bid-StopLoss*Point – Nilai Stop Loss yang diatur adalah dari nilai Bid dikurangi dengan variabel StopLoss
  • takeprofit : Ask+TakeProfit*Point – Nilai Take Profit yang diatur adalah dari nilai Ask ditambahkan dengan variabel TakeProfit
  • comment : “BELI” – Komentar yang muncul saat kita melihat history adalah “BELI”
  • magicnumber : 12345 – Hanya seperti identifier untuk mengenali trade kita (Bisa diisi dengan angka sembarang)
  • expiration : 0 – Karena ini bukan pending order, maka diisi dengan 0.
  • arrow_color : Green – Tandah panah yang muncul pada saat backtrack ataupun pada saat EA berjalan berwarna hijau saat ada posisi BUY yang dipasang

Dengan begitu maka script lengkap dari program EA Buy Sell adalah sebagai berikut :

//+------------------------------------------------------------------+
//| MA Buy Sell.mq4 |
//| Forex Trading For Living @forextradingforliving.com |
//| http://www.forextradingforliving.com |
//+------------------------------------------------------------------+
#property copyright "Forex Trading For Living @forextradingforliving.com"
#property link "http://www.forextradingforliving.com"
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int Slippage = 3;
extern int periodeMA = 30;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
 {
//----

//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
 {
//----

//----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
 {
//----
 Comment("MA Buy Sell");
if (OrdersTotal()==0)
 {
 if (iClose(Symbol(),0,1) > iMA(Symbol(),0,periodeMA,0,MODE_EMA, PRICE_CLOSE,1) )
 {
 OrderSend(Symbol(),OP_BUY, 1.0, Ask, Slippage, Bid-StopLoss*Point, Ask+TakeProfit*Point, "BELI", 12345, 0, Green); 
 }
 else
 if (iClose(Symbol(),0,1) < iMA(Symbol(),0,periodeMA,0,MODE_EMA, PRICE_CLOSE,1) )
 {
 OrderSend(Symbol(),OP_SELL, 1.0, Bid, Slippage, Ask+StopLoss*Point, Bid-TakeProfit*Point, "JUAL", 12345, 0, Red);
 } 
}
//----
 return(0);
 }
//+------------------------------------------------------------------+

One thought on “Belajar Membuat EA (Bagian 2) – Membuat EA Sederhana”

Leave a Reply

Your email address will not be published. Required fields are marked *