//+------------------------------------------------------------------+
//| Opening_Range_MTF.mq4 |
//| Copyright © 2008, kris.pivo[at]gmail.com |
//| 16 Nov 2008 |
//+------------------------------------------------------------------+
#property copyright "© Kris"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 C'000,100,000' // Buy Target 2
#property indicator_color2 C'000,150,000' // Buy Target 1
#property indicator_color3 C'000,200,000' // Buy Signal
#property indicator_color4 C'100,100,100' // Opening Range High
#property indicator_color5 C'100,100,100' // Opening Range Low
#property indicator_color6 C'200,000,000' // Sell Signal
#property indicator_color7 C'150,000,000' // Sell Target 1
#property indicator_color8 C'100,000,000' // Sell Target 2
//---- Parameters
extern int SigConfirm = 4;
extern int TargetOne = 25;
extern int TargetTwo = 50;
//---- variables
int DataPeriod;
int LookBackTF;
//---- buffers
double OpenH1[]; // Buy Target 2
double OpenH2[]; // Buy Target 1
double OpenHS[]; // Buy Signal
double OpenHi[]; // Opening Range High
double OpenLo[]; // Opening Range Low
double OpenLS[]; // Sell Signal
double OpenL1[]; // Sell Target 1
double OpenL2[]; // Sell Target 2
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() {
//---- indicators
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,160);
SetIndexBuffer(0,OpenH2);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,160);
SetIndexBuffer(1,OpenH1);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,167);
SetIndexBuffer(2,OpenHS);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,160);
SetIndexBuffer(3,OpenHi);
SetIndexStyle(4,DRAW_ARROW);
SetIndexArrow(4,160);
SetIndexBuffer(4,OpenLo);
SetIndexStyle(5,DRAW_ARROW);
SetIndexArrow(5,167);
SetIndexBuffer(5,OpenLS);
SetIndexStyle(6,DRAW_ARROW);
SetIndexArrow(6,160);
SetIndexBuffer(6,OpenL1);
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,160);
SetIndexBuffer(7,OpenL2);
switch(Period())
{
case PERIOD_M1: DataPeriod = 5; LookBackTF = 5; break;
case PERIOD_M5: DataPeriod = 15; LookBackTF = 3; break;
case PERIOD_M15: DataPeriod = 30; LookBackTF = 2; break;
}
string short_name = "Opening Range";
IndicatorShortName(short_name);
return(1);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
ObjectDelete("OR-H2");
ObjectDelete("OR-H1");
ObjectDelete("OR-HS");
ObjectDelete("OR-LS");
ObjectDelete("OR-L1");
ObjectDelete("OR-L2");
Comment("");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
double prevL=0, prevH=0, prevC=0, prevO=0;
double ORHS, ORHi, ORLo, ORLS;
double ORH1, ORH2, ORL1, ORL2;
int thisHour = -1;
int start() {
if (Period() > 15) return(0); //Chart cannot be higher than M15
int counted_bars=IndicatorCounted();
if (counted_bars >0) counted_bars--;
int limit=Bars-counted_bars;
int period = MathCeil(60 / Period());
for (int i = limit-1; i>=0; i--)
{
if (i + period < Bars && TimeMinute(iTime(NULL,0,i)) == 0 && thisHour != TimeHour(iTime(NULL,0,i)) )
{
thisHour = TimeHour(iTime(NULL,0,i));
prevH = High[Highest(NULL, 0, MODE_HIGH, DataPeriod, i+1-LookBackTF)];
prevL = Low [Lowest (NULL, 0, MODE_LOW, DataPeriod, i+1-LookBackTF)];
ORHi = prevH;
ORLo = prevL;
ORHS = ORHi + SigConfirm * Point;
ORLS = ORLo - SigConfirm * Point;
ORH1 = ORHS + TargetOne * Point;
ORH2 = ORHS + TargetTwo * Point;
ORL1 = ORLS - TargetOne * Point;
ORL2 = ORLS - TargetTwo * Point;
}
if (ORHi > 0)
{
OpenH2[i] = ORH2;
OpenH1[i] = ORH1;
OpenHS[i] = ORHS;
OpenHi[i] = ORHi;
OpenLo[i] = ORLo;
OpenLS[i] = ORLS;
OpenL1[i] = ORL1;
OpenL2[i] = ORL2;
}
}
DoLabel( "OR-H2", OpenH2[0], indicator_color1 );
DoLabel( "OR-H1", OpenH1[0], indicator_color2 );
DoLabel( "OR-HS", OpenHS[0], indicator_color3 );
DoLabel( "OR-LS", OpenLS[0], indicator_color6 );
DoLabel( "OR-L1", OpenL1[0], indicator_color7 );
DoLabel( "OR-L2", OpenL2[0], indicator_color8 );
Comment("Opening Range");
return(0); }
void DoLabel( string dName, double dValue, color dColor )
{
if (ObjectFind(dName) != 0)
{
ObjectCreate(dName,OBJ_ARROW,0,Time[0],dValue);
ObjectSet(dName,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(dName,OBJPROP_COLOR,dColor);
}
else
{
ObjectMove(dName,0,Time[0],dValue);
}
}
//+------------------------------------------------------------------+
Comments