//OD #property indicator_chart_window //---- input parameters extern int Hour_Open = 8; extern int AR_Period = 4; extern int Bars_In_Window = 28; extern color cvet = Black; extern int Width_Line = 2; int c; //---------------------------------------------------------- int init( ) { return( 0 ); } //---------------------------------------------------------- int deinit( ) { for( int d = 0; d <= c; d++ ) { string del1 = "b" + d; string del2 = "c" + d; ObjectDelete( del1 ); ObjectDelete( del2 ); } Comment( " " ); return( 0 ); } //----------------------------------------------------------- int start( ) { double open0; double h0; double l0; int e; int j; int dd; int sh; double atr; double ar1; double Sum; double max; double min; double open4; int pe = Period( ); int p; int s = 100 * ( 0.6 * Hour_Open + 0.000166667 ) / pe; int i; //------------------------------------------------------------- for( i = 0; i <= Bars_In_Window - 1; i++ ) { e++; c = i; string df1 = "b" + i; string df2 = "c" + i; datetime BarTime = iTime( NULL, PERIOD_D1, i ); int Bar = iBarShift ( NULL, 0, BarTime, false ); if( e <= Bars_In_Window ) { open4 = Open[Bar - s]; if( e <= 1 ) { datetime BarTime1 = iTime( NULL, PERIOD_D1, 0 ); int Bar1 = iBarShift( NULL, 0, BarTime1, false ); //---------------------------- if( Bar1 - s < 0 ) { sh = 1; } else { if( Bar1 - s >= 0 ) { sh = 0; } } //------------------------------ } // граница условия if( e <= 1 ) //-------------------------------------------------- datetime day = iTime( NULL, PERIOD_D1, 0 ); if( BarTime < day ) { dd = Bar - s - PERIOD_D1 / pe; j = PERIOD_D1 / pe; } else { if( BarTime >= day ) { dd = 0; j = Bar - s; } } //----------------------------------------------------- if( e > 1 ) { max = High[ iHighest( NULL, 0, MODE_HIGH, j, dd + 1 ) ]; min = Low[ iLowest( NULL, 0, MODE_LOW, j, dd + 1 ) ]; } else { if( ( e == 1 ) && ( Bar1 - s > 0 ) ) { max = High[ iHighest( NULL, 0, MODE_HIGH, ( j + 1 ), 0 ) ]; min = Low[ iLowest( NULL, 0, MODE_LOW, ( j + 1 ), 0 ) ]; } } //--------------------------------------------------------- if( ( Bar1 - s <= 0 ) && ( e == 1 ) ) { max = High[0]; min = Low[0]; } //--------------------------------------------------------- if( ( e > sh ) && ( e <= AR_Period + sh ) && ( Bars_In_Window >= AR_Period ) ) { atr = max - min; Sum = Sum + atr; ar1 = Sum / AR_Period; } //----------------------------------------------------------- if( e == 1 + sh ) { open0 = open4; h0 = max; l0 = min; } //---------------------------------------------------------- //open p = 1440 / pe; ObjectCreate( df1, OBJ_TREND, 0, Time[Bar - s], open4, Time[Bar - s + p], open4 ); ObjectSet( df1, OBJPROP_TIME1, Time[Bar - s] ); ObjectSet( df1, OBJPROP_TIME2, Time[Bar - s + p] ); ObjectSet( df1, OBJPROP_PRICE1, open4 ); ObjectSet( df1, OBJPROP_PRICE2, open4 ); ObjectSet( df1, OBJPROP_COLOR, cvet ); ObjectSet( df1, OBJPROP_RAY,0 ); ObjectSet( df1, OBJPROP_WIDTH, Width_Line ); ObjectSet( df1, OBJPROP_STYLE, 0 ); ObjectSet( df1, OBJPROP_BACK, 0 ); //----------------------------------------------------------- //max_min ObjectCreate( df2, OBJ_TREND, 0, Time[Bar - s], max, Time[Bar - s], min ); ObjectSet( df2, OBJPROP_TIME1, Time[Bar - s] ); ObjectSet( df2, OBJPROP_TIME2, Time[Bar - s] ); ObjectSet( df2, OBJPROP_PRICE1, max ); ObjectSet( df2, OBJPROP_PRICE2, min ); ObjectSet( df2, OBJPROP_COLOR, cvet ); ObjectSet( df2, OBJPROP_RAY, 0 ); ObjectSet( df2, OBJPROP_WIDTH, Width_Line ); ObjectSet( df2, OBJPROP_STYLE, 0 ); ObjectSet( df2, OBJPROP_BACK, 0 ); //----------------------------------------------------------- } // граница условия if( e <= Bars_In_Window ) } // граница цикла for( i = 0; i <= Bars_In_Window - 1; i++ ) //------------------------------------------------------------ Comment( "Open: ",open0, "\n","High: ", h0, "\n","Low: ", l0, "\n","Average Range ("+AR_Period+"): ", NormalizeDouble( ar1, Digits ) / MarketInfo( Symbol( ), MODE_TICKSIZE ) ); //------------------------------------------------------------ return( 0 ); }