Beranda > Membuat robot, Tips & Trick > Tutorial Tahapan Proses Pembuatan Robot Forex/Ea (Expert Advisor)

Tutorial Tahapan Proses Pembuatan Robot Forex/Ea (Expert Advisor)

Berikut ini adalah tutorial proses lengkap pembuatan Robot Forex / EA ( expert advisor ):

1. Langkah pertama buka MetaEditor.exe
2. Pilih New ( Sebuah menu yang ber bentuk tanda + berwarna hijau ) yang terletak di sebelah kanan atas.
3. Pilih Expert Advisor.

4. Isi seluruh daftar yang diperlukan, klik finish.

5. Setelah itu anda akan dihadapkan dengan bentuk tampilan seperti dibawah ini:

6. Hapus bersih semua kode tersebut dan ganti dengan kode berwarna merah dibawah ini:

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright “Copyright © Kampung Perawan”
#property link      “http://www.kampungperawan.blogspot.com”

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.2;
extern int Slippage = 5;
extern bool UseStopLoss = True;
extern int StopLoss = 100;
extern bool UseTakeProfit = False;
extern int TakeProfit = 0;
extern bool UseTrailingStop = False;
extern int TrailingStop = 0;

int BarCount;
int Current;
bool TickCheck = False;

int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}

int deinit() {
return(0);
}

int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

double Buy1_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy2_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell2_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseBuy1_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseBuy2_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseBuy2_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double CloseSell2_1 = iMA(NULL, 0, 14, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double CloseSell2_2 = iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

if (CloseBuy1_1 > CloseBuy1_2 && CloseBuy2_1 < CloseBuy2_2) Order = SIGNAL_CLOSEBUY;

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail(“[Signal Alert]“, “[" + Symbol() + "] ” + DoubleToStr(Bid, Digits) + ” Close Buy”);
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}

if(UseTrailingStop && TrailingStop > 0) {
if(Bid – OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid – Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid – Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {

if (CloseSell1_1 < CloseSell1_2 && CloseSell2_1 > CloseSell2_2) Order = SIGNAL_CLOSESELL;

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail(“[Signal Alert]“, “[" + Symbol() + "] ” + DoubleToStr(Ask, Digits) + ” Close Sell”);
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}

if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() – Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

if (Buy1_1 < Buy1_2 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Sell2_1 < Sell2_2) Order = SIGNAL_SELL;

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {

if (AccountFreeMargin() < (1000 * Lots)) {
Print(“We have no money. Free Margin = “, AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask – StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, “Buy(#” + MagicNumber + “)”, MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(“BUY order opened : “, OrderOpenPrice());
if (SignalMail) SendMail(“[Signal Alert]“, “[" + Symbol() + "] ” + DoubleToStr(Ask, Digits) + ” Open Buy”);
} else {
Print(“Error opening BUY order : “, GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {

if (AccountFreeMargin() < (1000 * Lots)) {
Print(“We have no money. Free Margin = “, AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid – TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, “Sell(#” + MagicNumber + “)”, MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(“SELL order opened : “, OrderOpenPrice());
if (SignalMail) SendMail(“[Signal Alert]“, “[" + Symbol() + "] ” + DoubleToStr(Bid, Digits) + ” Open Sell”);
} else {
Print(“Error opening SELL order : “, GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}

7. Kode diatas adalah kerangka dari robot forex / EA ( expert advisor ) dengan cara kerja sebagai berikut:

Open Buy: Garis SMA 28 memotong dari atas garis EMA 14.
Close Buy: Garis SMA 28 memotong dari bawah EMA 14.

Open Sell: Garis EMA 14 memotong dari atas garis SMA 28.
Close Sell: Garis EMA 14 memotong dari bawah garis SMA 28.

Anda dapat merubah angka moving average 14 atau 28 sesuai gaya trading anda. Semoga sukses!

About these ads
  1. Belum ada komentar.
  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

%d bloggers like this: