//+------------------------------------------------------------------+ //| DailyData.mq5 | //+------------------------------------------------------------------+ #property copyright "www.forex-tsd.com" #property link "www.forex-tsd.com" #property indicator_chart_window #property indicator_buffers 5 #property indicator_plots 1 #property indicator_label1 "Daily data" #property indicator_type1 DRAW_COLOR_CANDLES #property indicator_color1 SteelBlue,PaleVioletRed,DimGray // // // // // input color TextColor = White; // Text color input color ButtonColor = SteelBlue; // Background color input color AreaColor = C'72,72,72'; // Area color input color SymbolColor = PaleVioletRed; // Symbol color input color LabelsColor = DarkGray; // Labels color input color ValuesNeutralColor = DimGray; // Color for unchanged values input color ValuesPositiveColor = MediumSeaGreen; // Color for positive values input color ValuesNegativeColor = PaleVioletRed; // Color for negative values input int XPosition = 10; input int YPosition = 10; input ENUM_BASE_CORNER Corner = CORNER_RIGHT_UPPER; input int CandleShift = 5; // Candle shift input int TimeFontSize = 10; // Font size for timer input int TimerShift = 7; // Timer shift // // // // // double candleOpen[]; double candleHigh[]; double candleLow[]; double candleClose[]; double candleColor[]; // // // // // #define bnameA "DailyDataShowBasic" #define bnameB "DailyDataShowSwaps" #define bnameC "DailyDataShowCandle" #define bnameD "DailyDataShowArea" #define bnameE "DailyDataShowTimer" #define cnameA "DailyDataArea" #define lnameA "DailyDataSymbol" #define lnameB "DailyDataClock" #define lnameC "DailyDataRange" #define lnameD "DailyDataChange" #define lnameE "DailyDataDistH" #define snameA "DailyDataSwapShort" #define snameB "DailyDataSwapLong" #define clockName "DailyDataTimer" // // // // // int atrHandle; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // int OnInit() { SetIndexBuffer(0,candleOpen ,INDICATOR_DATA); SetIndexBuffer(1,candleHigh ,INDICATOR_DATA); SetIndexBuffer(2,candleLow ,INDICATOR_DATA); SetIndexBuffer(3,candleClose,INDICATOR_DATA); SetIndexBuffer(4,candleColor,INDICATOR_COLOR_INDEX); PlotIndexSetInteger(0,PLOT_SHIFT,CandleShift); createObjects(); setControls(); atrHandle = iATR(NULL,0,30); return(0); } // // // // // void OnDeinit(const int reason) { switch(reason) { case REASON_REMOVE : for (int i=ObjectsTotal(0); i>= 0; i--) { string name = ObjectName(ChartID(),i); if (StringSubstr(name,0,9)=="DailyData") ObjectDelete(ChartID(),name); } ChartRedraw(); } if (!getState(bnameE)) EventKillTimer(); } // // // // // void OnTimer( ) { refreshData(); } 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[]) { refreshData(); return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void refreshData() { static bool inRefresh = false; if (inRefresh) return; inRefresh = true; // // // // // int bars = ArraySize(candleClose); ENUM_TIMEFRAMES period = PERIOD_D1; if (Period()>= PERIOD_D1) period=PERIOD_W1; if (Period()>= PERIOD_W1) period=PERIOD_MN1; static datetime times[1]; CopyTime(Symbol(),0,0,1,times); static MqlRates rates[1]; if (CopyRates( Symbol(),period,0,1,rates)<1) { inRefresh=false; return; } // // // // // candleOpen [bars-1] = rates[0].open; candleClose[bars-1] = rates[0].close; candleHigh [bars-1] = rates[0].high; candleLow [bars-1] = rates[0].low; candleColor[bars-1] = 2; if (candleOpen[bars-1]candleClose[bars-1]) candleColor[bars-1]=1; // // // // // ObjectSetDouble(0,cnameA,OBJPROP_PRICE,0,rates[0].high); ObjectSetDouble(0,cnameA,OBJPROP_PRICE,1,rates[0].low ); ObjectSetInteger(0,cnameA,OBJPROP_TIME,0,rates[0].time); ObjectSetInteger(0,cnameA,OBJPROP_TIME,1,times[0]); // // // // // PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,bars-1); double pipModifier=1; if (_Digits==3 || _Digits==5) pipModifier=10; setBasicValue(lnameA,DoubleToString(rates[0].close,_Digits) ,XPosition,YPosition+20,Corner); setBasicValue(lnameB,DoubleToString((rates[0].high-rates[0].low) /_Point/pipModifier,1),XPosition,YPosition+38,Corner); setBasicValue(lnameC,DoubleToString((rates[0].close-rates[0].open)/_Point/pipModifier,1),XPosition,YPosition+56,Corner); setBasicValue(lnameD,DoubleToString((rates[0].high-rates[0].close)/_Point/pipModifier,1),XPosition,YPosition+74,Corner); setBasicValue(lnameE,DoubleToString((rates[0].close-rates[0].low) /_Point/pipModifier,1),XPosition,YPosition+92,Corner); setSwapValue(snameA,DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_SWAP_SHORT),1),XPosition,YPosition+20,Corner); setSwapValue(snameB,DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_SWAP_LONG) ,1),XPosition,YPosition+38,Corner); // // // // // if (!getState(bnameE)) ShowClock(); ChartRedraw(); inRefresh=false; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { if(id==CHARTEVENT_OBJECT_CLICK) { if (sparam==bnameA) setControls(); if (sparam==bnameB) setControls(); if (sparam==bnameC) setControls(); if (sparam==bnameD) setControls(); if (sparam==bnameE) setControls(); } } // // // // // void createObjects() { if (ObjectFind(0,bnameA)<0) { ObjectCreate(0,bnameA,OBJ_BUTTON ,0,0,0,0,0); } if (ObjectFind(0,bnameB)<0) { ObjectCreate(0,bnameB,OBJ_BUTTON ,0,0,0,0,0); } if (ObjectFind(0,bnameC)<0) { ObjectCreate(0,bnameC,OBJ_BUTTON ,0,0,0,0,0); } if (ObjectFind(0,bnameD)<0) { ObjectCreate(0,bnameD,OBJ_BUTTON ,0,0,0,0,0); } if (ObjectFind(0,bnameE)<0) { ObjectCreate(0,bnameE,OBJ_BUTTON ,0,0,0,0,0); } if (ObjectFind(0,cnameA)<0) { ObjectCreate(0,cnameA,OBJ_RECTANGLE,0,0,0,0,0); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // bool getState(string name) { bool ans = (int)ObjectGetInteger(0,name,OBJPROP_STATE); return(ans); } void setVisibleState(string control, bool state) { if (state) ObjectSetInteger(0,control,OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS); else ObjectSetInteger(0,control,OBJPROP_TIMEFRAMES,OBJ_NO_PERIODS); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // #define heightForBasic 110 #define heightForSwap 56 int heightTotal; // // // // // void setControls() { int heightBasic = 20; if (!getState(bnameA)) heightBasic = heightForBasic; int heightSwap = 20; if (!getState(bnameB)) heightSwap = heightForSwap; int heightCandle = 20; int heightArea = 20; int heightTimer = 20; heightTotal = YPosition+heightArea+heightBasic+heightCandle+heightSwap+heightTimer; // // // // // int pos = YPosition; string caption; if (!getState(bnameA)) caption = "Hide basic data"; else caption = "Show basic data"; setButton(bnameA,caption,XPosition,pos,TextColor,ButtonColor,Corner); pos+=heightBasic; if (!getState(bnameB)) caption = "Hide swaps"; else caption = "Show swaps"; setButton(bnameB,caption,XPosition,pos,TextColor,ButtonColor,Corner); pos+=heightSwap; if (!getState(bnameC)) caption = "Hide candle"; else caption = "Show candle"; setButton(bnameC,caption,XPosition,pos,TextColor,ButtonColor,Corner); pos+=heightCandle; if (!getState(bnameD)) caption = "Hide area"; else caption = "Show area"; setButton(bnameD,caption,XPosition,pos,TextColor,ButtonColor,Corner); pos+=heightArea; if (!getState(bnameE)) caption = "Hide timer"; else caption = "Show timer"; setButton(bnameE,caption,XPosition,pos,TextColor,ButtonColor,Corner); setVisibleState(clockName,!getState(bnameE)); if (!getState(bnameE)) EventSetTimer(1); else EventKillTimer(); // // // // // ObjectSetInteger(0,cnameA,OBJPROP_COLOR,AreaColor); ObjectSetInteger(0,cnameA,OBJPROP_SELECTABLE,0); ObjectSetInteger(0,cnameA,OBJPROP_BACK,true); setVisibleState(cnameA,!getState(bnameD)); // // // // // setBasicLabel(lnameA,Symbol() ,XPosition,YPosition+20,Corner,SymbolColor,13); setBasicLabel(lnameB,"range" ,XPosition,YPosition+38,Corner,LabelsColor); setBasicLabel(lnameC,"change" ,XPosition,YPosition+56,Corner,LabelsColor); setBasicLabel(lnameD,"distance from high",XPosition,YPosition+74,Corner,LabelsColor); setBasicLabel(lnameE,"distance from low" ,XPosition,YPosition+92,Corner,LabelsColor); setVisibleState(lnameA+"v",!getState(bnameA)); setVisibleState(lnameB+"v",!getState(bnameA)); setVisibleState(lnameC+"v",!getState(bnameA)); setVisibleState(lnameD+"v",!getState(bnameA)); setVisibleState(lnameE+"v",!getState(bnameA)); ObjectSetInteger(0,lnameA+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,lnameA,OBJPROP_YDISTANCE)); ObjectSetInteger(0,lnameB+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,lnameB,OBJPROP_YDISTANCE)); ObjectSetInteger(0,lnameC+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,lnameC,OBJPROP_YDISTANCE)); ObjectSetInteger(0,lnameD+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,lnameD,OBJPROP_YDISTANCE)); ObjectSetInteger(0,lnameE+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,lnameE,OBJPROP_YDISTANCE)); // // // // // setSwapLabel(snameA,"swap short",XPosition,YPosition+20,Corner,LabelsColor); setSwapLabel(snameB,"swap long" ,XPosition,YPosition+38,Corner,LabelsColor); setVisibleState(snameA+"v",!getState(bnameB)); setVisibleState(snameB+"v",!getState(bnameB)); ObjectSetInteger(0,snameA+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,snameA,OBJPROP_YDISTANCE)); ObjectSetInteger(0,snameB+"v",OBJPROP_YDISTANCE,ObjectGetInteger(0,snameB,OBJPROP_YDISTANCE)); // // // // // if (getState(bnameC)) PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE); else PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); ChartRedraw(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void setButton(string name, string caption, int xposition, int yposition, color textColor, color backColor, int corner) { int relXPosition = xposition; if (corner==2 || corner==3) relXPosition = 190+xposition; int relYPosition = yposition; if (corner==1 || corner==2) relYPosition = heightTotal-yposition+YPosition; ObjectSetInteger(0,name,OBJPROP_COLOR,textColor); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,backColor); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,relXPosition); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,relYPosition); ObjectSetInteger(0,name,OBJPROP_XSIZE,190); ObjectSetInteger(0,name,OBJPROP_YSIZE,18); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0); ObjectSetInteger(0,name,OBJPROP_CORNER,corner); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,caption); } // // // // // void setBasicLabel(string name, string label, int xposition, int yposition, int corner, color labelColor, int fontSize=10, ENUM_ANCHOR_POINT anchor = ANCHOR_LEFT_UPPER, string statusCheck = bnameA, int displacement=0) { int relXPosition = xposition; if (corner==2 || corner==3) relXPosition = 190+xposition; int relYPosition = yposition+displacement; if (corner==1 || corner==2) relYPosition = heightTotal-yposition-displacement+YPosition; // // // // // if (ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_LABEL,0,0,0,0,0); ObjectSetInteger(0,name,OBJPROP_CORNER,corner); ObjectSetInteger(0,name,OBJPROP_COLOR,labelColor); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,relXPosition); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,relYPosition); ObjectSetInteger(0,name,OBJPROP_ANCHOR,anchor); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontSize); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetString(0,name,OBJPROP_TEXT,label); setVisibleState(name,!getState(statusCheck)); } // // // // // void setBasicValue(string name, string value, int xposition, int yposition, int corner, int fontSize=12, string statusCheck = bnameA, int displacement=0 ) { double dvalue = StringToDouble(value); color cvalue = ValuesNeutralColor; if (dvalue>0) cvalue = ValuesPositiveColor; if (dvalue<0) cvalue = ValuesNegativeColor; if (corner==0 || corner==1) xposition += 190; if (corner==2 || corner==3) xposition -= 190; setBasicLabel(name+"v",value,xposition,yposition,corner,cvalue,fontSize,ANCHOR_RIGHT_UPPER,statusCheck,displacement); } // // // // // void setSwapLabel(string name, string label, int xposition, int yposition, int corner, color labelColor, int fontSize=10) { int heightBasic = !getState(bnameA) ? heightForBasic : 20; setBasicLabel(name,label,xposition,yposition,corner,labelColor,fontSize,ANCHOR_LEFT_UPPER,bnameB,heightBasic); } void setSwapValue(string name, string value, int xposition, int yposition, int corner, int fontSize=12) { int heightBasic = !getState(bnameA) ? heightForBasic : 20; setBasicValue(name,value,xposition,yposition,corner,fontSize,bnameB,heightBasic); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void ShowClock() { int periodMinutes = periodToMinutes(Period()); int shift = periodMinutes*TimerShift*60; int currentTime = (int)TimeCurrent(); int localTime = (int)TimeLocal(); int barTime = (int)iTime(); int diff = (int)MathMax(round((currentTime-localTime)/3600.0)*3600,-24*3600); // // // // // color theColor; string time = getTime(barTime+periodMinutes*60-localTime-diff,theColor); time = (TerminalInfoInteger(TERMINAL_CONNECTED)) ? time : time+" x"; // // // // // if(ObjectFind(0,clockName) < 0) ObjectCreate(0,clockName,OBJ_TEXT,0,barTime+shift,0); ObjectSetString(0,clockName,OBJPROP_TEXT,time); ObjectSetString(0,clockName,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,clockName,OBJPROP_FONTSIZE,TimeFontSize); ObjectSetInteger(0,clockName,OBJPROP_COLOR,theColor); if (ChartGetInteger(0,CHART_SHIFT,0)==0 && (shift >=0)) ObjectSetInteger(0,clockName,OBJPROP_TIME,barTime-shift*3); else ObjectSetInteger(0,clockName,OBJPROP_TIME,barTime+shift); // // // // // double price[]; if (CopyClose(Symbol(),0,0,1,price)<=0) return; double atr[]; if (CopyBuffer(atrHandle,0,0,1,atr)<=0) return; price[0] += 3.0*atr[0]/4.0; // // // // // bool visible = ((ChartGetInteger(0,CHART_VISIBLE_BARS,0)-ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0)) > 0); if ( visible && price[0]>=ChartGetDouble(0,CHART_PRICE_MAX,0)) ObjectSetDouble(0,clockName,OBJPROP_PRICE,price[0]-1.5*atr[0]); else ObjectSetDouble(0,clockName,OBJPROP_PRICE,price[0]); } //+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ // // // // // string getTime(int times, color& theColor) { string stime = ""; int seconds; int minutes; int hours; // // // // // if (times < 0) { theColor = ValuesNegativeColor; times = (int)fabs(times); } else theColor = ValuesPositiveColor; seconds = (times%60); hours = (times-times%3600)/3600; minutes = (times-seconds)/60-hours*60; // // // // // if (hours>0) if (minutes < 10) stime = stime+(string)hours+":0"; else stime = stime+(string)hours+":"; stime = stime+(string)minutes; if (seconds < 10) stime = stime+":0"+(string)seconds; else stime = stime+":" +(string)seconds; return(stime); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // datetime iTime(ENUM_TIMEFRAMES forPeriod=PERIOD_CURRENT) { datetime times[]; if (CopyTime(Symbol(),forPeriod,0,1,times)<=0) return(TimeLocal()); return(times[0]); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // int periodToMinutes(int period) { int i; static int _per[]={1,2,3,4,5,6,10,12,15,20,30,0x4001,0x4002,0x4003,0x4004,0x4006,0x4008,0x400c,0x4018,0x8001,0xc001}; static int _min[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200}; if (period==PERIOD_CURRENT) period = Period(); for(i=0;i<20;i++) if(period==_per[i]) break; return(_min[i]); }