Extend ZigZag Highs and Lows indefinitely in ThinkorSwim?

K

kshires4

Member
@J007RMC Do you have any scripts for a scan that would show a high/low daily candle?
 
K

kshires4

Member
@tomsk Would you be able to make a scan for this script? Looking for highs/lows on daily scans.
 
Last edited by a moderator:
J007RMC

J007RMC

Well-known member
2019 Donor
VIP
@kshires4 I'm sorry I am not a coder.
 
Last edited by a moderator:
Juston410

Juston410

New member
VIP
@tomsk
Greatly appreciate your setting this up. I'm finding the indicator very useful in conjunction with the TMO.
I was able to resolve the error issue.
What was the error fix? Im getting an error as well with this scan
 
M

martyrjohn

Member
Anyone have a scan for the following indicator:

Code:
# Swing High and Swing Low
# tomsk
# 11.18.2019
# As requested by chillc15 I have modified [USER=1174]@RobertPayne[/USER] code to include SwingHigh
# points which are now plotted in CYAN with the swing high points painted in PINK.
# So now you have both swing high and low on your charts
#  +------------------------------------------------------------+
# | Example: How to extend levels to the right of the chart |
# | Robert Payne |
# | https://funwiththinkscript.com |
#  +------------------------------------------------------------+
# SWING LOW
# define swing low points
input length = 10;
def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);
# identify the very last swing low point
def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);
def lowPointOneValue = if bn == lowPointOneBarNumber then low else lowPointOneValue[1];
plot low1 = if bn < lowPointOneBarNumber then Double.NaN else lowPointOneValue;
low1.SetDefaultColor(Color.LIGHT_RED);
# identify the 2nd to last swing low point
def lowPointTwoBarNumber = HighestAll(if swingLow and bn < lowPointOneBarNumber then bn else 0);
def lowPointTwoValue = if bn == lowPointTwoBarNumber then low else lowPointTwoValue[1];
plot low2 = if bn < lowPointTwoBarNumber then Double.NaN else lowPointTwoValue;
low2.SetDefaultColor(Color.Light_RED);
# just keep doing ths for as many lines as you want to add to the chart
# identify then 3rd to last swingHigh point low
def lowPointThreeBarNumber = HighestAll(if swingLow and bn < lowPointTwoBarNumber then bn else 0);
def lowPointThreeValue = if bn == lowPointThreeBarNumber then low else lowPointThreeValue[1];
plot low3 = if bn < lowPointThreeBarNumber then Double.NaN else lowPointThreeValue;
low3.SetDefaultColor(Color.Light_RED);
# identify then 4th to last swingHigh point low
def lowPointFourBarNumber = HighestAll(if swingLow and bn < lowPointThreeBarNumber then bn else 0);
def lowPointFourValue = if bn == lowPointFourBarNumber then low else lowPointFourValue[1];
plot low4 = if bn < lowPointFourBarNumber then Double.NaN else lowPointFourValue;
low4.SetDefaultColor(Color.Light_RED);
# identify then 5th to last swingHigh point low
def lowPointFiveBarNumber = HighestAll(if swingLow and bn < lowPointFourBarNumber then bn else 0);
def lowPointFiveValue = if bn == lowPointFiveBarNumber then low else lowPointFiveValue[1];
plot low5 = if bn < lowPointFiveBarNumber then Double.NaN else lowPointFiveValue;
low5.SetDefaultColor(Color.Light_RED);
# identify then 6th to last swingHigh point low
def lowPointSixBarNumber = HighestAll(if swingLow and bn < lowPointFiveBarNumber then bn else 0);
def lowPointSixValue = if bn == lowPointSixBarNumber then low else lowPointSixValue[1];
plot low6 = if bn < lowPointSixBarNumber then Double.NaN else lowPointSixValue;
low6.SetDefaultColor(Color.Light_RED);
# identify then 7th to last swingHigh point low
def lowPointSevenBarNumber = HighestAll(if swingLow and bn < lowPointSixBarNumber then bn else 0);
def lowPointSevenValue = if bn == lowPointSevenBarNumber then low else lowPointSevenValue[1];
plot low7 = if bn < lowPointSevenBarNumber then Double.NaN else lowPointSevenValue;
low7.SetDefaultColor(Color.Light_RED);
# identify then 8th to last swingHigh point low
def lowPointEightBarNumber = HighestAll(if swingLow and bn < lowPointSevenBarNumber then bn else 0);
def lowPointEightValue = if bn == lowPointEightBarNumber then low else lowPointEightValue[1];
plot low8 = if bn < lowPointEightBarNumber then Double.NaN else lowPointEightValue;
low8.SetDefaultColor(Color.Light_RED);
# identify then 9th to last swingHigh point low
def lowPointNineBarNumber = HighestAll(if swingLow and bn < lowPointEightBarNumber then bn else 0);
def lowPointNineValue = if bn == lowPointNineBarNumber then low else lowPointNineValue[1];
plot low9 = if bn < lowPointNineBarNumber then Double.NaN else lowPointNineValue;
low9.SetDefaultColor(Color.Light_RED);
# identify then 10th to last swingHigh point low
def lowPointTenBarNumber = HighestAll(if swingLow and bn < lowPointNineBarNumber then bn else 0);
def lowPointTenValue = if bn == lowPointTenBarNumber then low else lowPointTenValue[1];
plot low10 = if bn < lowPointTenBarNumber then Double.NaN else lowPointTenValue;
low10.SetDefaultColor(Color.Light_RED);


