"SuperComboBullBear" and Linus's Supertrend

Shinthus

Shinthus

Member
VIP
Linus has a few really nice supertrend scripts in the ThinkScript_Cloud. Here are 2 I found useful:

Code:
## START STUDY
## SuperCombo Bull/Bear Indicator
## linus, 2014-07-24, v0.1

#hint: SuperTrend of price, RSI and Ultimate Oscillator, combined with Chandelier stops.

## Signal inputs:
input paintBars = {OFF, default DIR, STR};
input signals = {OFF, default ALL, ST, CS, RSI, UO};
input strength = {"1", "2", default "3", "4"};
input showLabel = Yes;
input showBubbles = Yes;
input showPrompt = Yes;

## SuperTrend of Price inputs:
input stATRMult = 3.5;
input stATRLength = 22;
input stATRType = AverageType.WILDERS;
input stPivot = hl2;

## Chandelier Stop inputs:
input csPeriod = 15;
input csATRLength = 5;
input csATRMult = 3.0;   
input csATRType = AverageType.SIMPLE;
input csShift = 1; 
input csHideOpposite = Yes; 

## SuperTrend of RSI inputs:
input rsiLength = 14;
input rsiPrice = close;
input rsiSmooth = 2;
input rsiSmoothType = AverageType.SIMPLE;
input rsiATRMult = 2.3;
input rsiATRLength = 25;
input rsiATRType = AverageType.WILDERS;

## SuperTrend of Ultimate Oscillator inputs:
input uoFastLen = 7;
input uoMedLen = 14;
input uoSlowLen = 28;
input uoATRMult = 2.8;
input uoATRLength = 3;
input uoATRType = AverageType.SIMPLE;

########################################
## SuperTrend of Price

def stATR = MovingAverage(stATRType, TrueRange(high, close, low), stATRLength) * stATRMult;

def stUp = stPivot + stATR;
def stDn = stPivot - stATR;

def rStTrend = compoundValue(1,
    if rStTrend[1] > 0 then
        if close < Max(stDn[1], rStTrend[1]) then -stUp
        else Max(stDn, rStTrend[1])
    else if rStTrend[1] < 0 then
        if close > Min(stUp[1], AbsValue(rStTrend[1])) then stDn
        else -Min(stUp, AbsValue(rStTrend[1]))
    else rStTrend[1]
, stPivot);

plot StTrend = if Sign(rStTrend) == Sign(rStTrend[1]) then absValue(rStTrend) else Double.NaN;
StTrend.DefineColor("Up", Color.CYAN);
StTrend.DefineColor("Dn", Color.MAGENTA);
StTrend.AssignValueColor(if rStTrend > 0 then StTrend.Color("Up") else StTrend.Color("Dn"));
StTrend.HideBubble();
StTrend.SetLineWeight(3);

########################################
## Chandelier_Stops

def csATR = MovingAverage(csATRType, TrueRange(high, close, low), csATRLength) * csATRMult;

def smax = Lowest(low, csPeriod)[csShift] + csATR[csShift];
def smin = Highest(high, csPeriod)[csShift] - csATR[csShift];

def rCSTrend = compoundValue(1, if close > smax[1] then 1 else if close < smin[1] then -1 else rCSTrend[1], 0);

def rUB = compoundValue(1, if rCSTrend > 0 then if smax > rUB[1] then smax else rUB[1] else if rCSTrend < 0 then if smax < rUB[1] then smax else rUB[1] else rUB[1], high);

def rLB = compoundValue(1, if rCSTrend < 0 then if smin < rLB[1] then smin else rLB[1] else if rCSTrend > 0 then if smin > rLB[1] then smin else rLB[1] else rLB[1], low);

plot UB = if !csHideOpposite or rCSTrend < 0 then rUB else Double.NaN;
UB.SetDefaultColor(Color.MAGENTA);
UB.SetLineWeight(3);
UB.SetStyle(Curve.SHORT_DASH);
UB.HideBubble();

plot LB = if !csHideOpposite or rCSTrend > 0 then rLB else Double.NaN;
LB.SetDefaultColor(Color.CYAN);
LB.SetLineWeight(3);
LB.SetStyle(Curve.SHORT_DASH);
LB.HideBubble();

########################################
## SuperTrend of RSI

def avgDif = WildersAverage(AbsValue(rsiPrice - rsiPrice[1]), rsiLength);
def RSI = MovingAverage(rsiSmoothType, 50 * ((if avgDif != 0 then WildersAverage(rsiPrice - rsiPrice[1], rsiLength) / avgDif else 0) + 1), rsiSmooth);

def rsiATR = MovingAverage(rsiATRType, TrueRange(Highest(RSI, ceil(rsiATRMult)), RSI, Lowest(RSI, ceil(rsiATRMult))), rsiATRLength) * rsiATRMult;
def rsiUp = RSI + rsiATR;
def rsiDn = RSI - rsiATR;

