CCI Watchlist / Scan / Label / Strategy for ThinkorSwim

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Share: I combined the WoodieCCI with the Volume Current Percentage (A code I found on this site)

What it does: This code will let you know if the CCI is falling or rising and will provide the percentage, label color with +200, Zero and -200 breakout lines. It also will let you see the current Volume percentage. If the percentage is greater than 50% then the Shorts/Bears/Sells are in control and vice versa.

How I use it: When Volume in trending in the same direction of the CCI I make my trades with that trend and this is good especially on your Day Chart and 1 hour Chart even on the 1000tick.

Code:
declare lower;
input shortLength = 6;
input longLength = 14;
input lowerSideWinderLimit = 30.0;
input upperSideWinderLimit = 100.0;
input hideSideWinder = No;

def LinearReg = Inertia(close, 25);
def expAvg = ExpAverage(close, 34);
def diff = close - expAvg;
def yyyyMmDd = getYyyyMmDd();
def session_duration_minutes = (regularTradingEnd(yyyyMmDd) - regularTradingStart(yyyyMmDd)) / AggregationPeriod.MIN;
def interval_size_raw;
def aggregation = getAggregationPeriod();
if (aggregation == AggregationPeriod.DAY) {
    interval_size_raw = session_duration_minutes * 60;
} else if (aggregation == AggregationPeriod.TWO_DAYS) {
    interval_size_raw = session_duration_minutes * 60 * 2;
} else if (aggregation == AggregationPeriod.THREE_DAYS) {
    interval_size_raw = session_duration_minutes * 60 * 3;
} else if (aggregation == AggregationPeriod.FOUR_DAYS) {
    interval_size_raw = session_duration_minutes * 60 * 4;
} else if (aggregation == AggregationPeriod.WEEK) {
    interval_size_raw = session_duration_minutes * 60 * 5;
} else if (aggregation == AggregationPeriod.MONTH or aggregation == AggregationPeriod.OPT_EXP) {
    interval_size_raw = session_duration_minutes * 60 * 22;
} else if (aggregation >= AggregationPeriod.MIN) {
    interval_size_raw = aggregation / AggregationPeriod.MIN;
} else {
    interval_size_raw = aggregation;
}

def ema_angle_factor = Sqrt(interval_size_raw / 180);
def avg_ema = (expAvg[2] + expAvg[1]) / 2;
def avg_lsma = (LinearReg[2] + LinearReg[1]) / 2;
def lsma_slope = (LinearReg - avg_lsma) / tickSize();
def lsma_angle = ATan(lsma_slope / ema_angle_factor) / Double.Pi * 180;
def ema_slope = (expAvg - avg_ema) / tickSize();
def ema_angle = ATan(ema_slope / ema_angle_factor) / Double.Pi * 180;
def sw = lsma_angle + ema_angle;
def swabs = AbsValue(sw);

plot CCI = cci(length = longLength);
plot "CCI Hist" = CCI;
plot "SW +200" = if IsNaN(close) then Double.NaN else 200;
plot "SW -200" = if IsNaN(close) then Double.NaN else -200;
plot ZeroLine = if IsNaN(close) then Double.NaN else 0;

CCI.SetDefaultColor(GetColor(1));
CCI.SetLineWeight(1);

"SW +200".SetDefaultColor(GetColor(1));
"SW +200".SetLineWeight(2);
"SW +200".SetPaintingStrategy(PaintingStrategy.DASHES);
"SW +200".HideTitle();
"SW +200".HideBubble();
"SW +200".DefineColor("Trending", Color.GREEN);
"SW +200".DefineColor("Normal", Color.YELLOW);
"SW +200".DefineColor("Flat", Color.RED);
"SW +200".AssignValueColor(
    if swabs >= upperSideWinderLimit then "SW +200".color("Trending")
    else if swabs >  lowerSideWinderLimit then "SW +200".color("Normal")
    else "SW +200".color("Flat"));

"SW -200".AssignValueColor("SW +200".TakeValueColor());
"SW -200".SetDefaultColor(GetColor(1));
"SW -200".SetLineWeight(2);
"SW -200".SetPaintingStrategy(PaintingStrategy.DASHES);
"SW -200".HideTitle();
"SW -200".HideBubble();

