당사 팬 페이지에 가입하십시오
- 조회수:
- 8999
- 평가:
- 게시됨:
- 2016.10.13 16:45
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
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](https://c.mql5.com/i/code/indicator.png)
Indicator detects the Inside Bars and marks them high/low (no redraw).
![Example of OnChartEvent() Function](https://c.mql5.com/i/code/expert.png)
This is a great beginners' example of the function OnChartEvent() & creating objects on the chart to access them for some tasks.
![Multi TimeFrame RSI](https://c.mql5.com/i/code/indicator.png)
Shows multi timeframe (M1, M5, M15, M30, H1 , H4, D1) RSI indicator in a separate window.
![Closed_WIN](https://c.mql5.com/i/code/script.png)
Closure of all winning positions. (You can indicate a specific instrument if you want to).