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] Bagaimana ya cara kerja return?

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

  1. widyantodedy

    widyantodedy New Member Credit Hunter

    Equity
    Credit
    Ref Point
    Saya, baru kenal dan semingguan belajar MQL dari Soe Hoe.. dan mempelajari dengan teliti setiap videonya. Saya hanya kurang begitu menangkap tentang bagian "return" dalam membuat fungsi. Karena saya kurang memahami tentang "nilai yang dikembalikan itu nilai apa? dan bagaiamana jika dalam sebuanh fungsi itu tidak ada nilai yang akan dikembalikan karena diakhir fungsi itu tujuannya untuk order send misalnya>.. nah apa yang dikembalikan...?

    Misal dalam kode berikut ini saya membuat sebuah coding untuk rule order send buy dan sell (mohon maaf jika masih acak2an, maklum baru semingguan belajar)... di akhir kurung kurawal, harus diberi return value, kalau nggak ya gak bisa di compile, makanya saya iseng kasih nilai (0) pada return... eh bisa.... tapi sejujurnya saya nggak ngerti apa maksudnya return (0) itu dan bagaimana return itu sendiri diperlukan... saya sudah melihat video tutorialnya hanya masih belum paham 100%... kalau yang lain sudah sangat bisa dipahami.

    berikut codingnya

    Code:
    int FnOrder1 ()
    {
    {
    double pHigh  = iHigh (Symbol(),0,0) ;
    double pLow   = iLow (Symbol(),0,0) ;
    double pOpen  = iOpen (Symbol(),0,0) ;
    double TPBuy ;
    double TPSell ;
    double SLBuy ;
    double SLSell ;
    
    TPBuy = Ask + (Takeprofit*Point) ;
    TPSell = Bid - (Takeprofit*Point) ;
    SLBuy = Ask - (Stoploss*Point) ;
    SLSell = Bid + (Stoploss*Point) ;
    if (Takeprofit == 0) {
        TPBuy = 0 ;
        TPSell = 0 ;
        }
    if (Stoploss == 0) {
        SLBuy = 0 ;
        SLSell = 0 ;
        }
       
       int cekSym ;
        for (int i = OrdersTotal()-1 ; i > 0 ; i--)
        {
          OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) cekSym++ ;
        }
       
        double pipBuy  = MathRound((pOpen-pLow)/Point) ;
        double pipSell = MathRound ((pHigh-pOpen)/Point) ;
       
    bool   PipFilter ;
    int    PipFilterCount ;
    PipFilterCount = MathRound ((pHigh - pLow)/Point) ;   
    
    if (PipFilterCount >= pipFilterLow && PipFilterCount <= pipFilterHigh)
       {PipFilter = True ;}
       else {PipFilter = False ;}
    
    if (pipFilterHigh == 0 && pipFilterLow == 0) PipFilter = True ;
       
    //----------------------BUY---------------------------------------------   
    // OP 1 untuk open   
        if (pipBuy >= PipAchieve && Ask == pOpen && cekSym == 0 && PipFilter == True ) {
            OrderSend (Symbol(),OP_BUY,Lots,Ask,Slippage,SLBuy,TPBuy,EAComment,MagicNumber,0,clrBlue) ;
            }
           
        int nPABuy ;
        nPABuy = pipBuy-PipAchieve ;
        double pPABuy ;
        pPABuy = pOpen - (nPABuy*Point) ;
    
    // OP 1 jika tidak kena open
        if (nPABuy >= PipAchieve && Ask == pPABuy && cekSym == 0 && PipFilter == True) {
            OrderSend (Symbol(),OP_BUY,Lots,Ask,Slippage,SLBuy,TPBuy,EAComment,MagicNumber,0,clrBlue) ;
            }
    
    //-----------------------SELL--------------------------------------------
    
        int nPASell ;
        nPASell = pipSell-PipAchieve ;
        double pPASell ;
        pPASell = pOpen + (nPASell*Point) ;
    
    // OP 1 untuk open
         if (pipSell >= PipAchieve && Bid == pOpen && cekSym == 0 && PipFilter == True) {
            OrderSend (Symbol(),OP_SELL,Lots,Bid,Slippage,SLSell,TPSell,EAComment,MagicNumber,0,clrRed) ;
            }
    
    // OP 1 jika tidak kena open
        if (nPASell >= PipAchieve && Bid == pPASell && cekSym == 0 && PipFilter == True) {
            OrderSend (Symbol(),OP_SELL,Lots,Bid,Slippage,SLSell,TPSell,EAComment,MagicNumber,0,clrRed) ;
            }
    }       
    return (0) ;
    }
     
  2. Niguru

    Niguru Member Credit Hunter

    Equity
    Credit
    Ref Point
    Untuk variabel yang dibuat function tentu ada return.
    Gunakan variabel untuk membuat function bila memang ada "nilai" yang diperlukan setelah function tersebut mengolah data.
    misalnya kamu memilih variabel "int angkaku()" untuk menghitung penjumlahan, maka nanti dari hasil function nilai angkaku() bisa dipakai untuk keperluan pengolahan berikutnya atau untuk menampilkan data tertentu, misalnya: int abc = angkaku();

    Bila nilai hasil olahan ada di variabel lain, maka tidak diperlukan return, gunakan saja void, yaitu procedure untuk mengolah data.
    Penggunaan procedure (menggunakan: void) tidak perlu return.

    Contoh function dengan return:

    Code:
    input int a=8;
    input int b=5;
    input int c=0;
    
    int angkaku(){return(a+b);}
    
    c=angkaku();// c akan berisi nilai 13
    
    Berikutnya contoh procedure tanpa return:
    Code:
    void(){c=a+b;}
    
    //c akan berisi nilai 13, diisi langsung saat pengolahan di area void
    Berikutnya contoh function dengan parameter:
    Code:
    input int a=8;
    input int b=5;
    input int c=0;
    
    int angkaku(int nilai1,int nilai2){return(nilai1+nilai2);}
    
    c=angkaku(a,b);// c akan berisi nilai 13
    
    Semoga penjelasan di atas bermanfaat bagi teman-teman di forum ini yang masih dalam tahap belajar.
    Happy coding .. have a nice day :)
     

Share This Page