ZeroLine.SetDefaultColor(GetColor(9));
ZeroLine.SetPaintingStrategy(PaintingStrategy.DASHES);
ZeroLine.SetLineWeight(1);
ZeroLine.HideTitle();

AddLabel (yes,if close then " CCI " else "", Color.CYAN);
#Label Rise and Fall-------------------------------------------------------------------------------------

input n = 1;

def VUP = CCI > CCI[n];
def VDN = CCI < CCI[n];
AddLabel(1, " CCI : " + Round(CCI, 1) + (if VUP then "   RISING " + ""  else if VDN then "   FALLING " + "" else " --NEUTRAL"),
if VUP then Color.green else if VDN then color.RED else Color.YELLOW);

#end CCI-----------------------------

input Show30DayAvg = yes;
input ShowTodayVolume = yes;
input ShowPercentOf30DayAvg = yes;
input UnusualVolumePercent = 200;
input Show30BarAvg = yes;
input ShowCurrentBar = yes;
input ShowPercentOf30BarAvg = yes;
input ShowSellVolumePercent = yes;

def O = open;
def H = high;
def C = close;
def L = low;
def V = volume;
def buying = V*(C-L)/(H-L);
def selling = V*(H-C)/(H-L);

#Volume Data

def volLast30DayAvg = (volume(period = "DAY")[1] + volume(period = "DAY")[2] + volume(period = "DAY")[3] + volume(period = "DAY")[4] + volume(period = "DAY")[5] + volume(period = "DAY")[6] + volume(period = "DAY")[7] + volume(period = "DAY")[8] + volume(period = "DAY")[9] + volume(period = "DAY")[10] + volume(period = "DAY")[11] + volume(period = "DAY")[12] + volume(period = "DAY")[13] + volume(period = "DAY")[14] + volume(period = "DAY")[15] + volume(period = "DAY")[16] + volume(period = "DAY")[17] + volume(period = "DAY")[18] + volume(period = "DAY")[19] + volume(period = "DAY")[20] + volume(period = "DAY")[21] + volume(period = "DAY")[22] + volume(period = "DAY")[23] + volume(period = "DAY")[24] + volume(period = "DAY")[25] + volume(period = "DAY")[26] + volume(period = "DAY")[27] + volume(period = "DAY")[28] + volume(period = "DAY")[29] + volume(period = "DAY")[30]) / 30;
def today = volume(period = "DAY");
def percentOf30Day = Round((today / volLast30DayAvg) * 100, 0);
def avg30Bars = (volume[1] + volume[2] + volume[3] + volume[4] + volume[5] + volume[6] + volume[7] + volume[8] + volume[9] + volume[10] + volume[11] + volume[12] + volume[13] + volume[14] + volume[15] + volume[16] + volume[17] + volume[18] + volume[19] + volume[20] + volume[21] + volume[22] + volume[23] + volume[24] + volume[25] + volume[26] + volume[27] + volume[28] + volume[29] + volume[30]) / 30;
def curVolume = volume;
def percentOf30Bar = Round((curVolume / avg30Bars) * 100, 0);
def SellVolPercent = Round((Selling / Volume) * 100, 0);

# Labels-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AddLabel (yes,if close then " V " else "", Color.CYAN);
AddLabel(ShowSellVolumePercent, "  Volume  %: " + SellVolPercent, (if SellVolPercent >= 51 then Color.RED else if SellVolPercent < 49 then Color.GREEN else Color.GREEN));

#Branch Moving Averages Label ---------------------------------------------------------------------------

#MOVING AVERAGES-----------------------------------------------------------------
input length2 = 2;
input length5 = 5;
input length8 = 8;
input length10 = 10;
input length13 = 13;
input length21 = 21;
input length35 = 35;
input length50 = 50;
input length100 = 100;
input length200 = 200;
input over_Bought = 80;
input over_Sold = 20;
input price = close;
input averageType = AverageType.SIMPLE;
input showBreakoutSignals = no;
input averageType1 = AverageType.SIMPLE;

input crossingType = {default above, below};

