• 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.

      [ASK] Bagaimana ya cara kerja return?

      widyantodedy

      New Member
      Credit Hunter
      Credits
      0
      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) ;
      }
       
      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 :-)
       
      Back
      Top