SonnyPanel/EA/average_price_total.mq5
super.admin cfd1ba1ff5 convert
2025-05-30 16:25:20 +02:00

115 lines
4.4 KiB
MQL5

//+------------------------------------------------------------------+
//| 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=true;
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_"+Symbol());
ObjectDelete(ChartID(),"Information_"+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_"+Symbol());
ObjectDelete(ChartID(),"Information_"+Symbol());
ObjectDelete(ChartID(),"Information_2"+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_"+Symbol());
ObjectDelete(ChartID(),"Information_"+Symbol());
//---
ObjectDelete(ChartID(),"Average_Price_Line_"+Symbol());
ObjectCreate(ChartID(),"Average_Price_Line_"+Symbol(),OBJ_HLINE,0,0,breakevenResult.Average_Price);
ObjectSetInteger(ChartID(),"Average_Price_Line_"+Symbol(),OBJPROP_WIDTH,1);
//---
color cl=Blue;
if(breakevenResult.Net_Lots<0) cl=Red;
if(breakevenResult.Net_Lots==0) cl=clrPurple;
//---
ObjectSetInteger(ChartID(),"Average_Price_Line_"+Symbol(),OBJPROP_COLOR,cl);
ObjectCreate(ChartID(),"Information_"+Symbol(),OBJ_LABEL,0,0,0);
ObjectSetInteger(0,"Average_Price_Line_"+Symbol(), OBJPROP_BACK, true);
ObjectSetInteger(0,"Average_Price_Line_"+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_"+Symbol(),OBJPROP_XDISTANCE,result1-300);
ObjectSetInteger(ChartID(),"Information_"+Symbol(),OBJPROP_YDISTANCE,y-30);
ObjectSetInteger(0, "Information_"+Symbol(),OBJPROP_FONTSIZE, 12);
string text = "T " +DoubleToString(breakevenResult.Net_Result,2)+" L "+NormalizeDouble(breakevenResult.Net_Lots,2)+" # "+breakevenResult.Net_Trades; ;
ObjectSetString(ChartID(), "Information_"+Symbol(), OBJPROP_TEXT, text);
ObjectSetInteger(0,"Information_"+Symbol(), OBJPROP_COLOR, cl);
return(0);
}
//+------------------------------------------------------------------+