def NetChgAvg = MovingAverage(averageType, price - price[1], length10);
def TotChgAvg = MovingAverage(averageType, AbsValue(price - price[1]), length10);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
def avg2 = MovingAverage(averageType1, price, length2);
def avg5 = MovingAverage(averageType1, price, length5);
def avg8 = MovingAverage(averageType1, price, length8);
def avg10 = MovingAverage(averageType1, price, length10);
def avg13 = MovingAverage(averageType1, price, length13);
def avg21 = MovingAverage(averageType1, price, length21);
def avg35 = MovingAverage(averageType1, price, length35);
def avg50 = MovingAverage(averageType1, price, length50);
def avg100 = MovingAverage(averageType1, price, length100);
def avg200 = MovingAverage(averageType1, price, length200);

#MOVING AVERGERS LABELS-----------------------------------------------------------------------------------
AddLabel (yes, if close then " MA " else "", Color.CYAN);
AddLabel(yes, if close < avg2 then " (2)  " +  Average (close, 2) else "", Color.RED);
AddLabel (yes, if close > avg2 then " (2)  " +  Average (close, 2) else "", Color.GREEN);
AddLabel(yes, if close < avg5 then " (5)  " +  Average (close, 5) else "", Color.RED);
AddLabel (yes, if close > avg5 then " (5)  " +  Average (close, 5) else "", Color.GREEN);
AddLabel(yes, if close < avg8 then " (8)  " +  Average (close, 8) else "", Color.RED);
AddLabel (yes, if close > avg8 then " (8)  " +  Average (close, 8) else "", Color.GREEN);
AddLabel(yes, if close < avg10 then " (10)  " +  Average (close, 10) else "", Color.RED);
AddLabel (yes, if close > avg10 then " (10)  " +  Average (close, 10) else "", Color.GREEN);
AddLabel(yes, if close < avg13 then " (13)  " +  Average (close, 13) else "", Color.RED);
AddLabel (yes, if close > avg13 then " (13)  " +  Average (close, 13) else "", Color.GREEN);
AddLabel (yes, if close < avg21 then " (21)  " +  Average (close, 21) else "", Color.RED);
AddLabel (yes, if close > avg21 then " (21)  " +  Average (close, 21) else "", Color.GREEN);
AddLabel (yes, if close < avg35 then " (35)  " +  Average (close, 35) else "", Color.RED);
AddLabel (yes, if close > avg35 then " (35)  " +  Average (close, 35) else "", Color.GREEN);
AddLabel (yes, if close < avg50 then " (50)  " +  Average (close, 50) else "", Color.RED);
AddLabel (yes, if close > avg50 then " (50)  " +  Average (close, 50) else "", Color.GREEN);
AddLabel (yes, if close < avg100 then " (100)  " +  Average (close, 100) else "", Color.RED);
AddLabel (yes, if close > avg100 then " (100)  " +  Average (close, 100) else "", Color.GREEN);
AddLabel (yes, if close < avg200 then " (200)  " +  Average (close, 200) else "", Color.RED);
AddLabel (yes, if close > avg200 then " (200)  " +  Average (close, 200) else "", Color.GREEN);

#THE END------------------------------------------------------------------------------------------------------------
 
Last edited:
Just added these labels.
AddLabel (yes, if close > avg5 and close > avg8 and close > avg10 and close > avg13 then " MA-BUY " else "", Color.GREEN);
AddLabel (yes, if close > avg21 and close > avg35 and close > avg50 and close > avg100 and close > avg200 then " POWERBUY " else "", Color.GREEN);

AddLabel (yes, if close < avg5 and close < avg8 and close < avg10 and close < avg13 then " MA-SELL " else "", Color.RED);
AddLabel (yes, if close < avg21 and close < avg35 and close < avg50 and close < avg100 and close < avg200 then " POWERSELL " else "", Color.RED);
 
this script is doing exactly what I want however I can't figure out how to get the labels to change color based on their value.

if value is positive number want label to be green
if value is negative number want red label

Code:
input cciAvgLength = 9;
def CCIAvg = Average(CCI(14), cciAvgLength);

addLabel(3,"BAR 3 " + (cciavg[3] - cciAvg[4]));
addLabel(2,"BAR 2 " + (cciavg[2] - cciAvg[3]));
AddLabel(1, "BAR 1 " + (cciavg[1] - cciAvg[2]));

Thanks so much!
 
this script is doing exactly what I want however I can't figure out how to get the labels to change color based on their value.

