//+------------------------------------------------------------------+ //| Average Price v3.0.mq4 | //| Joca - nc32007a@gmail.com | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Joca" #property indicator_chart_window #include "..\\Includes\\CalculateBreakeven.mqh" #include"..\\Includes\\BreakEvenResult.mqh" // trade position object //--- input bool includeBuys=true; input bool includeSells=false; input double profitTarget=0; input long magic=0; input double hedgeToBreakDownLots=0; input color font_color=clrWhite; input int font_size=12; //--- int PipAdjust,NrOfDigits; double point; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit() { ObjectDelete(ChartID(),"Average_Price_Line_Buy"+Symbol()); ObjectDelete(ChartID(),"Information_Buy"+Symbol()); NrOfDigits=Digits(); //--- if(NrOfDigits==5 || NrOfDigits==3) PipAdjust=10; else if(NrOfDigits==4 || NrOfDigits==2) PipAdjust=1; //--- point=Point()*PipAdjust; //--- //--- return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(ChartID(),"Average_Price_Line_Buy"+Symbol()); ObjectDelete(ChartID(),"Information_Buy"+Symbol()); ObjectDelete(ChartID(),"Information_2Buy"+Symbol()); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- CalculateBreakeven breakEven; BreakEvenInput breakEvenInput; breakEvenInput.Buys= includeBuys; breakEvenInput.Sells= includeSells; breakEvenInput.ProfitInMoney=profitTarget; breakEvenInput.MagicNumber=magic; breakEvenInput.HedgeToBreakDownLots=hedgeToBreakDownLots; BreakEvenResult breakevenResult=breakEven.GetBreakEven(breakEvenInput); //--- ObjectDelete(ChartID(),"Average_Price_Line_Buy"+Symbol()); ObjectDelete(ChartID(),"Information_Buy"+Symbol()); //--- ObjectDelete(ChartID(),"Average_Price_Line_Buy"+Symbol()); ObjectCreate(ChartID(),"Average_Price_Line_Buy"+Symbol(),OBJ_HLINE,0,0,breakevenResult.Average_Price); ObjectSetInteger(ChartID(),"Average_Price_Line_Buy"+Symbol(),OBJPROP_WIDTH,1); //--- color cl=Blue; if(breakevenResult.Net_Lots<0) cl=Red; if(breakevenResult.Net_Lots==0) cl=White; //--- ObjectSetInteger(ChartID(),"Average_Price_Line_Buy"+Symbol(),OBJPROP_COLOR,cl); ObjectCreate(ChartID(),"Information_Buy"+Symbol(),OBJ_LABEL,0,0,0); ObjectSetInteger(0,"Average_Price_Line_Buy"+Symbol(), OBJPROP_BACK, true); ObjectSetInteger(0,"Information_Buy"+Symbol(), OBJPROP_BACK, true); int x,y; ChartTimePriceToXY(0,0,time[rates_total-1],breakevenResult.Average_Price,x,y); long result1=0; ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,result1); ObjectSetInteger(ChartID(),"Information_Buy"+Symbol(),OBJPROP_XDISTANCE,result1-150); ObjectSetInteger(ChartID(),"Information_Buy"+Symbol(),OBJPROP_YDISTANCE,y-20); ObjectSetInteger(0, "Information_Buy"+Symbol(),OBJPROP_FONTSIZE, 12); string text = "b " +DoubleToString(breakevenResult.Net_Result,2)+" l "+NormalizeDouble(breakevenResult.Net_Lots,2)+" # "+breakevenResult.Net_Trades; ; ObjectSetString(ChartID(), "Information_Buy"+Symbol(), OBJPROP_TEXT, text); ObjectSetInteger(0,"Information_Buy"+Symbol(), OBJPROP_COLOR, Blue); return(0); } //+------------------------------------------------------------------+