• Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)

[ASK] Mengapa setiap tick EA selalu open order terus?

widyantodedy

New Member
Credit Hunter
Credits
0
Mohon pencerahan para master, maklum baru belajar dari SoeHoe masih 3 harian

Saya bingung bagaimana cara agar EA tidak open lagi jika sudah terjadi open ?

Rule nya begini : Pada saat Candle baru buka (harga open), maka
- Jika harga berada diatas harga open pertama kali lebih dari atau sama dengan 10 pip (misal), dan harga kembali lagi ke harga open, maka EA open SELL di harga Open.

sebaliknya
- Jika harga berada dibawah harga open pertama kali lebih dari atau sama dengan 10 pip (misal), dan harga kembali lagi ke harga open, maka EA open BUY di harga Open.

Kira2 ini yang saya tulis dengan susah payah hahaha... maklum masih belajar dari nol

Code:
double pOpen = iOpen (Symbol(),0,0);
double pHigh = iHigh (Symbol(),0,0);
double pLow = iLow (Symbol(),0,0);
//double pClose = iClose (Symbol(),0,0);
double pAsk = Ask ;
double pBid = Bid ;

int RentangHigh = DoubleToStr ((pHigh - pOpen)/Point, 0 );
int RentangLow = DoubleToStr ((pOpen - pLow) / Point, 0 );

int PipAchieve = 10 ;


int  QnSignal () {

int nSignal ;
if (RentangLow >= PipAchieve && pAsk == pOpen && RentangHigh < PipAchieve) nSignal = 1 ;
if (RentangHigh >= PipAchieve && pBid == pOpen && RentangLow < PipAchieve) nSignal = 2 ;
return (nSignal) ;
}


double Lots = 0.01 ;




//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

QnSignal () ;

if (QnSignal () == 2 && QnSignal() != 0)
    int ticket = OrderSend (Symbol(),OP_SELL,Lots,Bid,3,0,0,NULL,123,0,Red);

if (QnSignal () == 1 && QnSignal() != 0)
    int ticket = OrderSend (Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,123,0,Blue);

  

/*
Comment ("\nHarga Open  = " + DoubleToStr (pOpen,4) +
         "\nHarga High   = " + DoubleToStr (pHigh,4) +
         "\nHarga Low   = " + DoubleToStr (pLow,4) +
         "\nHarga Close = " + DoubleToStr (pClose,4) +
         "\nHarga Ask    = " + DoubleToStr (pAsk,4) +
         "\nHarga Bid    = " + DoubleToStr (pBid,4)+
         "\nRentang High = " + RentangHigh +
         "\nRentang Low = " + RentangLow +
         "\nSignal Order = " + QnSignal ()
         ) ;
*/




  
  }
//+------------------------------------------------------------------+

Masalahnya di script ini jika harga kadang 2x atau 3x balik ke open, selalu EA open order lagi... bagaimana cara mengatasi ini ?

Kemudian mengapa EA ini tidak bisa berjalan di backtest? sedangkan di forward test bisa.. bagaimana cara agar EA bisa kita jalankan di backtest?

Terima Kasih, dan mohon bimbingan dari para master sekalian.
 
Last edited by a moderator:
tolong copikan semua codenya, agar lbh lengkap dan lebih mudah dikoresksi. Quote sebagai code agar lebih baik tampilannya, seperti post mas yg diatas sudah saya sesuaikan sebagai code.
upload_2019-7-2_16-9-11.png
 

Attachments

  • upload_2019-7-2_16-9-11.png
    upload_2019-7-2_16-9-11.png
    41.5 KB · Views: 141
tolong copikan semua codenya, agar lbh lengkap dan lebih mudah dikoresksi. Quote sebagai code agar lebih baik tampilannya, seperti post mas yg diatas sudah saya sesuaikan sebagai code.
View attachment 90376

Code:
//+------------------------------------------------------------------+
//|                                                   Belajar EA.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
#property strict


double pOpen = iOpen (Symbol(),0,0);
double pHigh = iHigh (Symbol(),0,0);
double pLow = iLow (Symbol(),0,0);
//double pClose = iClose (Symbol(),0,0);
double pAsk = Ask ;
double pBid = Bid ;

int RentangHigh = DoubleToStr ((pHigh - pOpen)/Point, 0 );
int RentangLow = DoubleToStr ((pOpen - pLow) / Point, 0 );

int PipAchieve = 10 ;


int  QnSignal () {

int nSignal ;
if (RentangLow >= PipAchieve && pAsk == pOpen && RentangHigh < PipAchieve) nSignal = 1 ;
if (RentangHigh >= PipAchieve && pBid == pOpen && RentangLow < PipAchieve) nSignal = 2 ;
return (nSignal) ;
}


double Lots = 0.01 ;




//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---


   
//---
   return(INIT_SUCCEEDED);
  }
 
 
 
 
 
 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
 
 
 
 
 
 
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---


QnSignal () ;

if (QnSignal () == 2 && QnSignal() != 0)
    int ticket = OrderSend (Symbol(),OP_SELL,Lots,Bid,3,0,0,NULL,123,0,Red);

if (QnSignal () == 1 && QnSignal() != 0)
    int ticket = OrderSend (Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,123,0,Blue);

   