Code:
input cciAvgLength = 9;
def CCIAvg = Average(CCI(14), cciAvgLength);

addLabel(3,"BAR 3 " + (cciavg[3] - cciAvg[4]), if (cciavg[3] - cciAvg[4])>0 then color.green else color.red);
addLabel(2,"BAR 2 " + (cciavg[2] - cciAvg[3]));
AddLabel(1, "BAR 1 " + (cciavg[1] - cciAvg[2]));
I provided the syntax for Bar3, you should now be able to fill in the rest. HTH
 
Last edited:
@Hybety
Personally, I have little use for most watchlist columns. The only watchlist column that I use consistently is the CCI. If I am watching a stock for a potential trade, I find it provides a good signal for most of my strategies.
Ah, I see. Thank you!
My sense is if 2-3 of the right indicators/columns are lined up in agreement, the odds of success become very high. I'm trying to find that effective mix. And looking at it now I do agree the CCI is a good one. May I ask what triggers you look for there? Do you find it more effective paired with anything else?
 
Screenshot (152).png

CCI Stages Watchlist Column Color Key:
Same data as post#1. Changed up the look a wee bit.
Screenshot (149).png

the shared watchlist column link: http://tos.mx/Pmnncmk Click here for --> Easiest way to load shared links
a1.png

CCI Stages Watchlist code:
Ruby:
# ########################################################
# TOS CCI Average Labels & Watchlist by @MerryDay 12/20
# https://www.stockmarkethacks.com/commodity-channel.html
declare lower;
def cci_length = 14 ;
def cci_avg_length = 9 ;
def over_sold = -100 ;
def over_bought = 100 ;
def CCI =   reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCI" ;
def CCIAvg = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCIAvg" ;
# ########################################################
# Charting & Formatting
AddLabel(yes,
if CCI < over_sold and CCI >=CCIAvg     then "BUY " + Round(CCI, 0) else
if CCI < over_sold and CCI > CCI[1]     then "Reversing " + Round(CCI, 0) else
if CCI < over_sold                      then "Bottom " + Round(CCI, 0) else
if CCI >= over_bought and CCI >= CCI[1] then "Strong Trend " + Round(CCI, 0) else
if CCI > over_bought                    then "Watch It "  + Round(CCI, 0) else

if CCI crosses above CCIAvg then "TREND BEGIN " + Round(CCI, 0) else
if CCI crosses below CCIAvg then "TREND END " + Round(CCI, 0) else

if CCI < CCIAvg and CCI>CCI[1] then "pre-trend " + Round(CCI, 0)  else
if CCI > CCI[1]                 then "👍 "         + Round(CCI, 0) else
                                     "👎 "         + Round(CCI, 0) );
AssignBackgroundColor(
if CCI < over_sold and CCI >=CCIAvg then color.cyan else
if CCI < over_sold and CCI > CCI[1] then color.cyan  else
if CCI < over_sold                  then CreateColor(124, 10, 2)    else
if CCI > over_bought and CCI > CCI[1] then color.dark_orange else
if CCI > over_bought                    then CreateColor(153, 153, 255)  else
if CCI crosses above CCIAvg      then CreateColor(0, 0, 255) else
if CCI crosses below CCIAvg      then CreateColor(255, 204, 0)   else
if CCI < CCIAvg and CCI>CCI[1] then color.violet   else
if CCI > CCI[1]                 then color.green   else
CreateColor(225, 0, 0) ) ;

@cabe1332 @Hybety Based on poster feedback, I re-created this post with clear explanations. Hope this helps.
 
@Hybety In answer to your question, as to what other indicators I use.
I am a traditional swing trader. I use the main three types of indicators on 3 higher aggregations:
xJNxVT0.png

I am currently using these three indicators. But almost all the standard trend/momentum, volume , support & resistance studies viewed on several timeframes will result in a successful strategy.
I only trade stocks with strong financials with long-term uptrends. As a swing trader, these stocks have histories of being profitable and forward-looking signals that they will continue to be so.
 
Last edited:
@cabe1332
As many members use dark mode, could you post your dark-mode friendly version of the watchlist?
@MerryDay per your request of using color.black on text and change "TREND BEGIN" to color.lime. Thanks again. Good luck! @cabe1332

