Saturday 19 January 2013

Study Kasus cross MA, tak bisa di tester

Pak dwi, sbnrnya aku cuma ganti SMA 4 dan 8 dengan EMA 4 dan 50. Coba pak dwi cek kode nya dibawah ini.. kenapa tak bisa di tester ?

//+------------------------------------------------------------------+
//| Tes ea.mq4 |
//| Zefanya |
//| |
//+------------------------------------------------------------------+
#property copyright "Zefanya"
#property link ""


extern int TakeProfit = 30;
extern int StopLoss = 20;
extern int Slippage = 3;

extern int EMA1Periode = 4;
extern int EMA2Periode = 50;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start ()
{
//----
double dMA1, dMA2;

Comment ("Tes ea(c) Zefanya");

dMA1=iMA(NULL,0,EMA1Periode,0,MODE_EMA,PRICE_CLOSE ,0);
dMA1=iMA(NULL,0,EMA2Periode,0,MODE_EMA,PRICE_CLOSE ,0);

dMA1=iMA(NULL,0,EMA1Periode,0,MODE_EMA,PRICE_CLOSE ,1);
dMA1=iMA(NULL,0,EMA2Periode,0,MODE_EMA,PRICE_CLOSE ,1);

if ( (dMA1 > dMA2) && (dMA1 < dMA2) )
if ( (dMA1 < dMA2) && (dMA1 > dMA2) )

if(OrdersTotal()<1) // cuma boleh ada satu OP pada satu saat saja
{

if ((dMA1 > dMA2) && (dMA1< dMA2))
{
// Lakukan perintah BUY disini
OrderSend(Symbol(),OP_BUY, 1.0, Ask, Slippage,Bid-StopLoss*TakeProfit, Ask+TakeProfit*Point, 0);
}
else if ( (dMA1 < dMA2) && (dMA1 > dMA2) ) // memotong dari atas ke bawah
{
// Lakukan perintah SELL disini
OrderSend(Symbol(),OP_SELL, 1.0, Bid, Slippage, Ask+StopLoss*TakeProfit, Bid-TakeProfit*Point, 0);
}

}

//----
return(0);
}

//+------------------------------------------------------------------+


==========================================


OK mantap. Zefanya sudah memposting code buatan sendiri.

Coba kita lihat ya. Sebabnya code ini tidak jalan di Strategy Tester adalah karena code di bawah ini :

Spoiler Spoiler:



Jadi disana, satu variabel dMA1 diberi nilai sebanyak 4 kali. Nah supaya logic jalan, kita perlu 4 variabel yang kita bandingkan satu sama lain. Jadi saya buat variabel :

- dMA1now = untuk melihat nilai MA1 (4) saat ini.
- dMA2now = untuk melihat nilai MA2 (50) saat ini.
- dMA1before = untuk melihat nilai MA1 (4) satu candle yang lalu.
- dMA2before = untuk melihat nilai MA2 (50) satu candle yang lalu

Di bawah ini adalah kode Zefanya yang sudah saya perbaiki, harap dilihat. Lalu dibandingkan dengan milik Zefanya sebelumnya :

Code:
//+------------------------------------------------------------------+
//| Tes ea.mq4 |
//| Zefanya |
//| |
//+------------------------------------------------------------------+
#property copyright "Zefanya"
#property link ""


extern int TakeProfit = 30;
extern int StopLoss = 20;
extern int Slippage = 3;

extern int EMA1Periode = 4;
extern int EMA2Periode = 50;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start ()
{
//----
   double dMA1now, dMA2now, dMA1before, dMA2before;

   Comment ("Tes ea(c) Zefanya");

   dMA1now=iMA(NULL,0,EMA1Periode,0,MODE_EMA,PRICE_CLOSE ,0);
   dMA2now=iMA(NULL,0,EMA2Periode,0,MODE_EMA,PRICE_CLOSE ,0);

   dMA1before=iMA(NULL,0,EMA1Periode,0,MODE_EMA,PRICE_CLOSE ,1);
   dMA2before=iMA(NULL,0,EMA2Periode,0,MODE_EMA,PRICE_CLOSE ,1);

/* Code di bawah ini tidak perlu */
//if ( (dMA1 > dMA2) && (dMA1 < dMA2) )
//if ( (dMA1 < dMA2) && (dMA1 > dMA2) )

if(OrdersTotal()<1) // cuma boleh ada satu OP pada satu saat saja
{

if ((dMA1now > dMA2now) && (dMA1before< dMA2before)) 
{
// Lakukan perintah BUY disini
OrderSend(Symbol(),OP_BUY, 1.0, Ask, Slippage,Bid-StopLoss*TakeProfit, Ask+TakeProfit*Point, 0);
}
else if ( (dMA1now < dMA2now) && (dMA1before > dMA2before) ) // memotong dari atas ke bawah
{
// Lakukan perintah SELL disini
OrderSend(Symbol(),OP_SELL, 1.0, Bid, Slippage, Ask+StopLoss*TakeProfit, Bid-TakeProfit*Point, 0);
}

}

//----
return(0);
}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Ini hasilnya ketika saya backtesting. Jalan tuh, dan profit !  Hehehe.
Semoga membantu

Spoiler Spoiler:

Last edited by DwiM; 11-27-2010 at 06:27 PM.

No comments:

Post a Comment