//+------------------------------------------------------------------+ //| ChartObjectsLines.mqh | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //| All lines. | //+------------------------------------------------------------------+ #include "ChartObject.mqh" //+------------------------------------------------------------------+ //| Class CChartObjectVLine. | //| Purpose: Class of the "Vertical line" object of chart. | //| Derives from class CChartObject. | //+------------------------------------------------------------------+ class CChartObjectVLine : public CChartObject { public: CChartObjectVLine(void); ~CChartObjectVLine(void); //--- method of creating the object bool Create(long chart_id,const string name,const int window,const datetime time); //--- method of identifying the object virtual int Type(void) const { return(OBJ_VLINE); } }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectVLine::CChartObjectVLine(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectVLine::~CChartObjectVLine(void) { } //+------------------------------------------------------------------+ //| Create object "Vertical line" | //+------------------------------------------------------------------+ bool CChartObjectVLine::Create(long chart_id,const string name,const int window,const datetime time) { if(!ObjectCreate(chart_id,name,OBJ_VLINE,window,time,0.0)) return(false); if(!Attach(chart_id,name,window,1)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Class CChartObjectHLine. | //| Purpose: Class of the "Horizontal line" object of chart. | //| Derives from class CChartObject. | //+------------------------------------------------------------------+ class CChartObjectHLine : public CChartObject { public: CChartObjectHLine(void); ~CChartObjectHLine(void); //--- method of creating the object bool Create(long chart_id,const string name,const int window,const double price); //--- method of identifying the object virtual int Type(void) const { return(OBJ_HLINE); } }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectHLine::CChartObjectHLine(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectHLine::~CChartObjectHLine(void) { } //+------------------------------------------------------------------+ //| Create object "Horizontal line" | //+------------------------------------------------------------------+ bool CChartObjectHLine::Create(long chart_id,const string name,const int window,const double price) { if(!ObjectCreate(chart_id,name,OBJ_HLINE,window,0,price)) return(false); if(!Attach(chart_id,name,window,1)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Class CChartObjectTrend. | //| Purpose: Class of the "Trendline" object of chart. | //| Derives from class CChartObject. | //| It is the parent class for all objects that have properties | //| RAY_LEFT and RAY_RIGHT. | //+------------------------------------------------------------------+ class CChartObjectTrend : public CChartObject { public: CChartObjectTrend(void); ~CChartObjectTrend(void); //--- methods of access to properties of the object bool RayLeft(void) const; bool RayLeft(const bool new_sel) const; bool RayRight(void) const; bool RayRight(const bool new_sel) const; //--- method of creating the object bool Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2); //--- method of identifying the object virtual int Type(void) const { return(OBJ_TREND); } //--- methods for working with files virtual bool Save(const int file_handle); virtual bool Load(const int file_handle); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectTrend::CChartObjectTrend(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectTrend::~CChartObjectTrend(void) { } //+------------------------------------------------------------------+ //| Create object "Trendline" | //+------------------------------------------------------------------+ bool CChartObjectTrend::Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2) { if(!ObjectCreate(chart_id,name,OBJ_TREND,window,time1,price1,time2,price2)) return(false); if(!Attach(chart_id,name,window,2)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Get the "Ray left" flag | //+------------------------------------------------------------------+ bool CChartObjectTrend::RayLeft(void) const { //--- check if(m_chart_id==-1) return(false); //--- result return((bool)ObjectGetInteger(m_chart_id,m_name,OBJPROP_RAY_LEFT)); } //+------------------------------------------------------------------+ //| Set the "Ray left" flag | //+------------------------------------------------------------------+ bool CChartObjectTrend::RayLeft(const bool new_ray) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_RAY_LEFT,new_ray)); } //+------------------------------------------------------------------+ //| Get the "Ray right" flag | //+------------------------------------------------------------------+ bool CChartObjectTrend::RayRight(void) const { //--- check if(m_chart_id==-1) return(false); //--- result return((bool)ObjectGetInteger(m_chart_id,m_name,OBJPROP_RAY_RIGHT)); } //+------------------------------------------------------------------+ //| Set the "Ray right" flag | //+------------------------------------------------------------------+ bool CChartObjectTrend::RayRight(const bool new_ray) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_RAY_RIGHT,new_ray)); } //+------------------------------------------------------------------+ //| Writing parameters of object to file | //+------------------------------------------------------------------+ bool CChartObjectTrend::Save(const int file_handle) { //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- write if(!CChartObject::Save(file_handle)) return(false); //--- write value of the "Ray left" property if(FileWriteInteger(file_handle,(int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_RAY_LEFT),CHAR_VALUE)!=sizeof(char)) return(false); //--- write value of the "Ray right" property if(FileWriteInteger(file_handle,(int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_RAY_RIGHT),CHAR_VALUE)!=sizeof(char)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Reading parameters of object from file | //+------------------------------------------------------------------+ bool CChartObjectTrend::Load(const int file_handle) { //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- read if(!CChartObject::Load(file_handle)) return(false); //--- read value of the "Ray left" property if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_RAY_LEFT,FileReadInteger(file_handle,CHAR_VALUE))) return(false); //--- read value of the "Ray right" property if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_RAY_RIGHT,FileReadInteger(file_handle,CHAR_VALUE))) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Class CChartObjectTrendByAngle. | //| Puprose: Class of the "Trendline by angle" object of chart. | //| Derives from class CChartObjectTrend. | //+------------------------------------------------------------------+ class CChartObjectTrendByAngle : public CChartObjectTrend { public: CChartObjectTrendByAngle(void); ~CChartObjectTrendByAngle(void); //--- methods of access to properties of the object double Angle(void) const; bool Angle(const double angle) const; //--- method of creating the object bool Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2); //--- method of identifying the object virtual int Type(void) const { return(OBJ_TRENDBYANGLE); } }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectTrendByAngle::CChartObjectTrendByAngle(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectTrendByAngle::~CChartObjectTrendByAngle(void) { } //+------------------------------------------------------------------+ //| Create object "Trendline by angle" | //+------------------------------------------------------------------+ bool CChartObjectTrendByAngle::Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2) { if(!ObjectCreate(chart_id,name,OBJ_TRENDBYANGLE,window,time1,price1,time2,price2)) return(false); if(!Attach(chart_id,name,window,2)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Get the "Angle" property | //+------------------------------------------------------------------+ double CChartObjectTrendByAngle::Angle(void) const { //--- check if(m_chart_id==-1) return(EMPTY_VALUE); //--- return(ObjectGetDouble(m_chart_id,m_name,OBJPROP_ANGLE)); } //+------------------------------------------------------------------+ //| Set the "Angle" property | //+------------------------------------------------------------------+ bool CChartObjectTrendByAngle::Angle(const double angle) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetDouble(m_chart_id,m_name,OBJPROP_ANGLE,angle)); } //+------------------------------------------------------------------+ //| Class CChartObjectCycles. | //| Purpose: Class of the "Cycle lines" object of chart. | //| Derives from class CChartObject. | //+------------------------------------------------------------------+ class CChartObjectCycles : public CChartObject { public: CChartObjectCycles(void); ~CChartObjectCycles(void); //--- method of creating the object bool Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2); //--- method of identifying the object virtual int Type(void) const { return(OBJ_CYCLES); } }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectCycles::CChartObjectCycles(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectCycles::~CChartObjectCycles(void) { } //+------------------------------------------------------------------+ //| Create object "Cycle lines" | //+------------------------------------------------------------------+ bool CChartObjectCycles::Create(long chart_id,const string name,const int window, const datetime time1,const double price1, const datetime time2,const double price2) { if(!ObjectCreate(chart_id,name,OBJ_CYCLES,window,time1,price1,time2,price2)) return(false); if(!Attach(chart_id,name,window,2)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+