1. 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 :)
    Dismiss Notice

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

Discussion in 'Belajar MQL dari Nol' started by widyantodedy, 02 Jul 2019.

  1. widyantodedy

    widyantodedy New Member Credit Hunter

    Equity
    Credit
    Ref Point
    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: 02 Jul 2019
  2. SoeHoe

    SoeHoe Administrator Moderator

    Equity
    Credit
    Ref Point
    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
     
  3. widyantodedy

    widyantodedy New Member Credit Hunter

    Equity
    Credit
    Ref Point
    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
     
  4. SoeHoe

    SoeHoe Administrator Moderator

    Equity
    Credit
    Ref Point
    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.
     
  5. widyantodedy

    widyantodedy New Member Credit Hunter

    Equity
    Credit
    Ref Point

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

Share This Page