거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Telegram에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
라이브러리

OBz Trading Functions Library - MetaTrader 4용 라이브러리

조회수:
8754
평가:
(22)
게시됨:
2016.10.13 16:45
\MQL4\Libraries\
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

Library of trading functions (position size, open, close position etc.) from the EAs "Ocean Breeze" and "Graalino-Pro".

It can be of big help for novice traders as an example how to handle trading events.

It calculates the size of position from the RISK (%) given. Forget about pips, lots, ticks, digits etc. Take a pro-approach. It works on any financial instrument regardless of currency's name, leverage, lot digits, account's currency, broker etc.

The library works for several years at several different brokers on more than 50 currency pairs, metals, etc. This library is a Public Domain.

Example:

//_________________________________________________
//                                                 |
//                      Calc_Optimal_Pos_Size ()   |
//_________________________________________________|
double Calc_Optimal_Pos_Size(string       Bond_Name,
                             int          Time_Frame,
                             double       Max_Risk,
                             int          Portfolio_Bonds,
                             int          Full_Expert_ID,
                             bool         Use_Adaptive_Pos_Size_Param,
                             double       First_Loss_Drop_Param,
                             double       Losses_Drop_Slope_Param,
                             double       Second_Profit_Drop_Param,
                             double       Recovery_Slope_Param,
                             double       Max_Drop_Param)
  {
   double  Pos_Size;
   double  Pos_Size_Portfolio;
   double  Pos_Size_Risk;
//.................................................................
   Pos_Size_Risk=Calc_Pos_Size_To_Risk(Bond_Name,
                                       Max_Risk);
   Pos_Size_Portfolio=Calc_Pos_Size_To_Portfolio(Bond_Name,
                                                 Portfolio_Bonds);
   Pos_Size=MathMin(Pos_Size_Risk,Pos_Size_Portfolio);
// ======================= USE ADAPTIVE POS SIZE ===================================
   if(Use_Adaptive_Pos_Size_Param==TRUE)
     {
      //      Print ("Adaptive: risk init=" + DoubleToStr (Pos_Size, 4));
      Pos_Size=Adjust_Pos_Size_To_History(Pos_Size,
                                          Bond_Name,
                                          Full_Expert_ID,
                                          First_Loss_Drop_Param,
                                          Losses_Drop_Slope_Param,
                                          Second_Profit_Drop_Param,
                                          Recovery_Slope_Param,
                                          Max_Drop_Param);
      //      Print ("Adaptive: out=" + DoubleToStr (Pos_Size, 4));
     }
// ============== ADJUST POS SIZE TO BROKER's LIMITS ====================================
//      Print ("Optim Pos size=", DoubleToStr (Pos_Size, 4));
   Pos_Size=Adjust_Pos_Size_To_Broker(Bond_Name,Pos_Size);
   return (Pos_Size);
  }

