• 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 :)

Tanya Jawab MQL

Tujuan Adanya Tanya Jawab Mql
  • HendroFX

    Moderator
    Moderator
    Credits
    227
    Halo Teman teman Trader, dan semua orang yang ingin belajar membuat Coding, tentunya bagi meraka yang tertarik dengan MQL, yaitu bahasa pemrograman untuk Metatrader, saya memberikan ruang bagi mereka yang sedang belajar MQL namun mengalami kesulitan dalam menulis Coding, Thread ini dibuat untuk saling bertanya dan memberikan Jawaban mengenai kesulitan kesulitan / Error coding. Semoga threat ini bermanfaat :):ok:
    Silahkan kita saling diskusi dan memberikan pencerahan.......:clap:

    Untuk memudahkan membaca isi diskusi Threat ini, silahkan buka THREADMARK yang saya buat
     
    Last edited:
    Cara menulis Custom Indikator
  • Kemarin habis ikut belajar di webinar kebetulan pelajaran pake custom indikator, mohon pencerahannya bagaimana cara mencari yg ada panah (signal) yg terakhir, ane coding untuk mengetest iCustom nya seperti ini

    int Mode = 1;
    int NomorBar = 8;
    double result = iCustom(Symbol(), Period(),"[HASHTAG]#MotherCandle[/HASHTAG]","","","","","2011112122",true,false,300,5.0,"Alert.wav",Mode,NomorBar);

    Alert(result);
    kl indi ane letakan di folder indikator biarpun ane udah rubah" Mode sama NomorBar nya, Alertnya selalu muncul "2147483647.0"

    kl indi ane letakan di folder indicator/download , ane juga rubah" Mode sama NomorBar nya, Alertnya selalu muncul "0"
    Mohon koreksinya

    untuk mengambil data dari sebuah Custum Indikator, harus tepat penulisan dari input yang akan di masukkan dam setting iCustomnya

    Code:
    iCustom( str symbol, int timeframe=PERIOD_M1|PERIOD_M5|PERIOD_M15|PERIOD_M30|PERIOD_H1|PERIOD_H4|PERIOD_D1|PERIOD_W1|PERIOD_MN1|0, str name, ..., int mode=0|1|2|3|4|5|6|7, int shift )

    Coba perhatikan susunan dari input Customnya.
     
    Last edited by a moderator:
    Cara mengambil data wakru kemarin
  • bukan ingin tahu hari kemarin om.. tapi menentukan hari/tgl kemarin dan juga jam.nya .. tujuannya saya ingin mencoba membuat custom indi fibo om..
    dan sya ingin pada Time1 itu memakai tgl dan jam yg sudh d tntukan setiap hari kemarin.. bgitu.. tpi msi blum pham untuk coding mql ni.. soalnya blum bnyak yg aq tmukan tutor di web2.. :(

    ini om skalian tk tulis d mari aja ya coding sya, tolong d bantu..

    Code:
    datetime T1=D'2015.06.19 20:00';
    datetime T2=iTime(Symbol(),PERIOD_D1,0);
    double awal=iOpen(Symbol(),PERIOD_D1,1), tujuan=iOpen(Symbol(),PERIOD_D1,0);
    
    ObjectCreate("FiboDO", OBJ_FIBO, 0, T1, awal, T2, tujuan);
    coba T1 diganti dengan yg ini
    Code:
    datetime T1=iTime(Symbol(),PERIOD_D1,1); 
    datetime T2=iTime(Symbol(),PERIOD_D1,0);
    double awal=iOpen(Symbol(),PERIOD_D1,1), tujuan=iOpen(Symbol(),PERIOD_D1,0);
    
    ObjectCreate("FiboDO", OBJ_FIBO, 0, T1, awal, T2, tujuan);
    ini akan mendetek otomatis hari kemarin :)
     
    Mendeteksi Pesan Error pada Mq4
  • mau tanya dong sm om-om dan tante2 sekalian di forum ini... saya ada robot tapi expired.. saya udah compile nih robot tp ada masalah sekarang di semicolin expected dan itu jumblahnya banyak banget.. jd yang harusnya _ jadi (.) , gimana ya om dan tante jd banyak titiknya jd apa yg harus saya lakukan om/tante...?
    Biasanya kesalahan akan di tunjukkan pada saat EA di compile, jadi tinggal teliti baris ke berapa akan tahu masalahnya, coba teliti kembali. Kalau Tanda ( _ ) diganti titik ( .) tetntu akan bermakna lain dan akan menjadi error..
     
    Cara membuat Order hanya 1 X
  • ap bnr seperti ini om..


    [HASHTAG]#property[/HASHTAG] copyright "Copyright 2015, MetaQuotes Software Corp."
    [HASHTAG]#property[/HASHTAG] link "https://www.mql5.com"
    [HASHTAG]#property[/HASHTAG] version "1.00"
    [HASHTAG]#property[/HASHTAG] strict

    extern int Magic = 123;
    extern string EACom= "YD";
    extern int Slippage = 3;
    extern double Lots = 0.10;
    extern int TakeProfit= 10;
    extern int StopLoss= 0;
    extern string Pair ="";

    string sym;

    //====================================
    int NewOrder(string mySym,int OPType,double myLots)
    {

    double price,SL,TP;
    double myPoint =MarketInfo(mySym,MODE_POINT);
    if (OPType==0)

    { price = MarketInfo(mySym,MODE_ASK);
    SL= price-(StopLoss*myPoint);
    TP= price+(TakeProfit*myPoint);

    }
    if (OPType==1)
    { price=MarketInfo(mySym,MODE_BID);
    SL= price+(StopLoss*myPoint);
    TP= price-(TakeProfit*myPoint);
    }

    if(StopLoss==0) SL=0;
    if(TakeProfit==0) TP=0;

    OrderSend(mySym,OPType,myLots,price,Slippage,SL,TP,"EACom",Magic,0,Blue);

    /*/int OrderSend(string symbol,int cmd,double volume,
    double price,int slippage,double stoploss
    double takeprofit, string comment=NULL,
    int magic=0, datatime expiration=0
    color arrow_color=CLR_NONE) //*/


    //----
    return(0);
    }

    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    if(Pair=="")sym=Symbol();else sym=Pair;
    NewOrder("EURUSD",OP_BUY,0.10);
    NewOrder("EURUSD",OP_SELL,0.10);

    //---
    return(INIT_SUCCEEDED);
    }
    Apa yang ditulis sudah benar hanya EACOM tidak perlu lagi diberi tanda " ", karena sudah di deklarasikan dengan String, walau itu juga tidak masalah namun agar lebih sempurna saja,
    Pemanggilan Fungsi NewOrder pada Init menjunjukkan bahwa EA akan melakukan Perintah sekali saja untuk order BUY dan SELL, setelah perintah berhasil maka tidak akan order lagi
     
    Cara menghitung order Profit
  • Untuk membaca order profit berdasarkan jenis ordernya maka harus menggunakan Order select seperti yang agan tulis tentang fungsi close all buy dan sell,
    Contoh sederhana menghitung Order Buy.

    Code:
    double HdProfitbuy(int myMagic)
    {double result=0.0;
    for(int i=0; i<=OrdersTotal()-1; i++){
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)
                ||  (OrderMagicNumber()!=myMagic) 
                || OrderType()!=0)continue;
                result= OrderProfit();
                 }
    
    return(result);
    }
     
    Penggunaan Perintah Order Select
  • Kalau == (sama dengan) dan !=(ngak sama dengan) saya sudh cukup jelas gan. cuman dampaknya jika jika EA ini di pasang di satu pair atau beberapa pair yang saya belum mengerti gan.

    misal scrip ini:
    if( !OrderSelect(i,SELECT_BY_POS)
    ||OrderSymbol()!=mySym
    ||OrderMagicNumber()!=myMagic) continue;

    penjelasan berdasarkan pengetahuan saya : jika tidak orderselect/orderselect gagal atau OrderSymbol() tidak sama dengan mySym atau OrderMagicNumber() tidak sama dengan myMagic, maka continue.

    pertanyaannya :

    1. Mengapa harus dibuat (!OrderSelect(i,SELECT_BY_POS)), jika dibuat seperti ini (OrderSelect(i,SELECT_BY_POS)) tidak pakai tanda"!" apa dampaknya?
    2. Mengapa harus orderselectnya gagal (!OrderSelect(i,SELECT_BY_POS)), kalau gagal berarti gak diselec dong?
    3. Jika dibuat seperti ini :if(OrderSymbol()!=mySy ||OrderMagicNumber()!=myMagic) apa dampaknya?
    4. Jika dibuat seperti ini :if(OrderSymbol()==mySy ||OrderMagicNumber()==myMagic) apa dampaknya?

    mohon penjelasannya master, sebelumnya diducapkan terima kasih
    Pertanyaan yang bagus, dan memang perlu mengerti dasar dari perintah

    if( !OrderSelect(i,SELECT_BY_POS)
    ||OrderSymbol()!=mySym
    ||OrderMagicNumber()!=myMagic) continue;

    Perintah itu mempunyai arti:
    1. Jika Posisi i gagal memilih maka lanjutkan pilih nomor order berikutnya
    2. Jika Symbol tidak sama dengan simbol dimana EA di pakai maka lanjutkan berikutnya
    3. Jika magicnumbernya berbeda debgan magicNUmber EA yang sedang Running maka lanjutkan untuk memilih yang lain

    Sehingga dengan perintah di atas memaksa EA untuk memilih Simbol dimana EA sedang runing dan MagicNumber yang sedang digunakan. :)
     
    Cara Mencari Candel Tertinggi dan Terendah
  • Untuk bertanya tidak perlu minta maaf, karena agan tidak bersalah kepada saya :)
    fungsi ini bertujuan untuk mencari CANDLE KE BERAPA PALING TINGGI DARI 10 CANDEL , jika Candel target di isi 10.
    iHighest (PAIR yang akan digunakan, Time Frame berapa, MODE yang akan dipakai, Cendle Target akir, Cendel Start Memulai )
    CONTOH.
    Code:
    int fHigh = iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,10,1);
      double fHigest=iHigh(Symbol(), PERIOD_CURRENT,fHigh);
       // Untuk melihat hasilnya, gunakan Alert saja
       Alert (fHigest);
     
    Cara Mengitung Order
  • Buatlah dulu fungsi penghitung order, misalnya saya berikan contoh menghitung order buy dengan operator for
    Code:
    int HdBuy()
    {int OB=0;
    for(int i=OrdersTotal()-1; i>=0; i--)
             {
                if( !OrderSelect(i,SELECT_BY_POS,MODE_TRADES)continue;
               if(OrderType()!=OP_BUY) continue;
               if(OrderType()==OP_BUY) OB++;
             }
    return(OB); 
    }
    Dengan fungsi diatas maka kita akan mengetahui jumlah order buy ada berapa, sehingga logikanya jika total order buy kurang dari atau sama dengan NOL, maka Jalankan Perintah Order Buy,
    Dengan demikian Order buy tidak akan banyak / hanya satu saja.
     
    Cara Mendeteksi error coding dan penyelesaianya
  • Kalau diperhatikan pesan error dalam gambar dan juga penulisan coding di atas, maka sudah jelas bahwa variable dari TimeFrameStr sudah pernah di deklarasikan, coba cek pada line dan kolom berapa errornya. Silahkan lihat gambar, Jika sudah pernah dipakai, ganti dengan nama yang berbeda.error.jpg
     
    Cara memilih Order Terakir dari beberapa order
  • Misi suhu2, master2. saya mau tanya.

    Jika saya mempunyai 5 OP dan saya ingin mengetahui Order Open Price dari masing2 OP bagaimana caranya ya?
    kemampuan saya hanya sebatas mengkombinasikan loop dengan OrderSelect yang menghasilkan OrderOpenPrice dari OP terakhir..
    Gunakan operator for untuk looping dari order yang ada, setelah itu order di pilih dengan menggunakan perintah order select, dalam memilih ini bisa kita kembangkan banyak hal, Misalnya memilih harga open price, besarnya lot atau profitnya.
    Contoh sederhana;
    Code:
    int tiket; double OOP;
    // operator for untuk looping 
    for (int i = OrdersTotal()-1; i >=0 ; i--)
      {// memilih posisi order yang aktif
          if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) continue;
         tiket=OrderTicket();
          OOP=OrderOpenPrice();
    if(tiket>0) break;// EA akan selalu memilih harga terakir
    }// end looping
    Comment (OOP);// untuk tes apakah benar Order Open Price terakir


    Master HendroFX , gimana coding buat tau harga sekarang yang sedang running ...?
    Sangat mudah gunakan coding dibawah ini; untuk simbol bisa diganti ganti sesuai PAIR yang di inginkan, jika menggunakan Symbol(), maka yang dimaksud adalah simbol dimana EA sedang Running.
    Code:
     double HargaSekarang;
    HargaSekarang=MarketInfo(Symbol(),MODE_ASK):
    Comment (HargaSekarang);// Lihat Comment pada layar harga sekarang
     
    Cara mencari Nilai Open Candle dan Close Candle pada Jam Tertentu
  • kalau save di terminal data path sih memang sudah bisa om hendro...
    masalahnya ini kok g bisa di save langsung save ke dekstop ya..?
    apakah ada pencerahan lainnya om..?
    Penyimpanan data file memang pada terminal data, dan saya kira tidak ada masalah dengan hal itu

    Tanya lagi master HendroFX
    kalau buat mengetahui Open Close Candle jam 23:00 dari broker coding nya bagaimna master ?

    Pertma cari dulu candel ke berapa Jam 23 tersebut dengan melakukan looping pada candle yang sudah berjalan (gunakan operator for)
    Ke dua, Jika sudah ketemu baru mencari Harga Open order dan "Close"nya,
    contoh sederhana sebagai basic yang bisa dikembangkan
    Code:
    datetime TimeBar; int Bar;
     double HdOpen,HdClose;  
     for(Bar=0; Bar<Bars; Bar++)
     {  
          TimeBar= iTime(Symbol(),0,Bar) ;    
         if(TimeHour(TimeBar)!=23)continue;
          if(TimeHour(TimeBar)==23)break;
    }    
    HdOpen =iOpen(Symbol(),0,Bar);
    HdClose= iClose(Symbol(),0,Bar);  
    Alert("Open Order Candle Jam 23 = "+ HdOpen );
     
    Cara Mengambil Data MA untuk Signal OP
  • mohon bantuannya master2 disini ada yang bisa bantu script agar open order berdasarkan MA dan RSI?
    terimakasih sebelumnya...:)
    Di sini bukan untuk tempat meminta script atau coding, tetapi belajar bersama sama mengenai coding, jika ingin membuat EA berdasarkan Indikator MA, maka bisa dengan cara
    Code:
    double  iMA(
       string       symbol,           // symbol
       int          timeframe,        // timeframe
       int          ma_period,        // MA averaging period
       int          ma_shift,         // MA shift
       int          ma_method,        // averaging method
       int          applied_price,    // applied price
       int          shift             // shift
       );
    dengan demikian kita bisa mengambil data / Nilai dari MA tersebut,
    Misalnya dengan Rule sederhana, "Jika Open Price Candel scbelumnya Lebih Besar dari MA, maka OP BUY".

    Code:
       int TF = 0 ;
      int fPeriod=14;
      int MA_Shift=50;
      int CandelPos=1;
      double HdMA=iMA(Symbol(),TF,fPeriod,MA_Shift,MODE_LWMA,PRICE_WEIGHTED,CandelPos);
    
      double HdOpen=iOpen(Symbol(),TF,CandelPos);
    
    if(HdOpen>HdMA)
       {
          //PERINTAH_OP_BUY
       };
     
    Signal MA dan RSI
  • Saya akan membuat Contoh Gabungan Indikator RSI dengan MA, dan pengambilan data Nilai RSI dan MA untuk dijadikan Signal
    aturan.jpg
    Misalnya: Rule Untuk Op Buy adalah, Jika RSI lebih besar dari 70 dan MA10 lebih besar dari MA 100, maka OP BUY

    Code:
    double HdRsi=iRSI(Symbol(),0,14,PRICE_CLOSE,1);
    double HdMa10=iMA(Symbol(),0,10,0,MODE_SMA,PRICE_CLOSE,1);
    double HdMa100=iMA(Symbol(),0,100,0,MODE_SMA,PRICE_CLOSE,1);
    
    if(HdRsi>=70&&HdMa10>HdMa100)// PERINTAH BUY.........
     
    Back
    Top