Price Data Components
0
Views
0
Downloads
0
Favorites
TR_EUR
//+------------------------------------------------------------------+
//| TR_EU.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, sx ted"
#property indicator_chart_window
//---- input parameters
extern color ShadeColor =DarkSlateGray;
extern bool SetImmediacyON=true; // if set ON forces shading after first tick in new session
extern int MAX_DAYS_TO_SHADE=2; // maximum number of days back from last chart date to be shaded
// my session
extern int SESSION_OPEN_HH =08; // session open hour
extern int SESSION_OPEN_MM =00; // session open minutes
extern int SESSION_CLOSE_HH=18; // session close hour
extern int SESSION_CLOSE_MM=30; // session close minutes
double dLow, dHigh, TR;
//---- global variables to program
string obj[], // array of object names
sName, // name for the object
sStart; // session open time HH:Mi
datetime tStart; // session open date+time
int iSessionDuration, // session duration in seconds
iStart=-1, iEnd; // x co-ordinates of object (index)
datetime tTrueStart; // if SetImmediacyON keep track of correct start datetime
int iExtra=0; // forces shading if SetImmediacyON and value is set to 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Period() > PERIOD_H4) return(0); // no shading required
// determine open time of first bar in the session matching chart time frame:
sStart=" "+TimeToStr(StrToTime("2006.5.22")+(MathFloor((SESSION_OPEN_HH*60+SESSION_OPEN_MM)/Period())*Period())*60, TIME_MINUTES);
// calculate session duration, check if session covers two days (cater for GMT+3 and above)
if(SESSION_OPEN_HH*60+SESSION_OPEN_MM >= SESSION_CLOSE_HH*60+SESSION_CLOSE_MM) iSessionDuration = ((23-SESSION_OPEN_HH+SESSION_CLOSE_HH)*60+59-SESSION_OPEN_MM+SESSION_CLOSE_MM+1)*60;
else iSessionDuration = ( (SESSION_CLOSE_HH*60+SESSION_CLOSE_MM) - (SESSION_OPEN_HH*60+SESSION_OPEN_MM) )*60;
// round session duration to suit chart time frame
datetime tNewStart=StrToTime(TimeToStr(Time[0], TIME_DATE)+sStart);
datetime tNewEnd =StrToTime(TimeToStr(Time[0], TIME_DATE)+" "+DoubleToStr(SESSION_OPEN_HH ,0)+":"+DoubleToStr(SESSION_OPEN_MM ,0))+iSessionDuration;
iSessionDuration =MathRound((tNewEnd-tNewStart)/Period())*Period();
// find first bar at or nearest to start of first day to shade
int iCount=0;
for(int i=0; i < Bars; i++)
{
tNewStart=StrToTime(TimeToStr(Time[i], TIME_DATE)+sStart);
if(Time[i] >= tNewStart && Time[i] < tNewStart+iSessionDuration)
{
if(TimeToStr(Time[i], TIME_DATE) != sName) // new session
{
sName=TimeToStr(Time[i], TIME_DATE);
iCount++;
if(iCount > MAX_DAYS_TO_SHADE) break;
}
iStart=i;
}
}
iCount=iStart;
iStart=-1;
sName="";
// shade previous sessions and current session if started
for(i=iCount; i >= 0; i--)
{
tNewStart=StrToTime(TimeToStr(Time[i], TIME_DATE)+sStart);
if(Time[i] >= tNewStart && Time[i] < tNewStart+iSessionDuration)
{
if(TimeToStr(Time[i], TIME_DATE) == sName) // current session
{
dLow =MathMin(dLow, Low[i]);
dHigh=MathMax(dHigh, High[i]);
}
else // new session started
{
sName =TimeToStr(Time[i], TIME_DATE);
tStart=tNewStart;
iStart=i;
dLow =Low[i];
dHigh =High[i];
}
iEnd=i;
}
else if(iStart > -1)
{
Comment (Low,High);
CreateRectangle(true);
iStart=-1;
}
}
if(iStart > -1) CreateRectangle(true); // paint the last one if session not closed
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
for(int i=0; i < ArraySize(obj); i++)
{
if(ObjectFind(obj[i]) > -1) ObjectDelete(obj[i]);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if(Period() > PERIOD_H4) return(0); // no shading required
// check if in current session
if(Time[0] >= tStart && Time[0] < tStart+iSessionDuration)
{
// still in current session, so just widen the rectangle
dLow =MathMin(dLow, Low[0]);
dHigh=MathMax(dHigh, High[0]);
ObjectSet(sName,OBJPROP_PRICE1,dLow-Point);
ObjectSet(sName,OBJPROP_TIME2 ,Time[iEnd]);
ObjectSet(sName,OBJPROP_PRICE2,dHigh+Point);
if(iExtra == 1)
{
// determine if correct start time is among the bars
int iShift=iBarShift(NULL, 0, tTrueStart, false);
// reset to correct start time if rectangle length > 1
if(iShift > 1) { ObjectSet(sName,OBJPROP_TIME1,Time[iShift]); iExtra=0; }
}
ObjectsRedraw();
}
else
{
// check if new session started
datetime tNewStart=StrToTime(TimeToStr(iTime(NULL, PERIOD_D1, 0), TIME_DATE)+sStart);
if( ( SetImmediacyON && ((Time[0] >= tNewStart && Time[0] < tNewStart+iSessionDuration) || (LocalTime() >= tNewStart && LocalTime() < tNewStart+iSessionDuration) ) ) ||
(!SetImmediacyON && Time[0] >= tNewStart && Time[0] < tNewStart+iSessionDuration)
)
{
// new session started
sName =TimeToStr(iTime(NULL, PERIOD_D1, 0), TIME_DATE);
tStart=tNewStart;
iStart=0;
iEnd =0;
dLow =Low[0];
dHigh =High[0];
CreateRectangle(false);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| Create and paint rectangle |
//+------------------------------------------------------------------+
void CreateRectangle(bool bCalledFromInit)
{
if(SetImmediacyON && iStart == iEnd)
{
tTrueStart=Time[iStart];
iExtra++; // force shading
}
sName="EUR_TR_"+sName;
ObjectCreate(sName,OBJ_RECTANGLE,0,Time[iStart+iExtra],dLow-Point,Time[iEnd],dHigh+Point);
ObjectSet(sName,OBJPROP_COLOR,ShadeColor);
// keep track of object names for tidying up upon exit
int iCount=ArraySize(obj);
if(bCalledFromInit || iCount < MAX_DAYS_TO_SHADE) ArrayResize(obj, iCount+1);
else if(ObjectFind(obj[iCount-1]) > -1) ObjectDelete(obj[iCount-1]); // delete last one to respect MAX_DAYS_TO_SHADE
for(int i = ArraySize(obj)-1; i > 0; i--)
{
obj[i]=obj[i-1]; // shuffle object names down and losing one
}
obj[0]=sName;
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---