mql5/Experts/Examples/ChartInChart/ChartInChart.mq5

354 lines
30 KiB
MQL5

2025-08-05 01:57:33 -04:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| ChartInChart.mq5 |
//| Copyright 2000-2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
//--- inputs
input color TextColor=clrWhite;
input color BGColor=clrSteelBlue;
input int XPosition=10;
input int YPosition=10;
input int XSize=450;
input int YSize=300;
//--- variables
int xsize=450;
int ysize=300;
int xdist=10;
int ydist=10;
int scale=1;
int show=1;
int showdates =0;
int showprices=0;
//---
string curr_symbol;
string curr_period_str;
ENUM_TIMEFRAMES curr_period;
ENUM_TIMEFRAMES enper;
//+------------------------------------------------------------------+
//| Initialize expert |
//+------------------------------------------------------------------+
void OnInit()
{
//--- default value for symbol and period
curr_symbol=Symbol();
curr_period=Period();
PeriodToStr(curr_period,curr_period_str);
//--- copy sizes
xsize=XSize;
ysize=YSize;
xdist=XPosition;
ydist=YPosition;
//--- create objects
PIPCreate();
PIPSetParams();
//---
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Process chart events |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
if(id==CHARTEVENT_OBJECT_ENDEDIT && sparam=="PIPSymbol")
{
curr_symbol=ObjectGetString(0,"PIPSymbol",OBJPROP_TEXT);
ObjectSetString(0,"PIPChart",OBJPROP_SYMBOL,curr_symbol);
ChartRedraw();
//--- check symbol
curr_symbol=ObjectGetString(0,"PIPChart",OBJPROP_SYMBOL);
ObjectSetString(0,"PIPSymbol",OBJPROP_TEXT,curr_symbol);
}
else
if(id==CHARTEVENT_OBJECT_ENDEDIT && sparam=="PIPPeriod")
{
string per=ObjectGetString(0,"PIPPeriod",OBJPROP_TEXT);
if(StrToPeriod(per,enper))
{
if(enper) curr_period=enper;
PeriodToStr(curr_period,curr_period_str);
ObjectSetInteger(0,"PIPChart",OBJPROP_PERIOD,curr_period);
ChartRedraw();
}
}
else
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="PIPPricesButton")
{
showprices=(int)ObjectGetInteger(0,"PIPPricesButton",OBJPROP_STATE);
ObjectSetInteger(0,"PIPChart",OBJPROP_PRICE_SCALE,showprices);
ChartRedraw();
}
else
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="PIPDatesButton")
{
showdates=(int)ObjectGetInteger(0,"PIPDatesButton",OBJPROP_STATE);
ObjectSetInteger(0,"PIPChart",OBJPROP_DATE_SCALE,showdates);
ChartRedraw();
}
else
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="PIPPlusButton")
{
ObjectSetInteger(0,"PIPPlusButton",OBJPROP_STATE,0);
if(scale<5)
{
scale++;
ObjectSetInteger(0,"PIPChart",OBJPROP_CHART_SCALE,scale);
}
ChartRedraw();
}
else
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="PIPMinusButton")
{
ObjectSetInteger(0,"PIPMinusButton",OBJPROP_STATE,0);
if(scale>0)
{
scale--;
ObjectSetInteger(0,"PIPChart",OBJPROP_CHART_SCALE,scale);
}
ChartRedraw();
}
else
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="PIPHideButton")
{
ObjectSetInteger(0,"PIPHideButton",OBJPROP_STATE,0);
if(show)
{
//--- hide chart
ObjectSetString(0,"PIPHideButton",OBJPROP_TEXT,"\n");
PIPHideChart();
}
else
{
//--- restore chart
PIPSetParams();
}
//--- change state
show=1-show;
ChartRedraw();
}
}
//+------------------------------------------------------------------+
//| Deinitialize expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- delete all our objects
PIPDelete();
//---
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Create objects |
//+------------------------------------------------------------------+
void PIPCreate()
{
ObjectCreate(0,"PIPSymbol",OBJ_EDIT,0,0,0,0,0);
ObjectCreate(0,"PIPPeriod",OBJ_EDIT,0,0,0,0,0);
ObjectCreate(0,"PIPPlusButton",OBJ_BUTTON,0,0,0,0,0);
ObjectCreate(0,"PIPMinusButton",OBJ_BUTTON,0,0,0,0,0);
ObjectCreate(0,"PIPHideButton",OBJ_BUTTON,0,0,0,0,0);
ObjectCreate(0,"PIPDatesButton",OBJ_BUTTON,0,0,0,0,0);
ObjectCreate(0,"PIPPricesButton",OBJ_BUTTON,0,0,0,0,0);
ObjectCreate(0,"PIPChart",OBJ_CHART,0,0,0,0,0);
}
//+------------------------------------------------------------------+
//| Delete objects |
//+------------------------------------------------------------------+
void PIPDelete()
{
ObjectDelete(0,"PIPSymbol");
ObjectDelete(0,"PIPPeriod");
ObjectDelete(0,"PIPPlusButton");
ObjectDelete(0,"PIPMinusButton");
ObjectDelete(0,"PIPHideButton");
ObjectDelete(0,"PIPDatesButton");
ObjectDelete(0,"PIPPricesButton");
ObjectDelete(0,"PIPChart");
}
//+------------------------------------------------------------------+
//| Set objects params |
//+------------------------------------------------------------------+
void PIPSetParams()
{
//--- check size
if(xsize<250) xsize=250;
if(ysize<100) ysize=100;
//--- Symbol