Anda bosan mengalami kerugian karena tidak dapat mengendalikan emosi dan disiplin. Rugi, lelah,
Stress, Patah Semangat jadi sahabat setia. STOP! Tinggalkan kebiasaan itu dan mulailah trading
dengan cara CERDAS bersama Robot Forex Cerdas.
Robot disini bukan secara fisik. Tapi sebuah software dengan gabungan Algoritma
yang unik dan analisa indicator untuk trading forex secara otomatis. Tanpa anda
melakukan perintah Buy/Sell, robot forex akan mengerjakan sendiri.
Label: CARA BUAT ROBOT TRADING, PERFORMA ROBOT, robot ea, ROBOT FOREX GRATIS
Menyusun EA
ok, pada dasarnya, sebuah EA yang sederhana/standard (bukan EA yang kompleks seperti neural
network, atau yang misalnya terdiri dari beberapa modul yang mengontrol trade sendiri-sendiri)...
terdiri atas beberapa bagian/struktur.. bagian ini biasanya dibikinkan fungsi tersendiri, agar coding
terlihat rapi, sekaligus mempermudah debugging
bagiannya :
1. BuySignal : pada kondisi apa EA buka buy
2. SellSignal : pada kondisi apa EA buka sel
3. CloseBuySignal : pada kondisi apa EA nutup posisi buy (yang ini tidak harus ada, karena dapat
menggunakan TP/SL sebagai closingnya)
4. CloseSellSignal : sama seperti CloseBuySignal
5. MoneyManagement : buat itung lotsize secara otomatis
6. Trail : buat trailling posisi, klo misalnya diperlukan
7. Confirmator : kalau misalnya EA cuman trade hari senin-kamis, maka biasanya ditaruh di bagian
ini..
Kalau 7 bagian itu sudah ketemu, bikin EA nya jadi lebih gampang
misalnya begini, gw mau bikin EA yang kayak di Bagian 2 - Contoh EA
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. TP nya 150 dan SL nya 100 pips
kalau di breakdown jadi 7 bagian tadi :
1) BuySignal : kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle
sebelumnya
2) SellSignal : kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle
sebelumnya
3) Tidak ada
4) Tidak ada
5) Lotnya otomatis diitung berdasarkan SL dan persen risiko.
6) Tidak pakai trail, jadi tidak ada
7) Posis baru dibuka kalau sedang tidak ada posisi, dan juga tidak trade di hari Jumat (gw tambahi
rulenya)
kira-kira source code nya jadi begini
code:
extern double RiskPercent=5;
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 (bolehTrade()) //kalau boleh trade
{
if (BuySignal() ) //kalau ada signal buy
{
OrderSend(Symbol(),OP_BUY,itungLot(),Ask,Slippage,Ask-
StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
}
else if (SellSignal() ) //kalau ada signal sell
{
OrderSend(Symbol(),OP_SELL,itungLot(),Bid,Slippage,Bid+StopLoss*Point,Bid-
TakeProfit*Point,txComment,MagicNumber);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
bool BuySignal()
{
//kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle sebelumnya
if (iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
return(false);
}
}
bool SellSignal()
{
//kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle sebelumnya
if (iClose(Symbol(),0,1) < iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
return(false);
}
}
bool bolehTrade()
{
//kalau jumat, EA ga trade ; atau kalau ada order terbuka, EA juga ga trade
if (DayOfWeek()==5 || OrdersTotal()>0) { return (false); } else { return(true); }
}
double itungLot()
{
//ini untuk itung lot secara otomatis berdasarkan SL dan persen risk
double xLots=0;
xLots=NormalizeDouble(AccountBalance()*RiskPercent/100 /StopLoss / 10,1);
return (xLots);
}
logikanya jadi rapi dan jelas...
oya, sekilas mengenai operator
|| berarti atau & berarti dan (nanti akan dijelaskan di bagian tentang operator)
EA ini kelihatannya simple sekali codingnya paling butuh 5-10 menit doank.... tapi kalau di backtest,
profitable lho (terlepas dari dradownnya yang gede)...
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah dari EMA 20 pada
candle 1, berarti terjadi cross
rsi1=iRSI(Symbol(),0,14,PRICE_CLOSE,1);
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah dari EMA 20 pada
candle 1, berarti terjadi cross
if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 && rsi1 > 70 )
{
//open sell......
}
gampang kan
untuk indikator-indikator lain seperti macd, par-sar, sto, envelope, dll bisa dibaca sendiri di
referencenya....
bahasan selanjutnya adalah membuat EA sederhana yang komplit (bisa dicompile & bisa jalan) (tapi
ga tau profitable atau ga...)
</bid-point*trailingstop)
Label: CARA BUAT ROBOT TRADING
//contoh :
A=1; //A sama dengan 1
A++;
Print (A); //saat ini A bernilai 2 (1+1)
A++;
Print (A); //saat ini A bernilai 3 (karena ditambah 1 lagi)
code:
B--; //sama kayak diatas, cuman dikurangi 1
B=1;
B--;
Print(B); //saat ini B nilainya 0
2. Assignment operator
yang umum dipakai cuma =
ada banyak sih, ada +=, -=, %= dll, tapi jarang dipakai & agak susah dipahami.. jadi saya jelasin di
lain waktu saja
code:
a=b*5; //masukkan nilai b dikali 5 ke a a+=5; //A sama dengan a+5 a-=5; //A sama dengan a-4
3. Relational operator (operator pembanding)
code:
== : sama
!= : tidak sama
< : lebih kecil dari
> : lebih besar dari
<= : lebih kecil dari atau sama dengan
>= : lebih besar dari atau sama dengan
contoh penerapan
code:
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
4. Operator Logical
cuma ada 3 yang penting
&& : dan
|| : atau
! : not
contoh penerapan :
code:
if (a==b && c
if (!a==b || c>=d) { } //jika a sama dengan b adalah salah (berarti a tidak sama dengan b) atau c lebih
besar dari atau sama dengan d
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).
Bagian 2 - 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
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
Sedikit penjelasan,
Code:
//+------------------------------------------------------------------+
//| ContohEA1.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()
{
//----
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)...
ehm, spreadnya lupa gw itung harusnya buy nya dapet di harga 1.7369 dan TP nya di 1.7519
ya tapi intinya kira2 gitu lah
coba kita telaah satu per satu bagiannya..... penjelasan di topic ini sekilas aja... detailnya nanti
akan dijelaskan di masing2 bagian.
Code:
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)
pada 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..
.........
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 dll
tapi ya itu EA paling sederhana, nantinya di bagian2 selanjutnya akan dijelaskan lebih detil
mengenai fungsi2nya... ….Tentunya di Posting saya Berikutnya !!
Semoga bermanfaat