/*
Comment ("\nHarga Open  = " + DoubleToStr (pOpen,4) +
         "\nHarga High   = " + DoubleToStr (pHigh,4) +
         "\nHarga Low   = " + DoubleToStr (pLow,4) +
         "\nHarga Close = " + DoubleToStr (pClose,4) +
         "\nHarga Ask    = " + DoubleToStr (pAsk,4) +
         "\nHarga Bid    = " + DoubleToStr (pBid,4)+
         "\nRentang High = " + RentangHigh +
         "\nRentang Low = " + RentangLow +
         "\nSignal Order = " + QnSignal ()
         ) ;
*/

   
  }
//+------------------------------------------------------------------+

Ini semua, memang baru segini, hehehe.. belum bisa lanjut lagi gan, bener2 step by step..

maafkan kebodohan saya SoeHoe hahaha
 
Saya sudah check codenya. Karena terlalu banyak salahnya maka saya anjurkan agar lebih baik belajar dari dasar yg paling dasar aja, yaitu tentang variable. karena mas masih salah dalam penulisan variable. Dan juga penggunaan variable tersebut di dalam fungsi. Di sub forum Belajar membuat Robot ini bisa mas cek pelajaran pertama, tentang variable & logika dasar, dan pelajaran tentang fungsi.

Usaha mas membuat EA di atas sudah bagus. Jika mas mau lebih bersabar belajar dari yg paling dasar maka mas akan bisa membuat EA.

Variable berikut ini harusnya ada di bagian OnTick atau di bagian fungsi karena nilai dari variable tersebut harus selalu terupdate. Sedangkan yg mas lakukan mas buat di bagian global variable sehingga tidak akan selalu berubah sesuai dengan pergerakan harga. Harusnya bisa seperti ini di dalam fungsi:
Code:
int  QnSignal () {
  double pOpen = iOpen (Symbol(),0,0);
  double pHigh = iHigh (Symbol(),0,0);
  double pLow = iLow (Symbol(),0,0);
  double pClose = iClose (Symbol(),0,0);
  double pAsk = Ask ;
  double pBid = Bid ;
   
  int RentangHigh = DoubleToStr ((pHigh - pOpen)/Point, 0 );
  int RentangLow = DoubleToStr ((pOpen - pLow) / Point, 0 );
   
  int nSignal ;
  if (RentangLow >= PipAchieve && pAsk == pOpen && RentangHigh < PipAchieve) nSignal = 1 ;
  if (RentangHigh >= PipAchieve && pBid == pOpen && RentangLow < PipAchieve) nSignal = 2 ;
  return (nSignal) ;
}
Tetapi jika mas ingin agar informasi harga ditampilkan maka mas harus buat bagian deklarasi variable pOpen dll di bagian OnTick.

Selanjutnya mas memanggil fungsi QnSignal () ; tanpa tujuan, sehingga mungkin mas masih blm paham cara memanggil fungsi. Itu sebabnya mas lebih baik tonton dulu aja pelajarannya. jika ada pertanyaan nanti bisa ditanyakan setelah pelajari video tutorialnya dengan teliti.
 
Saya sudah check codenya. Karena terlalu banyak salahnya maka saya anjurkan agar lebih baik belajar dari dasar yg paling dasar aja, yaitu tentang variable. karena mas masih salah dalam penulisan variable. Dan juga penggunaan variable tersebut di dalam fungsi. Di sub forum Belajar membuat Robot ini bisa mas cek pelajaran pertama, tentang variable & logika dasar, dan pelajaran tentang fungsi.

Usaha mas membuat EA di atas sudah bagus. Jika mas mau lebih bersabar belajar dari yg paling dasar maka mas akan bisa membuat EA.

Variable berikut ini harusnya ada di bagian OnTick atau di bagian fungsi karena nilai dari variable tersebut harus selalu terupdate. Sedangkan yg mas lakukan mas buat di bagian global variable sehingga tidak akan selalu berubah sesuai dengan pergerakan harga. Harusnya bisa seperti ini di dalam fungsi:
Code:
int  QnSignal () {
  double pOpen = iOpen (Symbol(),0,0);
  double pHigh = iHigh (Symbol(),0,0);
  double pLow = iLow (Symbol(),0,0);
  double pClose = iClose (Symbol(),0,0);
  double pAsk = Ask ;
  double pBid = Bid ;
  
  int RentangHigh = DoubleToStr ((pHigh - pOpen)/Point, 0 );
  int RentangLow = DoubleToStr ((pOpen - pLow) / Point, 0 );
  
  int nSignal ;
  if (RentangLow >= PipAchieve && pAsk == pOpen && RentangHigh < PipAchieve) nSignal = 1 ;
  if (RentangHigh >= PipAchieve && pBid == pOpen && RentangLow < PipAchieve) nSignal = 2 ;
  return (nSignal) ;
}
Tetapi jika mas ingin agar informasi harga ditampilkan maka mas harus buat bagian deklarasi variable pOpen dll di bagian OnTick.

Selanjutnya mas memanggil fungsi QnSignal () ; tanpa tujuan, sehingga mungkin mas masih blm paham cara memanggil fungsi. Itu sebabnya mas lebih baik tonton dulu aja pelajarannya. jika ada pertanyaan nanti bisa ditanyakan setelah pelajari video tutorialnya dengan teliti.


Wah mantap, oke siap SoeHoe, makin semangat saya untuk mempelajari pembuatan EA ini... thank you
 
Back
Top