Ruby:
# TOS CCI Average Labels & Watchlist by @MerryDay 12/20
# https://www.stockmarkethacks.com/commodity-channel.html
# declare lower;
def cci_length = 14 ;
def cci_avg_length = 9 ;
def over_sold = -100 ;
def over_bought = 100 ;
def CCI = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCI" ;
def CCIAvg = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCIAvg" ;

# Charting & Formatting
AddLabel(yes,
if CCI < over_sold and CCI >=CCIAvg then "BUY " + Round(CCI, 0) else
if CCI < over_sold and CCI > CCI[1] then "Reversing " + Round(CCI, 0) else
if CCI < over_sold then "Bottom " + Round(CCI, 0) else
if CCI >= over_bought and CCI >= CCI[1] then "Strong Trend " + Round(CCI, 0) else
if CCI > over_bought then "Watch It " + Round(CCI, 0) else

if CCI crosses above CCIAvg then "TREND BEGIN " + Round(CCI, 0) else
if CCI crosses below CCIAvg then "TREND END " + Round(CCI, 0) else

if CCI < CCIAvg and CCI>CCI[1] then "Pre-Trend " + Round(CCI, 0) else
if CCI > CCI[1] then "👍 " + Round(CCI, 0) else
"👎 " + Round(CCI, 0), color.black );
AssignBackgroundColor(
if CCI < over_sold and CCI >=CCIAvg then color.cyan else
if CCI < over_sold and CCI > CCI[1] then color.cyan else
if CCI < over_sold then CreateColor(124, 10, 2) else
if CCI > over_bought and CCI > CCI[1] then color.dark_orange else
if CCI > over_bought then CreateColor(153, 153, 255) else
#if CCI crosses above CCIAvg then CreateColor(0, 0, 255) else
if CCI crosses above CCIAvg then color.lime else
if CCI crosses below CCIAvg then CreateColor(255, 204, 0) else
if CCI < CCIAvg and CCI>CCI[1] then color.violet else
if CCI > CCI[1] then color.green else
CreateColor(225, 0, 0) ) ;

# code end
JRDGSTK.png


VZgpvOc.png
 
Last edited by a moderator:
Awsome, you people are really great to share all this. I ran it against my zero based CCI watchlist indicator and it confirms my choices. thx
 
@MerryDay per your request of using color.black on text and change "TREND BEGIN" to color.lime. Thanks again. Good luck! @cabe1332

Ruby:
# TOS CCI Average Labels & Watchlist by @MerryDay 12/20
# https://www.stockmarkethacks.com/commodity-channel.html
# declare lower;
def cci_length = 14 ;
def cci_avg_length = 9 ;
def over_sold = -100 ;
def over_bought = 100 ;
def CCI = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCI" ;
def CCIAvg = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCIAvg" ;

# Charting & Formatting
AddLabel(yes,
if CCI < over_sold and CCI >=CCIAvg then "BUY " + Round(CCI, 0) else
if CCI < over_sold and CCI > CCI[1] then "Reversing " + Round(CCI, 0) else
if CCI < over_sold then "Bottom " + Round(CCI, 0) else
if CCI >= over_bought and CCI >= CCI[1] then "Strong Trend " + Round(CCI, 0) else
if CCI > over_bought then "Watch It " + Round(CCI, 0) else

if CCI crosses above CCIAvg then "TREND BEGIN " + Round(CCI, 0) else
if CCI crosses below CCIAvg then "TREND END " + Round(CCI, 0) else

if CCI < CCIAvg and CCI>CCI[1] then "Pre-Trend " + Round(CCI, 0) else
if CCI > CCI[1] then "👍 " + Round(CCI, 0) else
"👎 " + Round(CCI, 0), color.black );
AssignBackgroundColor(
if CCI < over_sold and CCI >=CCIAvg then color.cyan else
if CCI < over_sold and CCI > CCI[1] then color.cyan else
if CCI < over_sold then CreateColor(124, 10, 2) else
if CCI > over_bought and CCI > CCI[1] then color.dark_orange else
if CCI > over_bought then CreateColor(153, 153, 255) else
#if CCI crosses above CCIAvg then CreateColor(0, 0, 255) else
if CCI crosses above CCIAvg then color.lime else
if CCI crosses below CCIAvg then CreateColor(255, 204, 0) else
if CCI < CCIAvg and CCI>CCI[1] then color.violet else
if CCI > CCI[1] then color.green else
CreateColor(225, 0, 0) ) ;