//__________________________________________________
//                                                 |
//                      Calc_Pos_Size_To_Risk   () |
//_________________________________________________|
double Calc_Pos_Size_To_Risk(string    Bond_Name,
                             double    Max_Risk)
  {
   double  Equity_Drawdown;
   double  Daily_Volatility;
   double  Pos_Size;
   int     Lot_Digits;
   double  Stop_Loss_Points;
   double  One_Point_Cost;
   double  Tick_Value;
   double  Margin_Init;
   double  Min_Lot_Size;
//........................................................................
   if(TerminalInfoInteger(TERMINAL_CONNECTED)!=TRUE)
     {
      Pos_Size=0.0;
      return (Pos_Size);
     }
//........................................................................
   RefreshRates();
//.................................................................
   Min_Lot_Size=MarketInfo(Bond_Name,MODE_MINLOT);
   Tick_Value=MarketInfo(Bond_Name,MODE_TICKVALUE);
   Margin_Init=MarketInfo(Bond_Name,MODE_MARGININIT);
   if((MarketInfo(Bond_Name,MODE_MARGINCALCMODE)==2) && (Margin_Init!=0.0))
     {
      Tick_Value=Tick_Value *MarketInfo(Bond_Name,MODE_MARGINREQUIRED)/Margin_Init;
     }
//      Print ("Tick val=", DoubleToStr(Tick_Value, 6));
//..........................................................................
   Equity_Drawdown=MathMin(AccountEquity(),AccountBalance())*Max_Risk/100.0; //percent
   Daily_Volatility=Get_Daily_Volatility(Bond_Name);
//      Print ("Daily volat=", DoubleToStr (Daily_Volatility,5));
//..........................................................................
   Stop_Loss_Points=MarketInfo(Bond_Name,MODE_BID)*Daily_Volatility
                    /MarketInfo(Bond_Name,MODE_POINT);
//      Print ("Stop_Loss_Points=", DoubleToStr (Stop_Loss_Points, 2));
//..........................................................................
   One_Point_Cost=Tick_Value/(MarketInfo(Bond_Name,MODE_TICKSIZE)
                              /MarketInfo(Bond_Name,MODE_POINT));
//      Print (" One_Point_Cost =", DoubleToStr (One_Point_Cost, 4));
//..........................................................................
   if(One_Point_Cost==0.0)
     {
      Print("Error: One_Point_Cost=0.0: ",DoubleToStr(One_Point_Cost,6));
      Print("Tick_Value= ",DoubleToStr(Tick_Value,6));
      Print("Equity_Drawdown= ",DoubleToStr(Equity_Drawdown,6));
      Print("Daily_Volat= ",DoubleToStr(Daily_Volatility,5));
      Print("Stop_Loss_Points= ",DoubleToStr(Stop_Loss_Points,3));
      Print("One_Point_Cost= ",DoubleToStr(One_Point_Cost,6));
      return (0.0);
     }
//..........................................................................
   Pos_Size=Equity_Drawdown/(One_Point_Cost*Stop_Loss_Points);
//..........................................................................
   if(Pos_Size<Min_Lot_Size)
     {
      Pos_Size=Min_Lot_Size;
     }
//.............................................................................
   Lot_Digits=Get_Lot_Digits(Bond_Name);
//      Print (" Lot_Digits =" + Lot_Digits);
   Pos_Size=NormalizeDouble(Pos_Size,Lot_Digits);
//      Print (" Pos_Size =", DoubleToStr (Pos_Size, 4));
//..........................................................................
   return (Pos_Size);
  }

//______________________________________________________________
//                                                              |
//                      Adjust_Pos_Size_To_History ()           |
//______________________________________________________________|
double Adjust_Pos_Size_To_History(double       Pos_Size,
                                  string      Bond_Name,
                                  int         Full_Expert_ID,
                                  double      First_Loss_Drop_Param,
                                  double      Losses_Drop_Slope_Param,
                                  double      Second_Profit_Drop_Param,
                                  double      Recovery_Slope_Param,
                                  double      Max_Drop_Param)
  {
   double  PL_History;     // positive profits OR negative losses
   PL_History=Calc_PL_History_Factor(Bond_Name,Full_Expert_ID);
   Pos_Size=Reduce_Pos_Size_To_PL_History(PL_History,
                                          Pos_Size,
                                          Bond_Name,
                                          First_Loss_Drop_Param,
                                          Losses_Drop_Slope_Param,
                                          Second_Profit_Drop_Param,
                                          Recovery_Slope_Param,
                                          Max_Drop_Param);
   return (Pos_Size);
  }

MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/16208

Inside Bar Inside Bar

Indicator detects the Inside Bars and marks them high/low (no redraw).

Example of OnChartEvent() Function Example of OnChartEvent() Function

This is a great beginners' example of the function OnChartEvent() & creating objects on the chart to access them for some tasks.

Multi TimeFrame RSI Multi TimeFrame RSI

Shows multi timeframe (M1, M5, M15, M30, H1 , H4, D1) RSI indicator in a separate window.

Closed_WIN Closed_WIN

Closure of all winning positions. (You can indicate a specific instrument if you want to).