1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. 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

Tutorial Contoh EA Martiangle

Discussion in 'Belajar MQL dari Nol' started by Trancexe, 06 Mar 2016.

  1. Trancexe

    Trancexe Active Member Credit Hunter

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

    Attached Files:

    • Like Like x 3
  2. shanker

    shanker Member Credit Hunter

    Equity
    Credit
    Ref Point
    lengkap ini jadi tertarik tp masih belom paham bahasanya :oops:
     
  3. Trancexe

    Trancexe Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    mari belajar. saya juga belum banyak tau. makanya seneng klo ada master2 yang mau ngoreksi :D
     
  4. inunuo

    inunuo Member Credit Hunter

    Equity
    Credit
    Ref Point
    mantap ea ni
     
  5. Babenchuk

    Babenchuk New Member

    Equity
    Credit
    Ref Point
    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)))
     
    • Bad Spelling Bad Spelling x 1
  6. padhangmangsa

    padhangmangsa New Member

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

    rahmadjatayu Member Credit Hunter

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

    Mohon tunjukan kode penuhnya.kita sama2 belajar di sini,Siapa tahu saya bisa bantu
     
  8. Ashstar087

    Ashstar087 New Member

    Equity
    Credit
    Ref Point
    Mohon belajar
     
  9. Adi Sucipto

    Adi Sucipto New Member

    Equity
    Credit
    Ref Point
  10. rahmadjatayu

    rahmadjatayu Member Credit Hunter

    Equity
    Credit
    Ref Point
    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:.
     
  11. rahmadjatayu

    rahmadjatayu Member Credit Hunter

    Equity
    Credit
    Ref Point
    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:.
     
  12. Adi Sucipto

    Adi Sucipto New Member

    Equity
    Credit
    Ref Point
    sudah tak coba malah nggak bisa Open Posisi
     
  13. Adhiebae

    Adhiebae Member Credit Hunter

    Equity
    Credit
    Ref Point
    Ajari aku master
    tertarik belajar buat EA tapi nggak ada yang ngajarin
     
  14. amtwoxtwo

    amtwoxtwo Member Credit Hunter

    Equity
    Credit
    Ref Point
    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();}
             }
          }
       }
     
  15. Trancexe

    Trancexe Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    returnta harus bool.. Alternatif kya ini. Pake if

    Soalnya tutor diatas tu bhs mq4 lama
     
  16. argatafx

    argatafx Member Credit Hunter

    Equity
    Credit
    Ref Point
    Kalau untuk averaging (ketika profit nambah op) bagaimana koding nya om,,newbie
     
  17. Trancexe

    Trancexe Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    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
     
  18. argatafx

    argatafx Member Credit Hunter

    Equity
    Credit
    Ref Point
    Terima ka
    terima kasih om,,,,biar saya pahami dan saya coba dulu,,nnti nanya lagi hehe,,berguna banget ne om,,,
     
  19. Trancexe

    Trancexe Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    roger. klo bisa jawab saya jawab. klo nda tanya ke sticky threadnya om hendro :D
     
  20. faza85

    faza85 New Member

    Equity
    Credit
    Ref Point
    master Trancexe , kalo martingle/ea stop setelah clear all position dan op lagi jam 00 waktu broker bagaimana master ?
     

Share This Page