InstaForex

Sabtu, 21 April 2012

BELAJAR MEMBUAT SENDIRI EXPERT ADVISOR YANG SEDERHANA (DASAR ! )

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