Langsung ke konten utama

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 dengan mengklik kanan pada layar chart, dan pilih Template>Save Template.

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.

Selanjutnya akan muncul Window baru dan pilih File > New. Pilih 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.


Setelah mengclick finish, maka kita akan masuk ke dalam layar editor dari MQL.


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")

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


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



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


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.

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 

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

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...