# code end
JRDGSTK.png


VZgpvOc.png

View attachment 1010
CCI Stages Watchlist Column Color Key:
Same data as post#1. Changed up the look a wee bit.
View attachment 1011
the shared watchlist column link: http://tos.mx/Pmnncmk Click here for --> Easiest way to load shared links
View attachment 1012
CCI Stages Watchlist code:
Ruby:
# ########################################################
# TOS CCI Average Labels & Watchlist by @MerryDay 12/20
# https://www.stockmarkethacks.com/commodity-channel.html
declare lower;
def cci_length = 14 ;
def cci_avg_length = 9 ;
def over_sold = -100 ;
def over_bought = 100 ;
def CCI =   reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCI" ;
def CCIAvg = reference CCIAverage("cci length" = cci_length, "cci avg length" = cci_avg_length)."CCIAvg" ;
# ########################################################
# Charting & Formatting
AddLabel(yes,
if CCI < over_sold and CCI >=CCIAvg     then "BUY " + Round(CCI, 0) else
if CCI < over_sold and CCI > CCI[1]     then "Reversing " + Round(CCI, 0) else
if CCI < over_sold                      then "Bottom " + Round(CCI, 0) else
if CCI >= over_bought and CCI >= CCI[1] then "Strong Trend " + Round(CCI, 0) else
if CCI > over_bought                    then "Watch It "  + Round(CCI, 0) else

if CCI crosses above CCIAvg then "TREND BEGIN " + Round(CCI, 0) else
if CCI crosses below CCIAvg then "TREND END " + Round(CCI, 0) else

if CCI < CCIAvg and CCI>CCI[1] then "pre-trend " + Round(CCI, 0)  else
if CCI > CCI[1]                 then "👍 "         + Round(CCI, 0) else
                                     "👎 "         + Round(CCI, 0) );
AssignBackgroundColor(
if CCI < over_sold and CCI >=CCIAvg then color.cyan else
if CCI < over_sold and CCI > CCI[1] then color.cyan  else
if CCI < over_sold                  then CreateColor(124, 10, 2)    else
if CCI > over_bought and CCI > CCI[1] then color.dark_orange else
if CCI > over_bought                    then CreateColor(153, 153, 255)  else
if CCI crosses above CCIAvg      then CreateColor(0, 0, 255) else
if CCI crosses below CCIAvg      then CreateColor(255, 204, 0)   else
if CCI < CCIAvg and CCI>CCI[1] then color.violet   else
if CCI > CCI[1]                 then color.green   else
CreateColor(225, 0, 0) ) ;

@cabe1332 @Hybety Based on poster feedback, I re-created this post with clear explanations. Hope this helps.
hi all. New here as a member but have been using this CCI watchlist for a few weeks doing paper TOS trades and LOVE the results. I **** at coding and have a question. Is this same type of watchlist column possible with a True Strength Indicator (TSI)?
I use the TSI in think or swim and really like it as well for confirmations.
Thanks for ALL the hard work and passion you folks put into your work.

Eddie.
Trading experience: Over 3 years on options and futures
Trading platform: Think or Swim
Coding experience: Almost zero. What I have learned and used has been from public forums such as this and a few others
 
hi all. New here as a member but have been using this CCI watchlist for a few weeks doing paper TOS trades and LOVE the results. I **** at coding and have a question. Is this same type of watchlist column possible with a True Strength Indicator (TSI)?
I use the TSI in think or swim and really like it as well for confirmations.
Thanks for ALL the hard work and passion you folks put into your work.

Eddie.
Trading experience: Over 3 years on options and futures
Trading platform: Think or Swim
Coding experience: Almost zero. What I have learned and used has been from public forums such as this and a few others
TSI & CCI are both trend indicators. It would not be necessary to have BOTH on your charts. This can sometimes lead to Analysis Paralysis.
You want to have different TYPES of indicators on your charts.
Read more here:
https://usethinkscript.com/threads/...nt-to-successful-trading-in-thinkorswim.6114/
https://usethinkscript.com/threads/what-are-the-different-types-of-indicators-heres-one-answer.298/
 
