//+------------------------------------------------------------------+ //| Zone.mqh | //| Copyright 2023, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2023, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include "LowFractal.mqh" #include "HighFractal.mqh" #include "BuyEntryManager.mqh" #include "SellEntryManager.mqh" #include "BuyTradeManager.mqh" #include "SellTradeManager.mqh" #define SIZE_ATTACHED_FRACTALS #define TP_ARR_SIZE 3 class Zone { private: string id ; string timeFrame ; string type ; // has 2 types : TYPE_SUPPORT, TYPE_RESISTANCE string state ; // state is one of 5 states : STATE_CLEAN , STATE_TESTED, STATE_BROKEN, STATE_BROKEN_RETESTED, STATE_WAITING(used when price breaks structure, and is waiting to confirm BOS or a liquidity sweep) datetime leftEdge ; datetime rightEdge; double lowerEdgePrice ; double higherEdgePrice ; double stopLossPrice ; double tpPrices[TP_ARR_SIZE] ; public: Zone(); Zone:: Zone(string _zoneId,double _higherEdgePrice,double _lowerEdgePrice,datetime _leftEdge,datetime _rightEdge,string _timeFrameStr,string _type); ~Zone(); BuyEntryManager* buyEntryManager ; BuyTradeManager* buyTradeManager; SellEntryManager* sellEntryManager ; SellTradeManager* sellTradeManager ; // GETTERS double getHigherEdge(); double getLowerEdge(); datetime getLeftEdge(); datetime getRightEdge(); string getId(); string getTimeFrame(); string getState(); string getType(); double getStopLossPrice(); double getZoneHeight(); // SETTERS void setLeftEdge(datetime _leftEdge); void setRightEdge(datetime _rightEdge); void setLowerEdgePrice(double _lowerPirce); void setHigherEdgePrice(double _higherPrice); void setTimeFrame(string _timeframe); void setId(string _id); void setType(string _type); void setState(string _state); void setStopLossPrice(double slPrice); bool setTakeProfit(double tpVal); // returns false if there is no valid slot in the tp's array, and true on success // OTHER FUNCTIONS void printTpLevels(); void printTradeManagerData(); }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ Zone:: Zone() { buyEntryManager = new BuyEntryManager(); buyTradeManager = new BuyTradeManager(); sellEntryManager = new SellEntryManager(); sellTradeManager = new SellTradeManager(); for(int i=0 ;i< TP_ARR_SIZE ;i++){ // initialize the tp array with -1's tpPrices[i] = -1 ; } } Zone:: Zone(string _zoneId,double _higherEdgePrice,double _lowerEdgePrice,datetime _leftEdge,datetime _rightEdge,string _timeFrameStr,string _type){ buyEntryManager = new BuyEntryManager(); buyTradeManager = new BuyTradeManager(); sellEntryManager = new SellEntryManager(); sellTradeManager = new SellTradeManager(); id = _zoneId ; timeFrame = _timeFrameStr; type = _type; // has 2 types : TYPE_SUPPORT, TYPE_RESISTANCE leftEdge = _leftEdge; rightEdge = _rightEdge; lowerEdgePrice = _lowerEdgePrice; higherEdgePrice = _higherEdgePrice; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ Zone::~Zone() { delete buyEntryManager; delete sellEntryManager; delete buyTradeManager; delete sellTradeManager; } //+------------------------------------------------------------------+ // GETTERS //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime Zone:: getLeftEdge() { return leftEdge; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ datetime Zone:: getRightEdge() { return rightEdge ; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Zone:: getHigherEdge() { return higherEdgePrice; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double Zone:: getLowerEdge() { return lowerEdgePrice; } string Zone :: getState(){ return state ; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string Zone:: getId() { return id; } string Zone:: getTimeFrame() {return timeFrame ;} string Zone:: getType(){ return type ; } double Zone :: getStopLossPrice(){ return stopLossPrice ; } // SETTERS //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone:: setLeftEdge(datetime _leftEdge) { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone:: setRightEdge(datetime _rightEdge) { } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone:: setTimeFrame(string _timeframe) { timeFrame = _timeframe; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone:: setLowerEdgePrice(double _lowerPirce) { lowerEdgePrice = _lowerPirce; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone::setHigherEdgePrice(double _higherPrice) { higherEdgePrice = _higherPrice ; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Zone:: setId(string _id) { id = _id; } void Zone:: setType(string _type){ type = _type ; } void Zone:: setState(string _state){ state = _state ; } void Zone:: setStopLossPrice(double slPrice){ stopLossPrice = slPrice ; } bool Zone:: setTakeProfit(double tpVal){ for(int i=0; i