//+------------------------------------------------------------------+ //| _PerkyAsctrend1WPR_mtf.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_separate_window #property indicator_minimum 0.00 #property indicator_maximum 100.00 #property indicator_level1 50.00 #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_width1 1 extern int RISK = 4; extern int MTF.Period = 0; extern string Reffer.Indicator.Name = "_PerkyAsctrend1WPR_mtf"; double val1buffer[]; //+------------------------------------------------------------------+ //| global variables | //+------------------------------------------------------------------+ int up = 0; int dn = 0; string G_sReffer.Indicator.Name = "_PerkyAsctrend1WPR_mtf"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int nArrowNum = 0; int nPeriod = 0; //---- IndicatorBuffers(1); if(MTF.Period <= 0) { nPeriod = Period(); } else { nPeriod = MTF.Period; } IndicatorShortName("PAT_WPR( " + nPeriod + " )"); SetLevelValue(2, (33 - RISK)); SetLevelValue(3, (67 + RISK)); //---- indicators SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, val1buffer); SetIndexDrawBegin(0, (3 + RISK * 2)); SetIndexEmptyValue(0, EMPTY_VALUE); SetIndexLabel(0, "PAT_WPR"); //---- G_sReffer.Indicator.Name = StringTrimRight(Reffer.Indicator.Name); if(StringLen(G_sReffer.Indicator.Name) <= 0) { G_sReffer.Indicator.Name = WindowExpertName(); } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ArrayInitialize(val1buffer, EMPTY_VALUE); WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); //---- if(counted_bars < 0) { return(-1); } // other timeframe function if((MTF.Period <= 0) || (MTF.Period == Period())) { this.timeframe(); } // same timeframe function else if(MTF.Period != Period()) { other.timeframe(); } //---- return(0); } //+------------------------------------------------------------------+ //| set this chart timeframe | //+------------------------------------------------------------------+ void this.timeframe() { double value10 = 10; double value11; int TrueCount; int counter; int MRO1; int MRO2; double Range; double AvgRange; int counted_bars = IndicatorCounted(); value10 = 3 + RISK * 2; 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; 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; val1buffer[i] = 100 - MathAbs(iWPR(NULL, 0, value11, i)); } //---- return(0); } //+------------------------------------------------------------------+ //| set other chart timeframe | //+------------------------------------------------------------------+ void other.timeframe() { int i, j; int counted_bars = IndicatorCounted(); int max_bars = Bars; int limit = max_bars - counted_bars; //---- datetime TimeArray[]; //---- limit = MathMax(limit, (MTF.Period / Period())); ArrayCopySeries(TimeArray, MODE_TIME, Symbol(), MTF.Period); for(i = 0, j = 0; i <= limit ; i++) { // initialized current buffer if(Time[i] < TimeArray[j]) j++; //val1buffer[i] = iCustom(Symbol(), MTF.Period, G_sReffer.Indicator.Name, 0, j); val1buffer[i] = iCustom(Symbol(), MTF.Period , G_sReffer.Indicator.Name , RISK , MTF.Period , Reffer.Indicator.Name , 0 , j); } //---- return(0); } //+------------------------------------------------------------------+
Sample
image not available
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Larry William percent range indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: