//+------------------------------------------------------------------+ //| PerkyAsctrend1.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Magenta //---- extern int RISK = 4; extern int AllBars = 250; //---- double val1buffer[]; double val2buffer[]; int up = 0, dn = 0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0, DRAW_ARROW, EMPTY); SetIndexArrow(0, 108); SetIndexBuffer(0, val1buffer); //---- SetIndexStyle(1, DRAW_ARROW, EMPTY); SetIndexArrow(1, 108); SetIndexBuffer(1, val2buffer); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double value2; double value3; double value10 = 10; double value11; double x1 = 70; double x2 = 30; int TrueCount; int counter; int MRO1; int MRO2; int i1; double Range; double AvgRange; double val1; double val2; double Table_value2[500][2]; int counted_bars = IndicatorCounted(); value10 = 3 + RISK*2; x1 = 67 + RISK; x2 = 33 - RISK; value11 = value10; //---- if(counted_bars < 0) return (-1); //---- if(counted_bars > 0) counted_bars--; //last bar recounted int i; int shift = Bars - counted_bars - 1; if(shift > AllBars) shift = AllBars; for(i = shift; i > 0; i--) { counter = i; Range = 0; AvgRange = 0; //---- for(counter = i; counter <= i + 9; counter++) AvgRange = AvgRange + MathAbs(High[counter] - Low[counter]); Range = AvgRange / 10; counter = i; TrueCount = 0; //---- while(counter < i + 9 && TrueCount < 1) { if(MathAbs(Open[counter] - Close[counter+1]) >= Range*2.0) TrueCount++; counter++; } //---- if(TrueCount >= 1) MRO1 = counter ; else MRO1 = -1; counter = i; TrueCount = 0; //---- while(counter < i + 6 && TrueCount < 1) { if(MathAbs(Close[counter+3] - Close[counter]) >= Range*4.6) { TrueCount++; } counter++; } //---- if(TrueCount >= 1) MRO2 = counter; else MRO2 = -1; //---- if(MRO1 > -1) value11 = 3; else value11 = value10; //---- if(MRO2 > -1) value11 = 4; else value11 = value10; value2 = 100 - MathAbs(iWPR(NULL, 0, value11, i)); Table_value2[i][0] = i; Table_value2[i][1] = value2; val1 = 0; val2 = 0; value3 = 0; //---- if(value2 < x2 ) // x2 = 30 { i1 = 1; //---- while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1) i1++; //---- if(Table_value2[i+i1][1] > x1) { value3 = High[i] + Range*0.5; val1 = value3; } } //---- if(value2>x1) // x1 = 70 { i1 = 1; //---- while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1) { i1++; } //---- if(Table_value2[i+i1][1] < x2) { value3 = Low[i]-Range*0.5; val2 = value3; } } //---- if(val2 != 0 && up == 0) { val1buffer[i] = val2 - 1*Point; up = 1; dn = 0; //---- if(shift <= 2) Alert(Symbol(), " ", Period(), "M Asctrend BUY "); } //---- if(val1 !=0 && dn == 0) { val2buffer[i] = val1 + 1*Point; dn = 1; up = 0; //---- if(shift <= 2) Alert(Symbol(), " ", Period(), "M Asctrend SELL "); } } return(0); } //+------------------------------------------------------------------+