Last edited:
TSI & CCI are both trend indicators. It would not be necessary to have BOTH on your charts. This can sometimes lead to Analysis Paralysis.
You want to have different TYPES of indicators on your charts.
Read more here:
https://usethinkscript.com/threads/...nt-to-successful-trading-in-thinkorswim.6114/
https://usethinkscript.com/threads/what-are-the-different-types-of-indicators-heres-one-answer.298/
Thanks for the kwik reply. I have momentum, vol and directional indicators for confirmation and like the TSI best. If a similar watchlist column as this CCI was available/possible with the TSI I would rather use it. If not, I appreciate the great work on the CCI and look forward to more great work/ideas here.
 
Thanks for the kwik reply. I have momentum, vol and directional indicators for confirmation and like the TSI best. If a similar watchlist column as this CCI was available/possible with the TSI I would rather use it. If not, I appreciate the great work on the CCI and look forward to more great work/ideas here.
Do you have a link to the TSI script that you are using?
 
Do you have a link to the TSI script that you are using?
Currently I only use the true strength index Think or Swim has built in for charts. Here is a watchlist script I had copied from a forum (memory is crap and don't remember where I got it or I would give the source credit) that I stopped using when I found the CCI watchlist here.
My question is can this TSI script be written to give similar signals (Bottom, reversing, watch it same type with colors....)
##ONE NOTE
#Wednesday, May 15, 2019 - archived 1
def Data = close;
def NA = Double.NaN;
#NA.SetDefaultColor(Color.BLACK);
#NA.HideTitle();

declare lower;
input lookback = 1;
input IndicatorLine = 13;
input Smooth =8;
input SignalLine = 6;
def TSIFast = TrueStrengthIndex(LongLength = IndicatorLine, ShortLength = smooth);
def TSISlow = ExpAverage(TSIFast, SignalLine);
#def zero = 0;
def bull_cross = TSIFast crosses above TSISlow ;
def bear_cross = TSIFast crosses below TSISlow;
def bull_lookback = highest(bull_cross, lookback);
def bear_lookback = highest(bear_cross, lookback);


plot signal = if bull_lookback then 2 else if bear_lookback then 1 else 0;
signal.AssignValueColor(if signal == 2 then Color.Dark_Green else if signal == 1 then Color.Dark_Red else Color.Dark_Orange);
AssignBackgroundCOlor(if signal == 2 then Color.Dark_Green else if signal == 1 then Color.Dark_Red else Color.Dark_Orange);
 
Here are screen shots of the True Strength Index (TSI) from think or swim and what I see on my chart set up. I am looking for the following to be indicated in a TSI watchlist similar to the CCI posted here:

#1: TSI = below zero line .... little "thumbs down" symbol and red background
#2: TSI = -20 and below .... then "bottoming" and color dark red back ground
#3: TSI = above -20 but below zero line .... "reversing UP" light blue color if possible
#4: TSI = above zero but below 20 .... the little "thumbs up" symbol with green background
#5: TSI = above 20 but below 40 .... "strong trend" orange background
#6: TSI = above 40 .... "watch it!" with same background as this CCI

Was trying to post a screen shot of the think or swim TSI customizing box and what I see on charts but was unable. to for your reference.

I hope this is seen as a worth wild project......but if not, the CCI watchlist here is awesome in it's own right.

Eddie
(Military retired)
 
input length = 14
input over_sold = -100;
input over_bought = 100;
input ext_sold = -200;
input ext_bought = 200;

def price = close + low + high;
def linDev = LinDev(price, length);
def CCI1 = if linDev == 0 then 0 else (price - Average(price, length1)) / linDev / 0.015;
def OverBought = over_bought;
def ExtBought = ext_bought;
def ZeroLine = 0;
def OverSold = over_sold;
def ExtSold = ext_sold;

AddOrder(OrderType.BUY_AUTO, CCI1 crosses above 0, tickColor = GetColor(0), arrowColor = GetColor(0), name = "CCIStratLE");
AddOrder(OrderType.SELL_AUTO, CCI1 crosses below 0, tickColor = GetColor(1), arrowColor = GetColor(1), name = "CCIStratSE");
 
Last edited:

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
439 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

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.

How do I get started?

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.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top