riskrewardbox

Author: Copyright 2024, MetaQuotes Ltd.
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
0 Views
0 Downloads
0 Favorites
riskrewardbox
//+------------------------------------------------------------------+
//|                                                riskrewardbox.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict
#property indicator_chart_window

input    bool              DrawAllChart   =  false;      // Draw Box on all opened charts
input    ENUM_TIMEFRAMES   TimeFrame      =  PERIOD_H1;  // Cart timeframe
string   OBJprefix         =  "ziwoxRSRW";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ChartDraw();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   long     chartID           =  ChartFirst();
   string   symb              =  "";
   ENUM_TIMEFRAMES ChartPer   =  0;
   if (DrawAllChart)
      while(chartID>=0)
      {
         ObjectsDeleteAll(chartID,OBJprefix,-1,-1);
         chartID = ChartNext(chartID);
      }
   else 
      ObjectsDeleteAll(0,OBJprefix,-1,-1);
      
   ObjectDelete(0,"Reset");   
  }
  
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   ButtonCreate(0,"Reset",0,20,30,110,25,CORNER_LEFT_UPPER,"Reset All Box","Trebuchet MS",10,clrWhite,clrMediumSeaGreen,clrMediumSeaGreen,false,false,false,true,1,"");
   return(1);   
  }

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      if(sparam=="Reset") // Pause forwarder
       {
         ChartClean();
       }
     }
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
  
      double   pricePink1    =  ObjectGetDouble(0, OBJprefix+".Risk_Reward_Pink", OBJPROP_PRICE, 0); // low pink
      double   pricePink2    =  ObjectGetDouble(0, OBJprefix+".Risk_Reward_Pink", OBJPROP_PRICE, 1); // top pink
      double   priceGreen1    = ObjectGetDouble(0, OBJprefix+".Risk_Reward_Green", OBJPROP_PRICE, 0); // low green
      double   priceGreen2    = ObjectGetDouble(0, OBJprefix+".Risk_Reward_Green", OBJPROP_PRICE, 1); // top green
      
      double maxPink = MathMax(pricePink1, pricePink2);
      double minPink = MathMin(pricePink1, pricePink2);
      double maxGreen = MathMax(priceGreen1, priceGreen2);
      double minGreen = MathMin(priceGreen1, priceGreen2);

     
      if(sparam==OBJprefix+".Risk_Reward_Green" )
       {

         double pinkSize = maxPink - minPink;
         int      time1    =  ObjectGetInteger (0, OBJprefix+".Risk_Reward_Green",OBJPROP_TIME, 0);
         int      time2    =  ObjectGetInteger (0, OBJprefix+".Risk_Reward_Green",OBJPROP_TIME, 1);
         
         
         if (maxPink > maxGreen ) { // Risk at top
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE, 0, maxGreen); 
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE, 1, maxGreen+pinkSize);
         }
         else { // Risk at bottom
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE, 1, minGreen); 
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_PRICE, 0, minGreen-pinkSize);
         }
         
         ObjectSetInteger(0, OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME, 0, time1);     // mid
         ObjectSetInteger(0, OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME, 1, time2);     // mid
         ChartRedraw(0);
       }
       
      if(sparam==OBJprefix+".Risk_Reward_Pink" )
       {
         double greeSize = maxGreen - minGreen;
         int      time1    =  ObjectGetInteger (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME, 0);
         int      time2    =  ObjectGetInteger (0, OBJprefix+".Risk_Reward_Pink",OBJPROP_TIME, 1);
         
         if (maxGreen > maxPink ) { // Reward at top
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Green", OBJPROP_PRICE, 0, maxPink); 
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE, 1, maxPink+greeSize);
         }
         else { // Reward at bottom
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE, 1, minPink); 
            ObjectSetDouble (0, OBJprefix+".Risk_Reward_Green",OBJPROP_PRICE, 0, minPink-greeSize);
         }         
         
         ObjectSetInteger(0, OBJprefix+".Risk_Reward_Green", OBJPROP_TIME, 0, time1);
         ObjectSetInteger(0, OBJprefix+".Risk_Reward_Green", OBJPROP_TIME, 1, time2);
         ChartRedraw(0);
       }
     }  
   
}
//+------------------------------------------------------------------+
bool ButtonCreate(const long              chart_ID=0,               // chart's ID
                  const string            name="Button",            // button name
                  const int               sub_window=0,             // subwindow index
                  const int               x=0,                      // X coordinate
                  const int               y=0,                      // Y coordinate
                  const int               width=50,                 // button width
                  const int               height=18,                // button height
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring
                  const string            text="Button",            // text
                  const string            font="Arial",             // font
                  const int               font_size=10,             // font size
                  const color             clr=clrBlack,             // text color
                  const color             back_clr=C'236,233,216',  // background color
                  const color             border_clr=clrNONE,       // border color
                  const bool              state=false,              // pressed/released
                  const bool              back=false,               // in the background
                  const bool              selection=false,          // highlight to move
                  const bool              hidden=true,              // hidden in the object list
                  const long              z_order=0,                // priority for mouse click
                  const string            tooltip="\n")             // tooltip for mouse hover
  {
//--- reset the error value
   ResetLastError();
//---
   if(ObjectFind(chart_ID,name)!=0)
     {
      if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
        {
         Print(__FUNCTION__,
               ": failed to create the button! Error code = ",_LastError);
         return(false);
        }
      //--- SetObjects
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);
     }
     else
     {
     ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);
     }
