Индикаторы: Profit of the current symbol 2

 

Profit of the current symbol 2:

Индикатор выводит по центру графика прибыль по текущему символу. Теперь каждые 9 секунд контроль наличия графических объектов

Profit of the current symbol 2

Автор: Vladimir Karputov

 
Для МТ4 сделайте пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
Zigid #:
Для МТ4 сделайте пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Владимир не делает для МТ4. Поэтому ловите адаптацию индикатора от меня: https://www.mql5.com/ru/forum/439131

Индикаторы: Profit of the current symbol 2
Индикаторы: Profit of the current symbol 2
  • 2023.01.04
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Индикаторы: Profit of the current symbol 2
 
Ihor Herasko #:

Владимир не делает для МТ4. Поэтому ловите адаптацию индикатора от меня: https://www.mql5.com/ru/forum/439131



ТЫ Лучший!!!!!!!!!!!!!!! СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!

 

hello ,, thanks for share , please can i know how can i align it to the corner left lower?


thanks

 

+ чтобы можно было перемещать мышкой по графику

//+------------------------------------------------------------------+
//|                               Profit of the current symbol 2.mq5 |
//|                              Copyright © 2021, Vladimir Karputov |
//|                      https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2021, Vladimir Karputov"
#property link      "https://www.mql5.com/en/users/barabashkakvn"
#property version   "2.001"
#property description "Profit of the current symbol"
#property description "Additionally: 'Profit for all symbols' can be on the right, at the bottom or off"
#property indicator_chart_window
#property indicator_buffers   0
#property indicator_plots     0
//+------------------------------------------------------------------+
//| Enum Profit All                                                  |
//+------------------------------------------------------------------+
enum ENUM_PROFIT_ALL
  {
   right=0,    // right
   bottom=1,   // bottom
   off=2,      // off
  };
//---
#include <Trade\PositionInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
//--- input parameters
input group             "Common parameters"
input string               InpFont              = "Consolas";                       // Font
input group             "Profit of the current symbol"
input string               InpCurrentName       = "Profit of the current symbol";   // Label name (Profit of the current symbol)
input int                  InpCurrentFontSize   = 72;                               // Font size (Profit of the current symbol)
input group             "Profit for all symbols"
input ENUM_PROFIT_ALL      InpProfitAll         = bottom;                           // Profit All ...
input string               InpAllName           = "Profit for all symbols";         // Label name (Profit for all symbols)
input int                  InpAllFontSize       = 36;                               // Font size (Profit for all symbols)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create a timer with a 9 second period
   EventSetTimer(9);
//---
   ENUM_ANCHOR_POINT  anchor_current=ANCHOR_CENTER, anchor_all=ANCHOR_CENTER;
   switch(InpProfitAll)
     {
      case  right:
         anchor_current=ANCHOR_RIGHT;
         anchor_all=ANCHOR_LEFT;
         break;
      case  bottom:
         anchor_current=ANCHOR_LOWER;
         anchor_all=ANCHOR_UPPER;
         break;
     }
   LabelCreate(ChartID(),InpCurrentName,0,0,0,CORNER_LEFT_UPPER,"---",InpFont,InpCurrentFontSize,clrGray,0.0,anchor_current);
   if(InpProfitAll!=off)
     {
      LabelCreate(ChartID(),InpAllName,0,0,0,CORNER_LEFT_UPPER,"---",InpFont,InpAllFontSize,clrGray,0.0,anchor_all);
     }

   long x_distance;
   long y_distance;
//--- set window size
   ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance);
   ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance);


   LabelMove(ChartID(),InpCurrentName,(int)(x_distance/2),(int)(y_distance/2));
   if(InpProfitAll!=off)
      LabelMove(ChartID(),InpAllName,(int)(x_distance/2),(int)(y_distance/2));

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy the timer after completing the work
   EventKillTimer();
//--- reset the error value
   ResetLastError();
//--- delete the label
   ObjectDelete(ChartID(),InpCurrentName);
   if(InpProfitAll!=off)
      ObjectDelete(ChartID(),InpAllName);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   double profit_current=0.0,profit_all=0.0;
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         double profit=m_position.Swap()+m_position.Profit();
         profit_all+=profit;
         if(m_position.Symbol()==Symbol())
            profit_current+=profit;
        }
   LabelTextChange(ChartID(),InpCurrentName,profit_current);
   if(InpProfitAll!=off)
      LabelTextChange(ChartID(),InpAllName,profit_all);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   ENUM_ANCHOR_POINT  anchor_current=ANCHOR_CENTER, anchor_all=ANCHOR_CENTER;
   switch(InpProfitAll)
     {
      case  right:
         anchor_current=ANCHOR_RIGHT;
         anchor_all=ANCHOR_LEFT;
         break;
      case  bottom:
         anchor_current=ANCHOR_LOWER;
         anchor_all=ANCHOR_UPPER;
         break;
     }
