//+------------------------------------------------------------------+ //| PairPlot.mqh | //| Copyright 2018, DNG® | //| http://www.mql5.com/en/users/dng | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, DNG®" #property link "http://www.mql5.com/en/users/dng" #property version "1.00" //--- #include #include "Histogram.mqh" #include "Scatter.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CTimeserie : public CObject { protected: string s_symbol; ENUM_TIMEFRAMES e_timeframe; ENUM_APPLIED_PRICE e_price; double d_timeserie[]; int i_bars; datetime dt_last_load; public: CTimeserie(void); ~CTimeserie(void); bool Create(const string symbol=NULL, const ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT, const ENUM_APPLIED_PRICE price=PRICE_CLOSE); //--- Change settings of timeserie void SetBars(const int value) { i_bars=value; } void Symbol(string value) { s_symbol=value; dt_last_load=0; } void Timeframe(ENUM_TIMEFRAMES value) { e_timeframe=value; dt_last_load=0; } void Price(ENUM_APPLIED_PRICE value) { e_price=value; dt_last_load=0; } //--- string Symbol(void) { return s_symbol; } ENUM_TIMEFRAMES Timeframe(void) { return e_timeframe; } ENUM_APPLIED_PRICE Price(void) { return e_price; } //--- Load data bool UpdateTimeserie(void); bool GetTimeserie(double ×erie[]) { return ArrayCopy(timeserie,d_timeserie)>0; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CTimeserie::CTimeserie(void) : s_symbol(_Symbol), e_timeframe(PERIOD_CURRENT), e_price(PRICE_CLOSE), i_bars(1000) { ArrayFree(d_timeserie); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CTimeserie::~CTimeserie(void) { ArrayFree(d_timeserie); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CTimeserie::Create(const string symbol=NULL,const ENUM_TIMEFRAMES timeframe=0, const ENUM_APPLIED_PRICE price=PRICE_CLOSE) { ResetLastError(); if(!SymbolInfoInteger(symbol,SYMBOL_SELECT)) if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL || !SymbolSelect(symbol,true)) return false; s_symbol=(symbol==NULL ? _Symbol : symbol); e_timeframe=(timeframe==PERIOD_CURRENT ? _Period : timeframe); e_price=price; UpdateTimeserie(); //--- return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CTimeserie::UpdateTimeserie(void) { datetime cur_date=(datetime)SeriesInfoInteger(s_symbol,e_timeframe,SERIES_LASTBAR_DATE); if(dt_last_load>=cur_date && ArraySize(d_timeserie)>=i_bars) return true; //--- MqlRates rates[]; int bars=0,i; double data[]; switch(e_price) { case PRICE_CLOSE: bars=CopyClose(s_symbol,e_timeframe,1,i_bars+1,data); break; case PRICE_OPEN: bars=CopyOpen(s_symbol,e_timeframe,1,i_bars+1,data); case PRICE_HIGH: bars=CopyHigh(s_symbol,e_timeframe,1,i_bars+1,data); case PRICE_LOW: bars=CopyLow(s_symbol,e_timeframe,1,i_bars+1,data); case PRICE_MEDIAN: bars=CopyRates(s_symbol,e_timeframe,1,i_bars+1,rates); bars=ArrayResize(data,bars); for(i=0;i