def rRSITrend = compoundValue(1,
    if rRSITrend[1] > 0 then
        if RSI < Max(rsiDn[1], rRSITrend[1]) then -rsiUp
        else Max(rsiDn, rRSITrend[1])
    else if rRSITrend[1] < 0 then
        if RSI > Min(rsiUp[1], AbsValue(rRSITrend[1])) then rsiDn
        else -Min(rsiUp, AbsValue(rRSITrend[1]))
    else rRSITrend[1]
, RSI);

########################################
## SuperTrend of Ultimate Oscillator

def TR = TrueRange(high, close, low);
def BP = close - Min(close[1], low);
def nFast = (uoSlowLen / uoFastLen);
def nMed = (uoSlowLen / uoMedLen);
def trFast = sum(TR, uoFastLen);
def trMed = sum(TR, uoMedLen);
def trSlow = sum(TR, uoSlowLen);

def UO = 100 * (((if trFast != 0 then (sum(BP, uoFastLen) / trFast) * nFast else 0)
    +  (if trMed != 0 then (sum(BP, uoMedLen) / trMed) * nMed else 0)
    + (if trSlow != 0 then (sum(BP, uoSlowLen) / sum(TR, uoSlowLen)) else 0))
/ (nFast + nMed + 1));

def uoATR = MovingAverage(uoATRType, TrueRange(Highest(UO, ceil(uoATRMult)), UO, Lowest(UO, ceil(uoATRMult))), uoATRLength) * uoATRMult;
def uoUp = UO + uoATR;
def uoDn = UO - uoATR;

def rUOTrend = compoundValue(1,
    if rUOTrend[1] > 0 then
        if UO < Max(uoDn[1], rUOTrend[1]) then -uoUp
        else Max(uoDn, rUOTrend[1])
    else if rUOTrend[1] < 0 then
        if UO > Min(uoUp[1], AbsValue(rUOTrend[1])) then uoDn
        else -Min(uoUp, AbsValue(rUOTrend[1]))
    else rUOTrend[1]
, UO);

########################################
## Signals

def orderDir;
def p;
def sumUp = (rStTrend > 0) + (rCSTrend > 0) + (rRSITrend > 0) + (rUOTrend > 0);
def sumDn = (rStTrend < 0) + (rCSTrend < 0) + (rRSITrend < 0) + (rUOTrend < 0);

switch (signals) {
case OFF:
    orderDir = 0;
    p = 0;
case ALL:
    orderDir = compoundValue(1, if sumUp >= strength+1 then 1 else if sumDn >= strength+1 then -1 else orderDir[1], 0);
    p = if showPrompt then 1 else 0;
case ST:
    orderDir = rStTrend;
    p = if showPrompt then 2 else 0;
case CS:
    orderDir = rCSTrend;
    p = if showPrompt then 3 else 0;
case RSI:
    orderDir = rRSITrend;
    p = if showPrompt then 4 else 0;
case UO:
    orderDir = rUOTrend;
    p = if showPrompt then 5 else 0;
}

def isOrder = orderDir crosses 0;

def orderCount = compoundValue(1, if isNaN(isOrder) then 0 else if isOrder then orderCount[1] + 1 else orderCount[1], 0);

def noBar = isNaN(open[-1]);

def orderPrice = if isOrder then if noBar then close else open[-1] else orderPrice[1];
def profitLoss = if !isOrder or orderCount == 1 then 0 else if orderDir > 0 then orderPrice[1] - orderPrice else if orderDir < 0 then orderPrice - orderPrice[1] else 0;
def profitLossSum = compoundValue(1, if isNaN(isOrder) then 0 else if isOrder then profitLossSum[1] + profitLoss else profitLossSum[1], 0);

AddLabel(signals and showLabel, (if p==1 then "ALL: " else if p==2 then "ST: " else if p==3 then "CS: " else if p==4 then "RSI: " else if p==5 then "UO: " else "") + orderCount + " orders | P/L " + AsDollars((profitLossSum / tickSize()) * tickValue()), if profitLossSum > 0 then Color.GREEN else if profitLossSum < 0 then Color.RED else Color.GRAY);

AddChartBubble(signals and showBubbles and isOrder and orderDir > 0, low, profitLoss, if noBar then Color.LIGHT_GRAY else Color.GREEN, 0);
AddChartBubble(signals and showBubbles and isOrder and orderDir < 0, high, profitLoss, if noBar then Color.GRAY else Color.RED, 1);

AssignPriceColor(if !paintBars then Color.CURRENT
else if paintBars == paintBars.DIR then
    if orderDir > 0 then
        if rSTTrend < 0 or rCSTrend < 0 then Color.DARK_ORANGE
        else Color.UPTICK
    else if orderDir < 0 then
        if rSTTrend > 0 or rCSTrend > 0 then Color.YELLOW
        else Color.DOWNTICK
    else Color.GRAY
else if sumUp >= strength+1 then Color.UPTICK
else if sumDn >= strength+1 then Color.DOWNTICK
else if sumUp > sumDn then Color.YELLOW
else if sumDn > sumUp then Color.DARK_ORANGE
else Color.GRAY);