# SWING HIGH
# define swing high points
def swingHigh = high > Highest(high[1], length - 1) and high == GetValue(Highest(high, length), -offset);
# identify the very last swing high point
def highPointOneBarNumber = HighestAll(if swingHigh then bn else 0);
def highPointOneValue = if bn == highPointOneBarNumber then high else highPointOneValue[1];
plot high1 = if bn < highPointOneBarNumber then Double.NaN else highPointOneValue;
high1.SetDefaultColor(Color.CYAN);
# identify the 2nd to last swing high point
def highPointTwoBarNumber = HighestAll(if swingHigh and bn < highPointOneBarNumber then bn else 0);
def highPointTwoValue = if bn == highPointTwoBarNumber then high else highPointTwoValue[1];
plot high2 = if bn < highPointTwoBarNumber then Double.NaN else highPointTwoValue;
high2.SetDefaultColor(Color.CYAN);
# just keep doing ths for as many lines as you want to add to the chart
def highPointThreeBarNumber = HighestAll(if swingHigh and bn < highPointTwoBarNumber then bn else 0);
def highPointThreeValue = if bn == highPointThreeBarNumber then high else highPointThreeValue[1];
plot high3 = if bn < highPointThreeBarNumber then Double.NaN else highPointThreeValue;
high3.SetDefaultColor(Color.CYAN);
def highPointFourBarNumber = HighestAll(if swingHigh and bn < highPointThreeBarNumber then bn else 0);
def highPointFourValue = if bn == highPointFourBarNumber then high else highPointFourValue[1];
plot high4 = if bn < highPointFourBarNumber then Double.NaN else highPointFourValue;
high4.SetDefaultColor(Color.CYAN);
def highPointFiveBarNumber = HighestAll(if swingHigh and bn < highPointFourBarNumber then bn else 0);
def highPointFiveValue = if bn == highPointFiveBarNumber then high else highPointFiveValue[1];
plot high5 = if bn < highPointFiveBarNumber then Double.NaN else highPointFiveValue;
high5.SetDefaultColor(Color.CYAN);
def highPointSixBarNumber = HighestAll(if swingHigh and bn < highPointFiveBarNumber then bn else 0);
def highPointSixValue = if bn == highPointSixBarNumber then high else highPointSixValue[1];
plot high6 = if bn < highPointsixBarNumber then Double.NaN else highPointsixValue;
high6.SetDefaultColor(Color.CYAN);
def highPointSevenBarNumber = HighestAll(if swingHigh and bn < highPointSixBarNumber then bn else 0);
def highPointSevenValue = if bn == highPointSevenBarNumber then high else highPointSevenValue[1];
plot high7 = if bn < highPointSevenBarNumber then Double.NaN else highPointSevenValue;
high7.SetDefaultColor(Color.CYAN);
def highPointEightBarNumber = HighestAll(if swingHigh and bn < highPointSevenBarNumber then bn else 0);
def highPointEightValue = if bn == highPointEightBarNumber then high else highPointEightValue[1];
plot high8 = if bn < highPointEightBarNumber then Double.NaN else highPointEightValue;
high4.SetDefaultColor(Color.CYAN);
def highPointNineBarNumber = HighestAll(if swingHigh and bn < highPointEightBarNumber then bn else 0);
def highPointNineValue = if bn == highPointNineBarNumber then high else highPointNineValue[1];
plot high9 = if bn < highPointNineBarNumber then Double.NaN else highPointNineValue;
high4.SetDefaultColor(Color.CYAN);
def highPointTenBarNumber = HighestAll(if swingHigh and bn < highPointNineBarNumber then bn else 0);
def highPointTenValue = if bn == highPointTenBarNumber then high else highPointTenValue[1];
plot high10 = if bn < highPointTenBarNumber then Double.NaN else highPointTenValue;
high4.SetDefaultColor(Color.CYAN);

# ADJUST CANDLE COLORS
# change candle colors just to make it easier to see what we are working with
AssignPriceColor(if swingLow then Color.cyan else if swingHigh then Color.mageNTA else Color.current);
# End Swing High and Swing Low
The scan would be when it is a swing low.
 
Last edited by a moderator:
T

TrueDepth