//--- chart window size
   long x_distance;
   long y_distance;
//--- set window size
   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
     {
      Print("Failed to get the chart width! Error code = ",GetLastError());
      return;
     }
   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
     {
      Print("Failed to get the chart height! Error code = ",GetLastError());
      return;
     };
//---
   if(ObjectFind(ChartID(),InpCurrentName)<0)
     {
      LabelCreate(ChartID(),InpCurrentName,0,0,0,CORNER_LEFT_UPPER,"---",InpFont,InpCurrentFontSize,clrGray,0.0,anchor_current);
      LabelMove(ChartID(),InpCurrentName,(int)(x_distance/2),(int)(y_distance/2));
     }
   if(InpProfitAll!=off)
      if(ObjectFind(ChartID(),InpAllName)<0)
        {
         LabelCreate(ChartID(),InpAllName,0,0,0,CORNER_LEFT_UPPER,"---",InpFont,InpAllFontSize,clrGray,0.0,anchor_all);
         LabelMove(ChartID(),InpAllName,(int)(x_distance/2),(int)(y_distance/2));
        }
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- event of resizing the chart or modifying the chart properties using the properties dialog window
   if(id==CHARTEVENT_CHART_CHANGE)
     {
      //--- chart window size

     }
  }
//+------------------------------------------------------------------+
//| Create a text label                                              |
//+------------------------------------------------------------------+
bool LabelCreate(const long               chart_ID=0,                // chart's ID
                 const string             name="Label",              // label name
                 const int                sub_window=0,              // subwindow index
                 const int                x=0,                       // X coordinate
                 const int                y=0,                       // Y coordinate
                 const ENUM_BASE_CORNER   corner=CORNER_LEFT_UPPER,  // chart corner for anchoring
                 const string             text="Label",              // text
                 const string             font="Arial",              // font
                 const int                font_size=10,              // font size
                 const color              clr=clrRed,                // color
                 const double             angle=0.0,                 // text slope
                 const ENUM_ANCHOR_POINT  anchor=ANCHOR_CENTER,      // anchor type
                 const bool               back=false,                // in the background
                 const bool               selection=true,           // highlight to move
                 const bool               hidden=false,               // hidden in the object list
                 const long               z_order=0)                 // priority for mouse click
  {
//--- reset the error value
   ResetLastError();
//--- create a text label
   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": failed to create text label! Error code = ",GetLastError());
      return(false);
     }
//--- set label coordinates
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- set the chart's corner, relative to which point coordinates are defined
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- set the text
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- set text font
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- set font size
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- set the slope angle of the text
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- set anchor type
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- set color
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
   return(true);
  }
//+------------------------------------------------------------------+
//| Move the text label                                              |
//+------------------------------------------------------------------+
bool LabelMove(const long   chart_ID=0,   // chart's ID
               const string name="Label", // label name
               const int    x=0,          // X coordinate
               const int    y=0)          // Y coordinate
  {
//--- reset the error value
   ResetLastError();
//--- move the text label
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
     {
      Print(__FUNCTION__,
            ": failed to move X coordinate of the label! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
     {
      Print(__FUNCTION__,
            ": failed to move Y coordinate of the label! Error code = ",GetLastError());
      return(false);
     }
//--- successful execution
   return(true);
  }
//+------------------------------------------------------------------+
//| Change the label text                                            |
//+------------------------------------------------------------------+
bool LabelTextChange(const long   chart_ID=0,      // chart's ID
                     const string name="Label",    // object name
                     const double profit=0.0)      // profit
  {
//--- reset the error value
   ResetLastError();
//--- change object text
   color clr=clrGray;
   if(profit<0.0)
      clr=clrRed;
   if(profit>0.0)
      clr=clrBlue;
//--- change the text
   string text=DoubleToString(profit,2);
   if(name==InpAllName)
      text=" (all "+text+")";
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- set color
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- successful execution
   return(true);
  }
//+------------------------------------------------------------------+
 
Как можно скрывать нули, когда нет сделок?