## END STUDY


Supertrend - #hint: Alternative SuperTrend algorithm.



When you go into the properties, you'll notice how you can change the movingavg type from Simple, Exponential, Wilders, Hull, and Weighted. I'm still trying to figure out which would be best for these.

Contrary to what many think, I actually like using ATR trailing stop-esque indicators for both entry and management of a trade. These both might even work well together if you use one as an entry and the other to manage. I'm thinking this might work very well with AMM (Advanced Market Moves) indicator. Maybe use that as entry, and these as management. We should mix and match to see what is most effective.

Would appreciate your feedback after testing.
 
Last edited by a moderator:
markos

markos

Well-known member
VIP
Warehouse
Try Wilders, Weighted and Exponential. Trial and Error. Anything that Linus codes up is going to be written correctly. He's a pro. I like his stuff but sadly, not the way I trade. :( PS, follow him at MyTrade.com
 
markos

markos

Well-known member
VIP
Warehouse
We need to remind people that the thinkscript cloud by JQ is in the Tutorials section as the Universe of Thinkscript. That way people can search Universe in the box at the top...
 
T

thinky

Member
@mo2020 Original post has 2 links for the code: ThinkScript study_20190807_1 & ThinkScript study_20190807_2.
 
markos

markos

Well-known member
VIP
Warehouse
how to get the code
@mo2020 Please read the Tutorial Section, especially thinkScript Q&A with Links .
Contact support: you are entitled to a free TOS tour. Write down 10 questions so that they can answer about areas you are most interested in.
Lastly, please fill out your signature line. Thank you!
 
S

Skito

New member
Hi Everyone,
Great indicators, Thanks!
Anyone have any links with information/tutorials on the super combo indicator?
 
Shinthus

Shinthus

Member
VIP
Hi Everyone,
Great indicators, Thanks!
Anyone have any links with information/tutorials on the super combo indicator?
Not much from the ThunkScript_Cloud has explanations or tutorials
 
S

Skito

New member
OK thanks for the reply.
I have been using a similar indicator, but not quite sure what each indicator represents on this one. Can someone be so kind as to describe what I am looking at?
ie..
solid lines
dotted lines
I am assuming green candles is an uptrend and red down trend but we have yellow and orange as well.
Also is has what appears to be profit and loss bubbles.

 
Shinthus

Shinthus

Member
VIP
OK thanks for the reply.
I have been using a similar indicator, but not quite sure what each indicator represents on this one. Can someone be so kind as to describe what I am looking at?
ie..
solid lines
dotted lines
I am assuming green candles is an uptrend and red down trend but we have yellow and orange as well.
Also is has what appears to be profit and loss bubbles.

did you pull that indicator from this site? We have one somewhere that looks like that.
 
Shinthus

Shinthus

Member
VIP
Purple is downtrend, blue is uptrend. Use in tandem with other indicators.
 
S

Skito

New member
yes its the one posted above SuperComboBullBear I just changed colors.
So is the dotted line the entry and solid the stopor just support and resistance lines?
are yellow and orange candles indecision/no trend?
 
S

Skito

New member
Hi
Does anyone know if the supercombo script posted above can be modified for mobile?
 
S

Skito

New member
@Skito Not that I know of, but the here is the other Supertrend that works on mobile https://usethinkscript.com/threads/supertrend-indicator-by-mobius-for-thinkorswim.7/page-2#post-541
Hi Ben
on this supercombo
I am trying to figure out the significance of the orange and yellow candles. in the script it reads:

AssignPriceColor(if !paintBars then Color.CURRENT

else if paintBars == paintBars.DIR then

if orderDir > 0 then

if rSTTrend < 0 or rCSTrend < 0 then Color.DARK_ORANGE

else Color.UPTICK

else if orderDir < 0 then

if rSTTrend > 0 or rCSTrend > 0 then Color.YELLOW

else Color.DOWNTICK

else Color.GRAY

else if sumUp >= strength+1 then Color.UPTICK

else if sumDn >= strength+1 then Color.DOWNTICK

else if sumUp > sumDn then Color.YELLOW

else if sumDn > sumUp then Color.DARK_ORANGE

else Color.GRAY);
So do the orange candles represent no trend and the yellow slight trend?
 
H

horserider

Well-known member
VIP
Warehouse
@Skito If a study is that difficult to understand, find a simpler one.
 
markos

markos

Well-known member
VIP
Warehouse
Can someone explain how this works Thanks
TOS offers a free tour. Please have 10 questions ready that you are most interested in. With 9 million customer accounts, they can't reach out to everyone. I just received an email invitation for a tour and I've been working in TOS for quite a few years already.
I have learned code by opening up a chart I was looking at and putting a # in front of certain lines and then seeing what the screen looked like.
Keep trying, it will come to you. Good luck.
 
Top