Member
VIP
Wouldn't that be great. Scan for the Swing low as it happens, and buy, then make infinite money.
 
M

martyrjohn

Member
@tomsk
Greatly appreciate your setting this up. I'm finding the indicator very useful in conjunction with the TMO.
I was able to resolve the error issue.
How were you able to resolve the error issue?
 
tenacity11

tenacity11

Active member
2019 Donor
@tenacity11

Did you get a scan to work for the swing low?

# Swing Low Scan
# tomsk
# 12.1.2019
input length = 10;
def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);
def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);
plot scan = bn == lowPointOneBarNumber;
# End Swing Low Scan
 
C

Christian

New member
I need help please!!
I'd like to make a zigzag indicator that indetify high and low of the last 5 bar. Every time the market makes a new high or new low, the ZigZag deletes its last drawing and take last value..........How I do that?

def swinghigh = if high > high[1] and high > high[2] and high > high[3] and high > high[4] and high > high[5] then 1 else 0;
def swinglow = if low < low[1] and low < low[2] and low < low[3] and low < low[4] and low < low[5] then 1 else 0;

plot sh = if swinghigh then high else Double.NaN;
sh.SetStyle(Curve.POINTS);
plot sl = if swinglow then low else Double.NaN;
sl.SetStyle(Curve.POINTS);

 
Last edited:
T

TrueDepth

Member
VIP
Isn't the answer above? Swing High and Swing Low indicator.
 
C

Christian

New member
no, it is a different way to determine swing high high and low and more realistic, but I don't know how to do it inside zigzag indicator.
 
C

Cleartarget

New member
VIP
@tenacity11 Sure thing, here is your customized scan code to scan for a swing low.
I have just tested this scanning against the S&P 500 with the following results:

Daily - 19 hits
15m - 15 hits
60m - 6 hits

Code:
# Swing Low Scan
# tomsk
# 12.1.2019

# I have modified @RobertPayne code to scan for the most recent swing low
#
#  +------------------------------------------------------------+
#  |  Example: How to extend levels to the right of the chart   |
#  |                        Robert Payne                        |
#  |               https://funwiththinkscript.com               |
#  +------------------------------------------------------------+

input length = 10;

def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);
def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);
plot scan = bn == lowPointOneBarNumber;
# End Swing Low Scan
Hi Tomsk
Thanks for this scanner swing low, but how can i get the inverse ,scanning for swing highs, sorry i dont know how code.
 
H

HighBredCloud

Well-known member
VIP
@tomsk Can anyone confirm the reverse engineered code below for a Swing High that I attempted to translate from Tomsk original script above? Someone asked in another thread about the Swing High scanner...I don't want to respond and give incorrect script... @XeoNoX you're very good at the scanners that you've helped me out with before...does this look right to you? Not sure if I need to change the length to + 1 from -1

Code:
input length = 10;

def bn = BarNumber();
def lastBar = LowestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);

def swingHigh = high > Highest(high[1], length - 1) and high == GetValue(Highest(high, length), -offset);

def highPointOneBarNumber = LowestAll(if swingHigh then bn else 0);

plot scan = bn == highPointOneBarNumber;
 
Last edited:
X

XeoNoX

Member
sorry im not familiar how this works and would take alot of time to me to break down the code to figure it out, the script is pretty long and complex. the best i could do is if the scan is true then show as result, but you need to tell the scan what you want to be true.
 
MayamanMarne

MayamanMarne

New member
VIP
@tenacity11 Can we have the Link instead for The Swing Low Swing High Scan. I honestly don't know how to download codes in Scan. Thank you in advance.
 
tenacity11

tenacity11

Active member
2019 Donor
@tenacity11 Can we have the Link instead for The Swing Low Swing High Scan. I honestly don't know how to download codes in Scan. Thank you in advance.
there wasn't a link but I just copy/pasted it into thinkscript editor. I have them as 2 separate scans.

Code:
# Swing Low Scan
# tomsk
# 12.1.2019

input length = 10;

def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingLow = low < Lowest(low[1], length - 1) and low == GetValue(Lowest(low, length), -offset);
def lowPointOneBarNumber = HighestAll(if swingLow then bn else 0);
plot scan = bn == lowPointOneBarNumber;
# End Swing Low Scan

Code:
# Swing High Scan
# tomsk
# 12.1.2019

input length = 10;

def bn = BarNumber();
def lastBar = HighestAll(if IsNaN(close) then 0 else bn);
def offset = Min(length - 1, lastBar - bn);
def swingHigh = high < Highest(high[1], length - 1) and high == GetValue(Highest(high, length), -offset);
def HighPointOneBarNumber = HighestAll(if swingHigh then bn else 0);
plot scan = bn == highPointOneBarNumber;
# End Swing High Scan
 
T

tem2005

Member
VIP
@tenacity11 hi, do you have time to check your Discord private message?
 

Similar threads

Top