//---
   return(true);
  }

void ChartClean()
{
   long     chartID           =  ChartFirst();
   string   symb              =  "";
   ENUM_TIMEFRAMES ChartPer   =  0;
   if (DrawAllChart)
   while(chartID>=0)
     {
      ObjectsDeleteAll(chartID,OBJprefix,-1,-1);
      chartID = ChartNext(chartID);
     }
   else ObjectsDeleteAll(0,OBJprefix,-1,-1);
   ObjectSetInteger(0,"Reset",OBJPROP_STATE,false);
   ChartDraw();
}


//====================================================================
//+------------------------------------------------------------------+
//| OnTick Deinit                                                    |
//+------------------------------------------------------------------+
void ChartDraw()
{
   long     chart_ID             =  ChartFirst();
   string   symbl                =  "";
   ENUM_TIMEFRAMES chartperiod   =  0;
   if (DrawAllChart)
   while(chart_ID>=0)
     {
      symbl          =  ChartSymbol(chart_ID);
      chartperiod    =  ChartPeriod(chart_ID);
      string   name  =  OBJprefix+".Risk_Reward_Pink";
      double   top   =  iHigh(symbl,chartperiod,iHighest(symbl,chartperiod,MODE_HIGH,20,0));
      double   low   =  iLow(symbl,chartperiod,iLowest(symbl,chartperiod,MODE_LOW,20,0));
      double   mid   =  SymbolInfoDouble(symbl,SYMBOL_ASK);
      if (ObjectFind(chart_ID,name)<0)
      {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),low,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,mid);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrPink);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
      ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);  
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      }
      name  =  OBJprefix+".Risk_Reward_Green";
      if (ObjectFind(chart_ID,name)<0)
      {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),mid,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,top);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrLightGreen);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
      ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);  
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      }
      chart_ID = ChartNext(chart_ID);
     }
     else {
      chart_ID       =  0;
      symbl          =  Symbol();
      chartperiod    =  PERIOD_CURRENT;
      string   name  =  OBJprefix+".Risk_Reward_Pink";
      double   top   =  iHigh(symbl,chartperiod,iHighest(symbl,chartperiod,MODE_HIGH,20,0));
      double   low   =  iLow(symbl,chartperiod,iLowest(symbl,chartperiod,MODE_LOW,20,0));
      double   mid   =  SymbolInfoDouble(symbl,SYMBOL_ASK);
      if (ObjectFind(chart_ID,name)<0)
      {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),low,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,mid);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrPink);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
      ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);  
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      }
      name  =  OBJprefix+".Risk_Reward_Green";
      if (ObjectFind(chart_ID,name)<0)
      {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE,0,iTime(symbl,chartperiod,0),mid,iTime(symbl,chartperiod,0)+PeriodSeconds()*25,top);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clrLightGreen);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,2);
      ObjectSetInteger(chart_ID,name,OBJPROP_FILL,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);  
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,false);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      }
     }
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---