# Plot areas of potential support / resistance based on major peaks and valleys.
# Changing "magnitude" determines the granularity of detected peaks or valleys.
# A low magnitude value will plot minor price swings, while a high magnitude value
# will only plot major price swings.
# A magnitude value of 2 means that a high must be greater than the 2 candles
# before and after it to be considered a peak. Likewise for the lows to be a valley.
# http://www.researchtrade.com/forum/read.php?7,2258,page=18
# Robert Payne
input magnitude = 5;
# define and plot the most recent peak
def peak = high >= Highest(high[1], magnitude) and high >= Highest(high[-magnitude], magnitude);
def peakvalue = if BarNumber() < magnitude then Double.NaN else if peak then high else peakvalue[1];
plot peakline = peakvalue;
peakline.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
peakline.SetDefaultColor(Color.GREEN);
# extend the current peak line to the right edge of the chart
def countp = if IsNaN(peak) and !IsNaN(peak[1]) then 1 else countp[1] + 1;
plot peakext = if IsNaN(peak) then GetValue(peakline, countp) else Double.NaN;
peakext.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
peakext.SetDefaultColor(Color.GREEN);
# continue the previous peak as a dashed line
def oldpeak = if BarNumber() < magnitude then Double.NaN else if peak then peakvalue[1] else oldpeak[1];
plot oldpeakline = oldpeak;
oldpeakline.SetPaintingStrategy(PaintingStrategy.DASHES);
oldpeakline.SetDefaultColor(Color.GREEN);
# define and plot the most recent valley
def valley = low <= Lowest(low[1], magnitude) and low <= Lowest(low[-magnitude], magnitude);
def valleyValue = if BarNumber() < magnitude then Double.NaN else if valley then low else valleyValue[1];
plot valleyline = valleyValue;
valleyline.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
valleyline.SetDefaultColor(Color.PINK);
# extend the current valley line to the right edge of the chart
def countt = if IsNaN(valley) and !IsNaN(valley[1]) then 1 else countt[1] + 1;
plot valleyext = if IsNaN(valley) then GetValue(valleyline, countt) else Double.NaN;
valleyext.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
valleyext.SetDefaultColor(Color.PINK);
# continue the previous valley as a dashed line
def oldvalley = if BarNumber() < magnitude then Double.NaN else if valley then valleyValue[1] else oldvalley[1];
plot oldvalleyline = oldvalley;
oldvalleyline.SetPaintingStrategy(PaintingStrategy.DASHES);
oldvalleyline.SetDefaultColor(Color.PINK);
Monday, February 29, 2016
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment