Join useThinkScript to post your question to a community of 21,000+ developers and traders.
Does anyone have the script for this Smooth HA study watchlist column?Hi, I'm new here.
I really wanted to try out a Smoothed Heiken-Ashi study for TOS, since it is not available in the default program I looked for a script online, which brought me here. I edited the study from page 1.
I don't do much scripting but I thought others might find it useful.
Code:# Heikin Ashi Smoothed # HoboTheClown / blt # 9.15.2016 # HoboTheClown: I recently found a code for smoothed heiken ashi bars, # however for some reason all the bars are displayed as one color (going up or down). # # blt: Modified the code and replaced the addchart code at the bottom, # you should now see proper coloring. This is how that was coded to plot # as an overlay to the chart candlesticks. That is two sets of candles, # with different coloring for each. If you have the heikin ashi candle # coloring code on your chart, then they will likely appear the same color. #Update that "fixes" the green candles. #JTP #02/7/2021 input period = 20; input hideCandles = Yes; #Now functional - JTP input candleSmoothing = {default Valcu, Vervoort}; DefineGlobalColor("RisingMA", color.green); DefineGlobalColor("FallingMA", color.red); input movingAverageType = {Simple, default Exponential, Weighted, Hull, Variable, TEMA}; def openMA; def closeMA; def highMA; def lowMA; switch (movingAverageType) { case Simple: openMA = compoundValue(1, Average(open, period), open); closeMA = compoundValue(1, Average(close, period), close); highMA = compoundValue(1, Average(high, period), high); lowMA = compoundValue(1, Average(low, period), low); case Exponential: openMA = compoundValue(1, ExpAverage(open, period), open); closeMA = compoundValue(1, ExpAverage(close, period), close); highMA = compoundValue(1, ExpAverage(high, period), high); lowMA = compoundValue(1, ExpAverage(low, period), low); case Weighted: openMA = compoundValue(1, WMA(open, period), open); closeMA = compoundValue(1, WMA(close, period), close); highMA = compoundValue(1, WMA(high, period), high); lowMA = compoundValue(1, WMA(low, period), low); Case Hull: openMA = compoundValue(1, HullMovingAvg(open, period), open); closeMA = compoundValue(1, HullMovingAvg(close, period), close); highMA = compoundValue(1, HullMovingAvg(high, period), high); lowMA = compoundValue(1, HullMovingAvg(low, period), low); case variable: openMA = compoundValue(1, VariableMA(open, period), open); closeMA = compoundValue(1, VariableMA(close, period), close); highMA = compoundValue(1, VariableMA(high, period), high); lowMA = compoundValue(1, VariableMA(low, period), low); case TEMA: openMA = compoundValue(1, TEMA(open, period), open); closeMA = compoundValue(1, TEMA(close, period), close); highMA = compoundValue(1, TEMA(high, period), high); lowMA = compoundValue(1, TEMA(low, period), low); } hidePricePlot(hideCandles); def haOpen; def haClose; switch(candleSmoothing) { case Valcu: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open); haClose = ((OpenMA + HighMA + LowMA + CloseMA)/4.0) ; case Vervoort: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open); haClose = ((((OpenMA + HighMA + LowMA + CloseMA)/4.0) + haOpen + Max(HighMA, haOpen) + Min(LowMA, haOpen))/4.0); } plot o = haOpen + 0; o.hide(); ### Wicks and Shadows def haLow = min(lowMA, haOpen); def haHigh = max(highMA,haOpen); ### NO LONGER SUPPORTED BY TOS ### ### AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray); #Red Candlesticks -----------------------------------------------------------------| input charttype = ChartType.CANDLE; def haOpen_fall = if haOpen>haClose then haOpen else double.nan; def haHigh_fall = if haOpen>=haClose then haHigh else double.nan; def haLow_fall = if haOpen>=haClose then haLow else double.nan; def haClose_fall = if haOpen>=haClose then haClose else double.nan; AddChart(growColor = Color.red, fallColor = Color.green, neutralColor = Color.current, high = haHigh_fall, low = haLow_fall, open = haOpen_fall, close = haClose_fall , type = ChartType.CANDLE); #Green Candlesticks -----------------------------------------------------------------| #Removed and/or replaced - JTP #def HAclose1 = if haOpen<=haClose # then hahigh # else double.nan; #def HAclose1 = ohlc4 -1; #def HAopen1 = if haopen<=haclose # then haclose # then CompoundValue(1, (HAopen[1] + HAclose[1]) /2, (open[1] + close[1]) / 2) # else double.nan; def haOpen_rise = if haOpen<haClose then haClose else double.nan; def haHigh_rise = if haOpen<=haClose then haHigh else double.nan; def haLow_rise = if haOpen<=haClose then haLow else double.nan; def haClose_rise = if haOpen<=haClose then haOpen else double.nan; AddChart(growColor = Color.green, fallColor = Color.red, neutralColor = Color.current, high = haHigh_rise, low = haLow_rise, open = haOpen_rise, close = HAclose_rise, type = ChartType.CANDLE); # End Study ##############################################################################
View attachment 9397
I was wondering if any one knows how to add an alert to this Heikin Ashi Smoothed code below to signal when the trend has change and closed in a new direction. I have added a screen shot of when I am looking for it to alert, the purple vertical line is where the signal should trigger. I pulled the alert code from another one of my scripts but for some reason I havent been able to figure out what part of the Heikin code will actually make this one trigger on the switch.
Thanks a bunch in advance!!!
https://usethinkscript.com/threads/smoothed-heikin-ashi-for-thinkorswim.216/
Code Below
# Heikin Ashi Smoothed
# HoboTheClown / blt
# 9.15.2016
input period = 6;
input hideCandles = no;
input candleSmoothing = {default Valcu, Vervoort};
DefineGlobalColor("RisingMA", color.green);
DefineGlobalColor("FallingMA", color.red);
input movingAverageType = {Simple, default Weighted};
def openMA;
def closeMA;
def highMA;
def lowMA;
switch (movingAverageType) {
case Simple:
openMA = compoundValue(1, Average(open, period), open);
closeMA = compoundValue(1, Average(close, period), close);
highMA = compoundValue(1, Average(high, period), high);
lowMA = compoundValue(1, Average(low, period), low);
case Weighted:
openMA = compoundValue(1, WMA(open, period), open);
closeMA = compoundValue(1, WMA(close, period), close);
highMA = compoundValue(1, WMA(high, period), high);
lowMA = compoundValue(1, WMA(low, period), low);
}
#hidePricePlot(hideCandles);
def haOpen;
def haClose;
switch(candleSmoothing) {
case Valcu:
haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open);
haClose = ((OpenMA + HighMA + LowMA + CloseMA)/4.0) ;
case Vervoort:
haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open);
haClose = ((((OpenMA + HighMA + LowMA + CloseMA)/4.0) + haOpen + Max(HighMA, haOpen) + Min(LowMA, haOpen))/4.0);
}
plot o = haopen;
o.hide();
def haLow = min(lowMA, haOpen);
def haHigh = max(highMA,haOpen);
### NO LONGER SUPPORTED BY TOS
###
### AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray);
####THIS IS FOR THE RED CANDLES OF THE HA
input charttype = ChartType.CANDLE;
def haopen_ = if haopen>haclose
then HAopen + 0
else double.nan;
def HAhi = if haopen>=haclose
then hahigh
else double.nan;
def HAlo = if haopen>=haclose
then halow
else double.nan;
AddChart(growColor = color.red, fallColor = Color.green, neutralColor = Color.current, high = HAhi, low = HAlow, open = haopen_, close = HAclose, type = ChartType.CANDLE);
####THIS IS FOR THE GREEN CANDLES OF THE HA
def HAclose1 = ohlc4;
def HAopen1 = if haopen<=haclose
then CompoundValue(1, (HAopen[1] + HAclose[1]) / 2, (open[1] + close[1]) / 2)
else double.nan;
def haopen_1 = if haopen<=haclose
then HAopen1 + 0
else double.nan;
def HAhigh1 = hahigh;
def HAlow1 = halow;
AddChart(growColor = Color.green, fallColor = Color.red, neutralColor = Color.current, high = HAhigh1, low = HAlow1, open = haopen_1, close = HAclose1, type = ChartType.CANDLE);
####This is the alert code, the next 2 lines are incorrect and need fixing, the last 2 ALERT codes work as they should.
#def SELL = hahigh1[1] > hahigh1 ;
#def BUY = halow1[1] < halow1 ;
#alert(SELL, "SELL", Alert.BAR, Sound.Ding);
#alert(BUY, "BUY", Alert.BAR, Sound.Ring);
input period = 6;
input hideCandles = YES;
input candleSmoothing = {default Valcu, Vervoort};
DefineGlobalColor("RisingMA", color.blue);
DefineGlobalColor("FallingMA", color.red);
input movingAverageType = {default Simple, Exponential, Weighted, Hull, Variable, TEMA};
def openMA;
def closeMA;
def highMA;
def lowMA;
switch (movingAverageType) {
case Simple:
openMA = compoundValue(1, Average(open, period), open);
closeMA = compoundValue(1, Average(close, period), close);
highMA = compoundValue(1, Average(high, period), high);
lowMA = compoundValue(1, Average(low, period), low);
case Exponential:
openMA = compoundValue(1, ExpAverage(open, period), open);
closeMA = compoundValue(1, ExpAverage(close, period), close);
highMA = compoundValue(1, ExpAverage(high, period), high);
lowMA = compoundValue(1, ExpAverage(low, period), low);
case Weighted:
openMA = compoundValue(1, WMA(open, period), open);
closeMA = compoundValue(1, WMA(close, period), close);
highMA = compoundValue(1, WMA(high, period), high);
lowMA = compoundValue(1, WMA(low, period), low);
Case Hull:
openMA = compoundValue(1, HullMovingAvg(open, period), open);
closeMA = compoundValue(1, HullMovingAvg(close, period), close);
highMA = compoundValue(1, HullMovingAvg(high, period), high);
lowMA = compoundValue(1, HullMovingAvg(low, period), low);
case variable:
openMA = compoundValue(1, VariableMA(open, period), open);
closeMA = compoundValue(1, VariableMA(close, period), close);
highMA = compoundValue(1, VariableMA(high, period), high);
lowMA = compoundValue(1, VariableMA(low, period), low);
case TEMA:
openMA = compoundValue(1, TEMA(open, period), open);
closeMA = compoundValue(1, TEMA(close, period), close);
highMA = compoundValue(1, TEMA(high, period), high);
lowMA = compoundValue(1, TEMA(low, period), low);
}
hidePricePlot(hideCandles);
def haOpen;
def haClose;
switch(candleSmoothing) {
case Valcu:
haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open);
haClose = ((OpenMA + HighMA + LowMA + CloseMA)/4.0) ;
case Vervoort:
haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open);
haClose = ((((OpenMA + HighMA + LowMA + CloseMA)/4.0) + haOpen + Max(HighMA, haOpen) + Min(LowMA, haOpen))/4.0);
}
plot o = haopen;
o.hide();
def haLow = min(lowMA, haOpen);
def haHigh = max(highMA,haOpen);
AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray);
Can't remember where I had found this, but I seem to get only the risingMA color. The fallingMA(red) color is risingMA(blue). So it's all the same color.
thanks for the response, yes id like them to show bullish blue and bearish red. They're all blue right not.It would appear that the candles are hard-coded to green and red and not using your global option of blue
Are you looking for all bullish candles to be blue and bearish red?
Or are you looking for something else.
If something else, be very clear as to what you are asking.
An annotated image also helps.
thanks for the response, yes id like them to show bullish blue and bearish red. They're all blue right not.
Can't remember where I had found this, but I seem to get only the risingMA color. The fallingMA(red) color is risingMA(blue). So it's all the same color.
Code:input period = 6; input hideCandles = YES; input candleSmoothing = {default Valcu, Vervoort}; DefineGlobalColor("RisingMA", color.blue); DefineGlobalColor("FallingMA", color.red); input movingAverageType = {default Simple, Exponential, Weighted, Hull, Variable, TEMA}; def openMA; def closeMA; def highMA; def lowMA; switch (movingAverageType) { case Simple: openMA = compoundValue(1, Average(open, period), open); closeMA = compoundValue(1, Average(close, period), close); highMA = compoundValue(1, Average(high, period), high); lowMA = compoundValue(1, Average(low, period), low); case Exponential: openMA = compoundValue(1, ExpAverage(open, period), open); closeMA = compoundValue(1, ExpAverage(close, period), close); highMA = compoundValue(1, ExpAverage(high, period), high); lowMA = compoundValue(1, ExpAverage(low, period), low); case Weighted: openMA = compoundValue(1, WMA(open, period), open); closeMA = compoundValue(1, WMA(close, period), close); highMA = compoundValue(1, WMA(high, period), high); lowMA = compoundValue(1, WMA(low, period), low); Case Hull: openMA = compoundValue(1, HullMovingAvg(open, period), open); closeMA = compoundValue(1, HullMovingAvg(close, period), close); highMA = compoundValue(1, HullMovingAvg(high, period), high); lowMA = compoundValue(1, HullMovingAvg(low, period), low); case variable: openMA = compoundValue(1, VariableMA(open, period), open); closeMA = compoundValue(1, VariableMA(close, period), close); highMA = compoundValue(1, VariableMA(high, period), high); lowMA = compoundValue(1, VariableMA(low, period), low); case TEMA: openMA = compoundValue(1, TEMA(open, period), open); closeMA = compoundValue(1, TEMA(close, period), close); highMA = compoundValue(1, TEMA(high, period), high); lowMA = compoundValue(1, TEMA(low, period), low); } hidePricePlot(hideCandles); def haOpen; def haClose; switch(candleSmoothing) { case Valcu: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open); haClose = ((OpenMA + HighMA + LowMA + CloseMA)/4.0) ; case Vervoort: haOpen = CompoundValue(1, ( (haOpen[1] + (openMA[1] + highMA[1] + lowMA[1] + closeMA[1]) /4.0)/2.0), open); haClose = ((((OpenMA + HighMA + LowMA + CloseMA)/4.0) + haOpen + Max(HighMA, haOpen) + Min(LowMA, haOpen))/4.0); } plot o = haopen; o.hide(); def haLow = min(lowMA, haOpen); def haHigh = max(highMA,haOpen); AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray);
Code:AddChart(high = haHigh, low = haLow, open = o, close = haclose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = color.gray);[
def bull = haOpen < haClose;
def na = Double.NaN;
AddChart(if bull then haHigh else na, low = haLow, open = o, close = haClose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = Color.GRAY);
AddChart(if !bull then haHigh else na, low = haLow, open = o, close = haClose, type = ChartType.CANDLE, growColor = GlobalColor("fallingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = Color.GRAY);
Remove the addchart() code:
Replace it with:
Code:def bull = haOpen < haClose; def na = Double.NaN; AddChart(if bull then haHigh else na, low = haLow, open = o, close = haClose, type = ChartType.CANDLE, growColor = GlobalColor("RisingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = Color.GRAY); AddChart(if !bull then haHigh else na, low = haLow, open = o, close = haClose, type = ChartType.CANDLE, growColor = GlobalColor("fallingMA"), fallColor = GlobalColor("FallingMA"), neutralColor = Color.GRAY);
Thread starter | Similar threads | Forum | Replies | Date |
---|---|---|---|---|
P | Smoothed Moving Average For ThinkOrSwim | Indicators | 5 | |
P | Heikin-Ashi Candles Lower Chart For ThinkorSwim (assorted versions) | Indicators | 28 | |
V | Heikin Ashi For ThinkOrSwim | Indicators | 23 | |
![]() |
RSI-Heiken Ashi For ThinkOrSwim | Indicators | 27 | |
![]() |
MA Colored Heiken Ashi Trend with PaintBars for ThinkorSwim | Indicators | 17 |
Start a new thread and receive assistance from our community.
useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.
We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.
If you are new, or just looking for guidance, here are some helpful links to get you started.