• 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 :)
General chit-chat
Help Users
  • No one is chatting at the moment.

      Tutorial Contoh EA Martiangle

      Trancexe

      Active Member
      Credit Hunter
      Credits
      0
      permisi master master di sini.. minta ijin untuk share coding EA Martiangle.
      jujur ini bukan tulisan saya. tapi hanya copas dari forum sebelah.

      dalam sebuah EA martiangel ada tiga poin dasar.
      1. Fungsi Pemicu sebagai trigger OP pertama :Ini terserah strategi teman-teman, hanya untuk OP pertama saja. Misalnya teman-teman memakai cross 2 buah MA untuk OP buy atau sell.

      2. Fungsi Martingale : Fungsi ini memeriksa apakah ada OP yang salah ? Jika ya, maka akan dibuat OP baru searah dengan OP semula. Dengan lot yang digandakan.

      3. Fungsi Modifikasi TP : Di dalam fungsi ini, semua OP martingale akan dimodifikasi TP-nya.

      ==============================
      1. Fungsi Pemicu, terserah bagaimana logic yang mau di pake. bisa dengan MA, bisa instan OP, bisa dengan bermacam2 logic yang beredar di forum ini.

      2. Fungsi Martiangle
      Tugas fungsi ini adalah memeriksa apakah OP-nya salah arah. Jika salah arah, maka fungsi akan membuat satu OP lagi searah dengan sebelumnya, dengan lot yang sudah digandakan.
      Code:
      void GoMartingale()
      {
               int      iCount      =  0;
               double   LastOP      =  0;
               double   LastLots    =  0;
               bool     LastIsBuy   =  FALSE;
               int      iTotalBuy   =  0;
               int      iTotalSell  =  0;
               int      Spread=0;
         
               Spread= MarketInfo(Symbol(), MODE_SPREAD);
      
               
               for(iCount=0;iCount<OrdersTotal();iCount++)
               {
                         
                 OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);
                 
                 if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     if(LastOP==0) {LastOP=OrderOpenPrice();}
                     if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();}
                     if(LastLots<OrderLots()) {LastLots=OrderLots();}
                     LastIsBuy=TRUE;
                     iTotalBuy++;
                     
                     /* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
                     if(iTotalBuy==MaxTrade) {return(0);}
                 }
      
                 if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     if(LastOP==0) {LastOP=OrderOpenPrice();}
                     if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();}         
                     if(LastLots<OrderLots()) {LastLots=OrderLots();}
                     LastIsBuy=FALSE;
                     iTotalSell++;
                     
                     /* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
                     if(iTotalBuy==MaxTrade) {return(0);}
                 }
               
               }     
               
               /* Jika arah Price adalah DOWNTREND...., Periksa nilai Bid (*/
               if(LastIsBuy)
               {
                  if(Bid<=LastOP-(Spread*SetPoint)-(PipStep*SetPoint))
                  {
                     OrderSend(Symbol(), OP_BUY, Multiply*LastLots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);   
                     ModifyTP();
                     LastIsBuy=FALSE;
                     return(0);
                  }
               }
               /* Jika arah Price adalah Sell...., Periksa nilai Ask (*/
               else if(!LastIsBuy)
               {
                  if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint))
                  {
                     OrderSend(Symbol(), OP_SELL, Multiply*LastLots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);           
                     ModifyTP();
                     return(0);
                  }
               }
      
      }

      3. Funsi ModifyTP
      ungsi ModifyTP ini menyamakan TP di satu titik. Sehingga jika TP ini kena, maka semua OP martingale akan tertutup dengan hasil balance bertambah. Memang ada OP awal yang loss, tapi karena OP selanjutnya lot-nya ditambah, maka jika kena TP ini hasil akhirnya akan menambah balance.
      alternatif lain sebenernya bisa dengan membaca profit per OP, jadi nanti dibuat close sersuai order. biasanya ini TP in Money, tpi untuk case saat ini menggunakan TP in PIP

      Code:
      /*-- Fungsi ModifyTP ini untuk mengubah semua OP agar TP di titik yang sama --*/
      void ModifyTP()
      {
         int      iCount=0;
         double   NewTP=0;
             
              /*- Ambil nilai Take Profit dari Order terakhir -*/
               for(iCount=0;iCount<OrdersTotal();iCount++)
               {
                 
                 OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);
             
                 /*-- Kalau OP-nya adalah BUY, ambil nilai TP yang paling kecil. Jadikan TP bersama --*/
                 if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     if(NewTP==0) {NewTP=OrderTakeProfit();}
                     if(NewTP>OrderTakeProfit()) {NewTP=OrderTakeProfit();}
                     
                 }
                 
                 /*-- Kalau OP-nya adalah SELL, ambil nilai TP yang paling besar. Jadikan TP bersama --*/
                 if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     if(NewTP==0) {NewTP=OrderTakeProfit();}
                     if(NewTP<OrderTakeProfit()) {NewTP=OrderTakeProfit();}         
                 }
                           
               }
      
              /*- Ubah semua nilai OP TakeProfit dengan yang baru (2x lipat) -*/
               for(iCount=0;iCount<OrdersTotal();iCount++)
               {
                 
                 OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);
             
                 /*- Kalau semua OP adalah BUY, maka ubahlah TP mereka -*/
                 if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
                 }
                 
                 /*- Kalau semua OP adalah SELL, maka ubahlah TP mereka -*/
                 if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
                 {
                     OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
                 }             
               
               }       
      }


      ====================================================================
      Nah dari kode di atas. oleh si pemberi materi di buatlah kode utuh 1 ea.
      Kode ini saya modifikasi biar ada target Profit per Harinya.

      =====EDITED=====
      walah maksimal ternyata 10.000 karakter.. jadi saya ga bisa copas code nya di sini..
      silahkan download mq4 untuk jadi refrensi


      selamat mencoba
       

      Attachments

      There clearly was a similar issue could not enter in to a rut of work for pulling up a strategy. A buddy offered this http://option-strategies.org internet site to pick a suitable technique and I've opted for for themselves the perfect and effective naybolee. I am hoping I helped you together with your problem. Thank you for attention)))
       
      kenapa ya setiap saya pakai coding go martiangle tersebut selalu error di return, cara untuk mengatasinya gimana? trs kalau coding if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint)) nilai spread saya hilangkan maka ea lsg op dlm jmlah lsg banyak, Cara mengatasinya gimana ya master. Thx sebelumnya
       
      Ini EA nya masta Dwim di forum sebelah,Ane salut ma Masta Dwim,mau berbagi Ilmunya kepada para newbie seperti saya.
      Structurenya Bagus untuk bahan pembelajaran dan Simple mungkin memang tujuan Beliau Agar Mudah di pahami para newbie seperti saya.
      Jadi kalo ada yang Kurang selanjutnya tugas kitalah untuk menyempurnakanya.

      kenapa ya setiap saya pakai coding go martiangle tersebut selalu error di return, cara untuk mengatasinya gimana? trs kalau coding if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint)) nilai spread saya hilangkan maka ea lsg op dlm jmlah lsg banyak, Cara mengatasinya gimana ya master. Thx sebelumnya
      Mohon tunjukan kode penuhnya.kita sama2 belajar di sini,Siapa tahu saya bisa bantu
       
      saat di compile kok muncul keterangan seperti pada gambar
      ada solusi?
      http://prntscr.com/b3v1mz
      b3v1mz
       
      saat di compile kok muncul keterangan seperti pada gambar
      ada solusi?
      http://prntscr.com/b3v1mz
      b3v1mz
      ngak begitu berpengaruh gan tapi,menganggu juga bagi yang pengen make di real.

      Silahkan coba di rubah gan
      Code:
      bool res=OrderModify(blubblablubblablabla);
      
      bool ras=OrderSelect(otokotokblookotokotok);
      
      int ticket=OrderSend(buwahahahahahahahaha);
      
      void(){hahahahahahaha;
      hihihhihihihihih;
      hoooohohohohohoho;
      return;}
      siapa tahu berhasil gan :D:peace:.
       
      saat di compile kok muncul keterangan seperti pada gambar
      ada solusi?
      http://prntscr.com/b3v1mz
      b3v1mz
      ngak begitu berpengaruh gan tapi,menganggu juga bagi yang pengen make di real.

      Silahkan coba di rubah gan
      Code:
      bool res=OrderModify(blubblablubblablabla);
      
      bool ras=OrderSelect(otokotokblookotokotok);
      
      int ticket=OrderSend(buwahahahahahahahaha);
      
      void(){hahahahahahaha;
      hihihhihihihihih;
      hoooohohohohohoho;
      return;}
      siapa tahu berhasil gan :D:peace:.
       
      ngak begitu berpengaruh gan tapi,menganggu juga bagi yang pengen make di real.

      Silahkan coba di rubah gan
      Code:
      bool res=OrderModify(blubblablubblablabla);
      
      bool ras=OrderSelect(otokotokblookotokotok);
      
      int ticket=OrderSend(buwahahahahahahahaha);
      
      void(){hahahahahahaha;
      hihihhihihihihih;
      hoooohohohohohoho;
      return;}
      siapa tahu berhasil gan :D:peace:.

      sudah tak coba malah nggak bisa Open Posisi
       
      kenapa ya setiap saya pakai coding go martiangle tersebut selalu error di return, cara untuk mengatasinya gimana? trs kalau coding if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint)) nilai spread saya hilangkan maka ea lsg op dlm jmlah lsg banyak, Cara mengatasinya gimana ya master. Thx sebelumnya
      error return karena variabel nya int..
      pake void.
      cth
      Code:
      int Modipi()
      {
      
      for (int c = OrdersTotal() ; c >= 0; c--)
         {
            if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()==0)
            {
                  if(OrderType() == OP_BUY)  {}
            }
         }
         return(0);
      }
      di akhir variabel sy ksh return(0) krn int output nya berbentuk angka.
      kl sy ganti void
      Code:
      void Modipi()
      {
      
      for (int c = OrdersTotal() ; c >= 0; c--)
         {
            if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()==0)
            {
                  if(OrderType() == OP_BUY)  {}
            }
         }
      }
      bs g perlu pake return(0)

      ini hanya contoh

      Coba LastOP dii dentifikasi dulu harganya. & mending dibedakan LastOP buy & Sell biar g rancu nantinya kl mau develop EA..
      Code:
      for (int a = 0; a < OrdersTotal(); a++)
         {
            if(OrderSelect(a, SELECT_BY_POS,MODE_TRADES) == true)
            {
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() == 0)
               {
                     if(OrderType()==OP_BUY){double LastOPBuy =OrderOpenPrice();} 
                     if(OrderType()==OP_SELL){double LastOPSell = OrderOpenPrice();}
               }
            }
         }
       
      error return karena variabel nya int..
      pake void.
      cth
      Code:
      int Modipi()
      {
      
      for (int c = OrdersTotal() ; c >= 0; c--)
         {
            if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()==0)
            {
                  if(OrderType() == OP_BUY)  {}
            }
         }
         return(0);
      }
      di akhir variabel sy ksh return(0) krn int output nya berbentuk angka.
      kl sy ganti void
      Code:
      void Modipi()
      {
      
      for (int c = OrdersTotal() ; c >= 0; c--)
         {
            if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()==0)
            {
                  if(OrderType() == OP_BUY)  {}
            }
         }
      }
      bs g perlu pake return(0)

      ini hanya contoh

      Coba LastOP dii dentifikasi dulu harganya. & mending dibedakan LastOP buy & Sell biar g rancu nantinya kl mau develop EA..
      Code:
      for (int a = 0; a < OrdersTotal(); a++)
         {
            if(OrderSelect(a, SELECT_BY_POS,MODE_TRADES) == true)
            {
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() == 0)
               {
                     if(OrderType()==OP_BUY){double LastOPBuy =OrderOpenPrice();}
                     if(OrderType()==OP_SELL){double LastOPSell = OrderOpenPrice();}
               }
            }
         }
      returnta harus bool.. Alternatif kya ini. Pake if

      Soalnya tutor diatas tu bhs mq4 lama
       
      Kalau untuk averaging (ketika profit nambah op) bagaimana koding nya om,,newbie
      logika di atas tu bisa di pakai. cuma sedikit penyesuaian.
      terutama di logika untuk open order berikutnya.
      Code:
      if(iTrend==BUY) //Bila trend dideteksi adalah BUY, maka buat martingale BUY lagi
         {
                  if(Bid<=LastPosition-(Spread*SetPoint)-(PipStep*SetPoint))
                  {
                     iTicket=OrderSend(Symbol(), OP_BUY, NormalizeDouble(Multiply*LastLotSize,2), Ask, Slippage, 0, Ask+TakeProfit*SetPoint, NULL, Magic,0,Green);   
                     ModifyTP();
                     return;
                  }
         
         }
         else if(iTrend==SELL) //Bila trend dideteksi adalah SELL, maka buat martingale SELL lagi
         {
                  if(Ask>=LastPosition+(Spread*SetPoint)+(PipStep*SetPoint))
                  {
                     iTicket=OrderSend(Symbol(), OP_SELL, NormalizeDouble(Multiply*LastLotSize,2), Bid, Slippage, 0, Bid-TakeProfit*SetPoint, NULL, Magic,0,Red);   
                     ModifyTP();
                     return;
                  } 
         }

      perhitungan di situ kan membaca nilai pip minus dari lasti open order.
      tinggal kita balik aja biar membaca profit dalam pip
       
      Terima ka
      logika di atas tu bisa di pakai. cuma sedikit penyesuaian.
      terutama di logika untuk open order berikutnya.
      Code:
      if(iTrend==BUY) //Bila trend dideteksi adalah BUY, maka buat martingale BUY lagi
         {
                  if(Bid<=LastPosition-(Spread*SetPoint)-(PipStep*SetPoint))
                  {
                     iTicket=OrderSend(Symbol(), OP_BUY, NormalizeDouble(Multiply*LastLotSize,2), Ask, Slippage, 0, Ask+TakeProfit*SetPoint, NULL, Magic,0,Green);  
                     ModifyTP();
                     return;
                  }
        
         }
         else if(iTrend==SELL) //Bila trend dideteksi adalah SELL, maka buat martingale SELL lagi
         {
                  if(Ask>=LastPosition+(Spread*SetPoint)+(PipStep*SetPoint))
                  {
                     iTicket=OrderSend(Symbol(), OP_SELL, NormalizeDouble(Multiply*LastLotSize,2), Bid, Slippage, 0, Bid-TakeProfit*SetPoint, NULL, Magic,0,Red);  
                     ModifyTP();
                     return;
                  }
         }

      perhitungan di situ kan membaca nilai pip minus dari lasti open order.
      tinggal kita balik aja biar membaca profit dalam pip
      terima kasih om,,,,biar saya pahami dan saya coba dulu,,nnti nanya lagi hehe,,berguna banget ne om,,,
       
      Back
      Top