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

Tanya Jawab MQL

Discussion in 'Belajar MQL dari Nol' started by HendroFX, 09 Apr 2015.

  1. mastemon

    mastemon New Member Credit Hunter

    Equity
    Credit
    Ref Point
    gan, mohon bantuannya, saya baru belajar coding.
    ada beberapa yang perlu saya tanyakan.
    1. apabila ea open buy, maka secara bersamaan ea open pending buy dan sell stop secara bersamaan.
    2. apabila po buystop tereksekusi, maka ea akan buka po sellstop.

    itu perintahnya gimana ya gan?
     
  2. mahoo bar

    mahoo bar Member Credit Hunter

    Equity
    Credit
    Ref Point
    secara garis besar seperti ini om
    Code:
    int ticket;
    ticket= OrderSend(Symbol(),OP_BUY,Lot,ask,slippage,SL,TP,comment,magic);
    kl om ketik OrderSend di Metaeditor kan akan muncul otomatis urutan formatnya yg benar

    Silahkan dicoba om, semangat terus om belajarnya
     
    • Like Like x 1
  3. mastemon

    mastemon New Member Credit Hunter

    Equity
    Credit
    Ref Point
    semalem saya mencoba dan terus mencoba, akhirnya sudah bisa om untuk buka po secara bersamaan dengan op.

    namun sekarang yang saya bingungkan ini om.
    - apabila salah satu po tereksekusi, maka po yang tidak tereksekusi akan dihapus, lalu buka po lagi dengan lot yang baru.

    itu clue petintahnya gimana om?
     
  4. mahoo bar

    mahoo bar Member Credit Hunter

    Equity
    Credit
    Ref Point
    Mungkin bisa dicoba dihitung jumlah ordernya om pake ordertotal
     
    • Like Like x 1
  5. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    ini klunya, Jika Jumlah OpenOrder= 1(buat fungsi untuk menghitung Open order), maka delete PO dengan nomer tiketnya, lalu buka PO lagi dengan lot baru
     
    • Like Like x 1
  6. mastemon

    mastemon New Member Credit Hunter

    Equity
    Credit
    Ref Point
    om mohon koreksinya om.
    ini saya lagi belajar bikin ea dengan system inti begini.
    1. apabila ea OP, maka secara bersamaan ea buka OP buy dan sell stop.
    2. apabila salah satu PO tersentuh, maka PO yang tidak tersentuh akan dihapus, dan buka PO baru dg lot baru.
    3. semua TP dan SL mengikuti OP yang awal.

    untuk yang nomer 2, saya sudah coba dan belum sesuai om
    mohon dikoreksi ya om, mana yang harus diperbaiki, sebelum saya lanjut mempelajari ordermodify.

    Code:
    //+------------------------------------------------------------------+
    //|                                               EA belajar.mq4 |
    //|                                                         Mastemon |
    //|                                        facebook.com/zahrul.falah |
    //+------------------------------------------------------------------+
    #property copyright "Mastemon"
    #property link      "facebook.com/zahrul.falah"
    #property version   "1.00"
    #property strict
    
    //+------------------------------------------------------------------+
    //| External Parameter                                               |
    //+------------------------------------------------------------------+
    extern   double   Lots        =0.01;
    extern   int      TakeProfit  =30;
    extern   int      StopLoss    =30;
    extern   int      MagicNumber =5394;
    
    //+------------------------------------------------------------------+
    //| Internal Parameter                                               |
    //+------------------------------------------------------------------+
    double   lot      =2;
    string   Comment  ="Testing";
    double   slb,tpb,sls,tps,pt;
    int      res,dpo;
    int      ticket;
    double   bs1,bs2,ss1,ss2;
    
    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    //Cek Digit Broker
    int init()
     {
       if(Digits==3 || Digits==5) pt=10*Point; else pt=Point;
       return(0);
     }
    
    // fungsi order
    // op buy
    void Buy()
    {
      ticket=OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb,tpb,Comment,MagicNumber,0,Blue);
    }
    
    // po buystop
    void bs1()
    {ticket=OrderSend(Symbol(),OP_BUYSTOP,NR(Lots)*1,OrderOpenPrice()+7*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);}
    
    void bs2()
    {ticket=OrderSend(Symbol(),OP_BUYSTOP,NR(Lots)*2,OrderOpenPrice()+20*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);}
    
    
    void BuyStop()
    {
     ticket=OrderSend(Symbol(),OP_BUYSTOP,xlot(),OrderOpenPrice()+20*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Blue);
    }
    
    // op sell
    void Sell()
     {
      ticket=OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,sls,tps,Comment,MagicNumber,0,Red);
     }
    
    // po sell stop
    void ss1()
    {ticket=OrderSend(Symbol(),OP_SELLSTOP,NR(Lots)*1,OrderOpenPrice()-10*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);}
    
    void ss2()
    {ticket=OrderSend(Symbol(),OP_SELLSTOP,NR(Lots)*2,OrderOpenPrice()-23*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);}
    
    
    void SellStop()
    {
     ticket=OrderSend(Symbol(),OP_SELLSTOP,xlot(),OrderOpenPrice()-23*pt,3,StopLoss==0,TakeProfit==0,Comment,MagicNumber,0,Red);
    }
    
    //Oeder Filter
    int jumlahorder( int tipe)
    {
    int total=0;
    for(int i=0;i<OrdersTotal();i++)
     {
       if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
       if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber||OrderType()!=tipe) continue;
       total++;
      }
    return(total);
    }
    
    //Lots Filter
    double NR(double thelot)
    {
     double maxlots = MarketInfo(Symbol(), MODE_MAXLOT),
     minilot = MarketInfo(Symbol(), MODE_MINLOT),
     lstep = MarketInfo(Symbol(), MODE_LOTSTEP);
     double lots = lstep*NormalizeDouble(thelot/lstep, 0);
     lots = MathMax(MathMin(maxlots, lots), minilot);
     return (lots);
    }
    
    //double lots
    double xlot()
    {
     double ylot,dlot;
      for (int i=0;i<OrdersHistoryTotal();i++)
      {
       if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
       if(OrderSymbol()!=Symbol() || OrderComment()!=Comment)continue;
      }
       dlot=OrderLots();
      ylot=NR(dlot*lot);
      return(ylot);
     }
       
    //delete po
    void del()
    {for(int i=OrdersTotal()-1;i>=0;i--)
       {if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
        if(OrderSymbol()!=Symbol()) continue;
        if(OrderType()>1){res=OrderDelete(OrderTicket());}
       }
    }
    
    
    Code:
    
    //+------------------------------------------------------------------+
    //| Open Order                                                       |
    //+------------------------------------------------------------------+
    int start()
    {  
    //Signal
    double buka    =iOpen(Symbol(),PERIOD_CURRENT,1);
    double tutup   =iClose(Symbol(),PERIOD_CURRENT,1);
    int signal;
    if(tutup>buka)     signal=1;// aturan buy
    if(tutup<buka)     signal=2;//aturan sell
    
      {
      if(StopLoss==0)slb=0;else slb=Ask-StopLoss*pt;
      if(StopLoss==0)sls=0;else sls=Bid+StopLoss*pt;
      if(TakeProfit==0)tpb=0;else tpb=Ask+TakeProfit*pt;
      if(TakeProfit==0)tps=0;else tps=Bid-TakeProfit*pt;
    //Open BUY  
          {
          if(jumlahorder(0)==0 && jumlahorder(1)==0 && signal==1)Buy();
          if(jumlahorder(4)==0 && jumlahorder(5)==0 && signal==1)bs1();
          if(jumlahorder(5)==0 && jumlahorder(1)==0 && signal==1)ss2();
          }
    //Open SELL
          {
          if(jumlahorder(1)==0 && jumlahorder(0)==0 && signal==2)Sell();
          if(jumlahorder(5)==0 && jumlahorder(4)==0 && signal==2)ss1();
          if(jumlahorder(4)==0 && jumlahorder(0)==0 && signal==2)bs2();
          }
    //Open Buystop
          {
          if(jumlahorder(5)==0)del();
          if(jumlahorder(4)==0 && jumlahorder(5)==0)BuyStop();
          }
    //Open Sellstop
          {
          if(jumlahorder(4)==0)del();
          if(jumlahorder(5)==0 && jumlahorder(4)==0)SellStop();
          }
      }
    
    
    //+------------------------------------------------------------------+
    //| Informasi Akun                                                   |
    //+------------------------------------------------------------------+
    Comment ("\n", "-----------------------------", 
          "\n", "Testing EA", 
          "\n", "Forex Account Server :", AccountServer(),
          "\n", "Equity  = ", AccountEquity(), 
          "\n", "Balance = ", AccountBalance(), 
          "\n", "-----------------------------", 
          "\n", "Date        : ", Day(), "-", Month(), "-", Year(),
          "\n", "Server Time : ", Hour(), ":", Minute(), ":", Seconds(), 
          "\n");
     return(0);
     }
    //+------------------------------------------------------------------+
    
     
  7. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Saya tidak koreksi intinya order pertama BuyStop dan SellStop berikan comment yang berbeda dengan order berikutnya, sehingga ketika salah satu tersentuh maka comment order yng pertama tinggal satu, dan Delete berdasarkan comment tadi, setelah di delate maka buka order berikutnya dengan comment yang beda. Sedikit Clue dari saya :)
     
    • Like Like x 1
  8. David 51LVA

    David 51LVA Member Credit Hunter

    Equity
    Credit
    Ref Point
    bagi master yang jago coding bisa bantu untuk penambahan cut switch pada EA MA cross. jadi bila ada signal baru maka OP sebelumnya di close dan membuka order baru sesuai signal..
    berikut strategi coding nya

    //-------------------------------------------------------------------+
    //Check open orders
    //-------------------------------------------------------------------+
    if(OrdersTotal()>0){
    for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
    {
    if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
    {
    if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
    }
    }
    }
    //-------------------------------------------------------------------+

    //-------------------------------------------------------------------+
    // trading strategy
    //-------------------------------------------------------------------+


    if(halt1!=1){// halt1

    // Sell criteria
    if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
    {
    int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
    if(opensell<1){int sellfail=1;}
    }
    // Buy criteria
    if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
    {
    int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
    if(openbuy<1){int buyfail=1;}
    }
    }// halt1

    //-----------------------------------------------------------------------------------------------------
    if(OrdersTotal()>0){
    for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

    if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

    if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
    if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

    }
    }
    }

    //-------------------------------------------------------------------+
     
  9. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Disini tidak ada yang jago coding mas, yang ada adalah sama sama belajar CODING, selain itu tentu permintaan untuk menambahkan CUT SWITCH tidak bisa diberikan, kecuali mas mempunyai ide awal seperti apa yang dimaksudkan, karena jika saya berikan maka sama halnya nanti tidak belajar
     
  10. David 51LVA

    David 51LVA Member Credit Hunter

    Equity
    Credit
    Ref Point
    ini udah saya tambahkan di bawah "buy criteria "tapi saya masi bingung masi ada eror d mna yah?

    if(CutSwitch){
    QnCloseType(Symbol(),Magic,QnRev(signal-1));
    }
    QnOrder(Symbol(),signal-1,myLots,mySL,myTP,Magic,Notes);
    }
     
  11. mastemon

    mastemon New Member Credit Hunter

    Equity
    Credit
    Ref Point
    berarti untuk menghapus PO tersebut berdasarkan comment ya gan.
    oke, saya coba dulu gan.
     
  12. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Untuk Delete PO yang tidak tereksekusi bermacam macam caranya, yang saya berikan adalah salah satu Teknik yang bisa di terapkan. Silahkan dicoba dan mencoba, karena jika masih GAGAL, itu artinya adalah SUKSES yang tertunda, masih ada hari besok untuk belajar dan Mencoba sampai menemukan
     
  13. mastemon

    mastemon New Member Credit Hunter

    Equity
    Credit
    Ref Point
    clue yang om berikan tadi sudah saya terapkan, dan berjalan seperti yang saya mau.
    next, mau mempelajari ordermodify.
    pelan pelan asal paham :D
     
  14. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Pesan errornya seperti apa mas??
     
  15. David 51LVA

    David 51LVA Member Credit Hunter

    Equity
    Credit
    Ref Point
    udah mas, ternyata EA nya ada versi terbaru ...jadi udah termasuk cutswitch bila signal berubah.. cuman maw tanya di compile ada tanda seru segitiga warning apa kah itu ga apa2?
     
  16. mahoo bar

    mahoo bar Member Credit Hunter

    Equity
    Credit
    Ref Point
    mantap om...sip....
    setahu ane kalo cuma warning EA masih bisa jalan kok, kalo error baru agak bisa jalan om :)
     
  17. HendroFX

    HendroFX Moderator Moderator

    Equity
    Credit
    Ref Point
    Tentu kalau ada tanda warning pasti ada yang salah, sekalipun bisa jalan tetapi itu akan mengganggu ketika EA running, walau sekarang mungkin tidak terasa
     
    Last edited: 02 Jul 2015
  18. mahoo bar

    mahoo bar Member Credit Hunter

    Equity
    Credit
    Ref Point
    sip...makasih om udah dikasih pencerahan
     
  19. susanto

    susanto Active Member Credit Hunter

    Equity
    Credit
    Ref Point
    mungkin gini om

    //-------------------------------------------------------------------+
    //Check open orders
    //-------------------------------------------------------------------+
    if(OrdersTotal()>0){
    for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
    {
    if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
    {
    if(OrderMagicNumber()==MagicNumber) {int halt1=1;}
    }
    }
    }
    //-------------------------------------------------------------------+

    //-------------------------------------------------------------------+
    // trading strategy
    //-------------------------------------------------------------------+


    if(halt1!=1){// halt1

    // Sell criteria
    if ((MA1_bc>MA2_bc)&&(MA1_bp>MA2_bp)&&(MA1_bl<MA2_bl)) //Signal Sell
    {

    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
    {
    if (OrderSymbol() != Symbol() ) continue;
    if (OrderType() == 0) tk=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, CLR_NONE);
    }
    }

    int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"X trader order ",MagicNumber,0,Green);
    if(opensell<1){int sellfail=1;}
    }
    // Buy criteria
    if ((MA1_bc<MA2_bc)&&(MA1_bp<MA2_bp)&&(MA1_bl>MA2_bl)) //Signal Buy
    {
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
    {
    if (OrderSymbol() != Symbol() ) continue;
    if (OrderType() == 0) tk=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, CLR_NONE);
    }
    }

    int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"X trader order ",MagicNumber,0,Blue);
    if(openbuy<1){int buyfail=1;}
    }
    }// halt1

    //-----------------------------------------------------------------------------------------------------
    if(OrdersTotal()>0){
    for(i=1; i<=OrdersTotal(); i++){ // Cycle searching in orders

    if (OrderSelect(i-1,SELECT_BY_POS)==true){ // If the next is available

    if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_BUY)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,slb,tpb,0,CLR_NONE); }
    if((OrderMagicNumber()==MagicNumber&&OrderType()==OP_SELL)&&(OrderTakeProfit()==0||OrderStopLoss()==0)) { OrderModify(OrderTicket(),0,sls,tps,0,CLR_NONE); }

    }
    }
    }

    //-------------------------------------------------------------------+
     
  20. giisa

    giisa New Member

    Equity
    Credit
    Ref Point
    mohon bantuannya para Suhu : saya ingin menampilkan data satu candle kebelakang, biasanya saya menggunakan fungsi iCustom seperti ini
    double a = iCustom(NULL,0,"nama_indikator",0,i+1); jadi ada dua indikator, indikator A yang dipanggil dan indikator B yang memanggil.
    yang saya ingin belajar bagaimana menulis code mql nya tanpa menggunakan iCustom? jadi saya perlu satu indikator saja.
    atas kesempatannya saya ucapkan banyak terima kasih
     

Share This Page