Proses Membuat Robot Forex / EA ( Expert Advisor )

Artikel ini adalah lanjutan dari artikel sebelumnya, yaitu Cara Membuat Robot Forex / EA ( Expert Advisor ).
Jika anda merasa bingung dengan proses pembuatan robot forex pada Link yang saya tunjukkan di artikel sebelumnya, saya berharap artikel ini dapat membantu anda. 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 pink dibawah ini:
  
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                Forex Fighter.mq4 |
//|                                      Kampungperawan.blogspot.com |
//|                                                                  |
//|                                                                  |
//|      CARA MENGGUNAKAN FOREX FIGHTER:                             |
//|      1. Currency: EUR/USD                                        |
//|      2. Time frame: D1                                           |  
//|      3. Leverage 1:500                                           |
//|      4. Lots: 0.2 / Margin 2500                                  |  
//|                                                                  |
//|      TIPS MENGGUNAKAN FOREX FIGHTER:                             |  
//|      1. Robot harus online 24 jam                                |
//|      2. Jangan ada campur tangan manusia dalam                   |
//|         trading                                                  |
//|      3. Jika terjadi loss yang berulang - ulang itu wajar,       |
//|         karena robot akan mengembalikanya dengan profit yang     |
//|         lebih besar                                              |   
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#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!

Artikel Menarik Lainnya



17 Komentar:

Anonim mengatakan...

maaf gan mau tanya ni. ane mau ngubah time frame itu. mau saya ubah ke time frame M15. gimana caranya gan... trim's.

Anonim mengatakan...

Saya buat ea dr ea generator tapi ngak puas dengan hasilnya, ada ngak yah yang bisa untuk modifikasi ea saya,

Silahkan hub saya di sstap1@yahoo.com

Anonim mengatakan...

mohon infonya untuk merubah time frame yang lebih cepat misal M5 atau M1. bales di maryoko@rocketmail.com thanks

awan mengatakan...

wah =,=a kog uangel
mending manualan ajadeh daru kurs EUR/USD dikit dikit yg penting gratsis mumpung dapet high range :D

Anonim mengatakan...

tradingnnya diman seh ???

JAYAVO mengatakan...

Thq infona gan!

Sandi Prayoga mengatakan...

Hemm... untuk driver softwarenya dimana?
tunggu kirimannya sandyprayogha@gmail.com

Anonim mengatakan...

bisa bantu nyusun EA g? saya punya kodenya tapi belum rapi, tapi kalau bisa rapi mantap ni...
sangat bertrims skali kalau ada yang mau bantu dan kirimkan ke irgunata@yahoo.co.id

ibfxscalper mengatakan...

Saya newbi dalam dunia forex. Selama ini sy selalu manual. Untuk menentukan OP,saya hanya melihat zigzag,fractal,parabolik dan signal stochastic. Nah saya ingin membuat EA nya,bisa bantu saya? trims.. ibharyanto@ymail.com

Anonim mengatakan...

masih bingung nih gmn krjnya,.

Dr. J mengatakan...

untuk ganti periode MA yang digunakan caranya gimana gan?

Anonim mengatakan...

Agan yg baik hati..Apa Robot ini bisa jalan di Market Execution?
Seperti pertanyaan diatas. Gimana caranya untuk merubah ke M5 ato M15, M30. Bisa direply ke matalilah05@yahoo.com
Thanks berat ya...

Anonim mengatakan...

sofware apa yang harus digunakan untuk membuat robot,,,????

audi mengatakan...

gan ane kok belum jelas betul... terus yng di maksud buka MetaEditor.exe itu dimana letaknya gan..... tolong di bantu gan..

hamdan taufiq mengatakan...

siip deh,,,,trims ya infonya,,, bermanfaat banget...

Adi Bleang mengatakan...

mantab gan..!! ijin coba dulu euiy.. hahaha

Rezeki mengatakan...

Maaf ya, tidak di minta, cuma nolong, MetaEditor.exe itu cuba buka MTQ4 klik Tools/MetaQuotes Language Editors

Poskan Komentar

 
Lentera Merah - Tentang sesuatu dan peristiwa di sekitar kita Website connection - All right reserved powered by Blogger