B-Xtrender For ThinkOrSwim

samer800

Moderator - Expert
VIP
Lifetime
That did it thanks for that.

For anyone else wanting to use this Tradingview indicator here is the code I am using. The source code can be found here https://www.tradingview.com/script/YHZimEz8-B-Xtrender-Puppytherapy/

I have found that not all of my custom coded color translate so on the longXtrenderHist I have to darken the "Negative and Down" and the "Positive and Up" colors by clicking their color block then clicking "More...". Next select the "HSV" tab at the top and enter "60" for the Transparency level of both.

Code:
#// This source code is subject to the terms of the Mozilla Public License 2.0 at #https://mozilla.org/MPL/2.0/
#// ©Puppytherapy
#//@version=4
#study(title="B-Xtrender")
# Converted by mrhitts - 012/2022

declare lower;

input short_l1 = 5;
input short_l2 = 20;
input short_l3 = 15;

input long_l1 = 20;
input long_l2 = 15;

def R = RSI(14,CLOSE);

def averageType = AverageType.WILDERS;

def shortSetup = MovAvgExponential(close, short_l1) - MovAvgExponential(close, short_l2);

def shortNetChgAvg = MovingAverage(averageType, shortSetup - shortSetup[1], short_l3);
def shortTotChgAvg = MovingAverage(averageType, AbsValue(shortSetup - shortSetup[1]), short_l3);
def shortChgRatio = if shortTotChgAvg != 0 then shortNetChgAvg / shortTotChgAvg else 0;


plot shortXtrenderHist = (50 * (shortChgRatio + 1)) - 50;
shortXtrenderHist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
shortXtrenderHist.SetLineWeight(5);
shortXtrenderHist.DefineColor("Positive and Up", CreateColor(0, 255, 102)); #Lime
shortXtrenderHist.DefineColor("Positive and Down", CreateColor(102, 153, 0)); #Dark Lime
shortXtrenderHist.DefineColor("Negative and Down", CreateColor(255, 220, 210)); #Light Red
shortXtrenderHist.DefineColor("Negative and Up", CreateColor(204, 0, 51)); #Dark Light Red

shortXtrenderHist.AssignValueColor(if shortXtrenderHist >= 0 then if shortXtrenderHist > shortXtrenderHist[1] then shortXtrenderHist.color("Positive and Up") else shortXtrenderHist.color("Positive and Down") else if shortXtrenderHist < shortXtrenderHist[1] then shortXtrenderHist.color("Negative and Down") else shortXtrenderHist.color("Negative and Up"));


def longSetup = MovAvgExponential(close, long_l1);

def longNetChgAvg = MovingAverage(averageType, longSetup - longSetup[1], long_l2);
def longTotChgAvg = MovingAverage(averageType, AbsValue(longSetup - longSetup[1]), long_l2);
def longChgRatio = if longTotChgAvg != 0 then longNetChgAvg / longTotChgAvg else 0;


plot longXtrenderHist = (50 * (longChgRatio + 1)) - 50;
longXtrenderHist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
longXtrenderHist.SetLineWeight(1);
longXtrenderHist.DefineColor("Positive and Up", CreateColor(0, 191, 0)); #Dark Green
longXtrenderHist.DefineColor("Positive and Down", CreateColor(0, 100, 0)); #Extremely Dark Green
longXtrenderHist.DefineColor("Negative and Down", CreateColor(255, 53, 0)); #Dark Red
longXtrenderHist.DefineColor("Negative and Up", CreateColor(128, 0, 0)); #Extemely Dark Red

longXtrenderHist.AssignValueColor(if longXtrenderHist >= 0 then if longXtrenderHist > longXtrenderHist[1] then longXtrenderHist.color("Positive and Up") else longXtrenderHist.color("Positive and Down") else if longXtrenderHist < longXtrenderHist[1] then longXtrenderHist.color("Negative and Down") else longXtrenderHist.color("Negative and Up"));


plot longXtrender = (50 * (longChgRatio + 1)) - 50;
longXtrender.SetPaintingStrategy(PaintingStrategy.LINE);
longXtrender.SetLineWeight(3);
longXtrender.DefineColor("Positive", Color.GREEN);
longXtrender.DefineColor("Negative", Color.RED);
longXtrender.AssignValueColor(if longXtrender > longXtrender[1] then longXtrender.color("Positive") else longXtrender.color("Negative"));


script t3 {
    input src = close;
    input len = 10;
    def xe1_1 = MovAvgExponential(src,    len);
    def xe2_1 = MovAvgExponential(xe1_1,  len);
    def xe3_1 = MovAvgExponential(xe2_1,  len);
    def xe4_1 = MovAvgExponential(xe3_1,  len);
    def xe5_1 = MovAvgExponential(xe4_1,  len);
    def xe6_1 = MovAvgExponential(xe5_1,  len);
    def b_1 = 0.7;
    def c1_1 = -b_1 * b_1 * b_1;
    def c2_1 = 3 * b_1 * b_1 + 3 * b_1 * b_1 * b_1;
    def c3_1 = -6 * b_1 * b_1 - 3 * b_1 - 3 * b_1 * b_1 * b_1;
    def c4_1 = 1 + 3 * b_1 + b_1 * b_1 * b_1 + 3 * b_1 * b_1;
    def nT3Average_1 = c1_1 * xe6_1 + c2_1 * xe5_1 + c3_1 * xe4_1 + c4_1 * xe3_1;
    plot z = nT3Average_1;
}


plot maShortXtrender = t3( shortXtrenderHist , 5)
;
maShortXtrender.SetPaintingStrategy(PaintingStrategy.LINE);
maShortXtrender.SetLineWeight(3);
maShortXtrender.DefineColor("Positive", Color.GREEN);
maShortXtrender.DefineColor("Negative", Color.RED);
maShortXtrender.AssignValueColor(if maShortXtrender > maShortXtrender[1] then maShortXtrender.color("Positive") else maShortXtrender.color("Negative"));


input Signals = yes;
def Buy = maShortXtrender > maShortXtrender[1] and maShortXtrender[1] < maShortXtrender[2];


plot BuySignal = if Signals == yes and Buy is true then maShortXtrender else double.nan;
BuySignal.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
BuySignal.SetLineWeight(5);
BuySignal.AssignValueColor(Color.GREEN);

def Sell = maShortXtrender < maShortXtrender[1] and maShortXtrender[1] > maShortXtrender[2];


plot SellSignal = if Signals == yes and Sell is true then maShortXtrender else double.nan;
SellSignal.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
SellSignal.SetLineWeight(5);
SellSignal.AssignValueColor(Color.RED);
I just the colors

CSS:
#// This source code is subject to the terms of the Mozilla Public License 2.0 at #https://mozilla.org/MPL/2.0/
#// ©Puppytherapy
#//@version=4
#study(title="B-Xtrender")
# Converted by mrhitts - 012/2022

declare lower;
input Signals = yes;
input short_l1 = 5;
input short_l2 = 20;
input short_l3 = 15;
input long_l1 = 20;
input long_l2 = 15;

def na = Double.NaN;
#---
script t3 {
    input src = close;
    input len = 10;
    def xe1_1 = ExpAverage(src,  len);
    def xe2_1 = ExpAverage(xe1_1,len);
    def xe3_1 = ExpAverage(xe2_1,len);
    def xe4_1 = ExpAverage(xe3_1,len);
    def xe5_1 = ExpAverage(xe4_1,len);
    def xe6_1 = ExpAverage(xe5_1,len);
    def b_1 = 0.7;
    def c1_1 = -b_1 * b_1 * b_1;
    def c2_1 = 3 * b_1 * b_1 + 3 * b_1 * b_1 * b_1;
    def c3_1 = -6 * b_1 * b_1 - 3 * b_1 - 3 * b_1 * b_1 * b_1;
    def c4_1 = 1 + 3 * b_1 + b_1 * b_1 * b_1 + 3 * b_1 * b_1;
    def nT3Average_1 = c1_1 * xe6_1 + c2_1 * xe5_1 + c3_1 * xe4_1 + c4_1 * xe3_1;
    plot z = nT3Average_1;
}

def rsiShort = ExpAverage(close, short_l1) - ExpAverage(close, short_l2);
def rsiLong  = ExpAverage(close, long_l1);
def shortTermXtrender = rsi(Price=rsiShort,Length=short_l3 ) - 50;
def longTermXtrender  = rsi(Price=rsiLong,Length= long_l2 ) - 50;
def shortXtrenderCol = if shortTermXtrender > 0 then if shortTermXtrender > shortTermXtrender[1] then 2 else 1 else
                       if shortTermXtrender > shortTermXtrender[1] then -2 else -1;
def maShortTermXtrender = t3(shortTermXtrender , 5 );
def colShortTermXtrender = if maShortTermXtrender > maShortTermXtrender[1] then 1 else 0;

plot bXtrenderColor = maShortTermXtrender;
bXtrenderColor.SetLineWeight(3);
bXtrenderColor.AssignValueColor(if colShortTermXtrender then Color.GREEN else Color.RED);
plot bXtrenderShadow = maShortTermXtrender;
bXtrenderShadow.SetLineWeight(5);
bXtrenderShadow.SetDefaultColor(Color.BLACK);

def longXtrenderCol   = if longTermXtrender> 0 then if longTermXtrender > longTermXtrender[1] then 2 else 1 else
                        if longTermXtrender > longTermXtrender[1] then -2 else -1;
def macollongXtrenderCol =  if longTermXtrender > longTermXtrender[1] then 1 else 0;


plot XtrenderTrendLine = longTermXtrender;
XtrenderTrendLine.SetLineWeight(2);
XtrenderTrendLine.AssignValueColor(if macollongXtrenderCol then Color.DARK_GREEN else Color.DARK_RED);
plot XtrenderTrendShadow  = longTermXtrender;
XtrenderTrendShadow.SetLineWeight(4);
XtrenderTrendShadow.SetDefaultColor(Color.BLACK);

def Buy = if maShortTermXtrender > maShortTermXtrender[1] and maShortTermXtrender[1] < maShortTermXtrender[2] then  maShortTermXtrender else na;
def Sell = if maShortTermXtrender < maShortTermXtrender[1] and maShortTermXtrender[1] > maShortTermXtrender[2] then  maShortTermXtrender else na;

plot BuySignal = if Signals then Buy else na;
BuySignal.SetPaintingStrategy(PaintingStrategy.POINTS);
BuySignal.SetLineWeight(5);
BuySignal.AssignValueColor(Color.GREEN);

plot SellSignal = if Signals then Sell else na;
SellSignal.SetPaintingStrategy(PaintingStrategy.POINTS);
SellSignal.SetLineWeight(5);
SellSignal.AssignValueColor(Color.RED);

plot longXtrenderHist = longTermXtrender;
longXtrenderHist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
longXtrenderHist.AssignValueColor(if longXtrenderCol == 2 then Color.DARK_GREEN else
                                  if longXtrenderCol == 1 then Color.LIGHT_GREEN else
                                  if longXtrenderCol == -2 then Color.RED else Color.DARK_RED);
plot shortXtrenderHist = shortTermXtrender;
shortXtrenderHist.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
shortXtrenderHist.AssignValueColor(if shortXtrenderCol ==2 then Color.DARK_GREEN else
                                   if shortXtrenderCol ==1 then Color.LIGHT_GREEN else
                                   if shortXtrenderCol ==-2 then Color.RED else Color.DARK_RED);

#--- END CODE
 
  • Like
Reactions: ALV
@samer800 can you adjust this to make it multi timeframe?
Code:
#// This source code is subject to the terms of the Mozilla Public License 2.0 at #https://mozilla.org/MPL/2.0/
#// ©Puppytherapy
#//@version=4
#study(title="B-Xtrender")
# Converted by mrhitts - 012/2022
# MTF antwerks 03/30/2026


declare lower;

input Signals = yes;
input higherTF = AggregationPeriod.FIFTEEN_MIN;

#=============================
# CUSTOM RSI (SAFE)
#=============================
script RSI_Custom {
    input price = close;
    input length = 14;

    def gain = Max(price - price[1], 0);
    def loss = Max(price[1] - price, 0);

    def avgGain = ExpAverage(gain, length);
    def avgLoss = ExpAverage(loss, length);

    def rs = if avgLoss != 0 then avgGain / avgLoss else 0;

    plot RSI = 100 - (100 / (1 + rs));
}

#=============================
# T3 SMOOTHING (SAFE)
#=============================
script T3 {
    input src = close;

    def xe1 = ExpAverage(src, 5);
    def xe2 = ExpAverage(xe1, 5);
    def xe3 = ExpAverage(xe2, 5);
    def xe4 = ExpAverage(xe3, 5);
    def xe5 = ExpAverage(xe4, 5);
    def xe6 = ExpAverage(xe5, 5);

    def b = 0.7;
    def c1 = -b * b * b;
    def c2 = 3 * b * b + 3 * b * b * b;
    def c3 = -6 * b * b - 3 * b - 3 * b * b * b;
    def c4 = 1 + 3 * b + b * b * b + 3 * b * b;

    plot out = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3;
}

#=============================
# CURRENT TIMEFRAME XTRENDER
#=============================
def rsiShort = ExpAverage(close, 5) - ExpAverage(close, 20);
def rsiLong  = ExpAverage(close, 20);

def shortTerm = RSI_Custom(price = rsiShort, length = 15) - 50;
def longTerm  = RSI_Custom(price = rsiLong, length = 15) - 50;

def shortSmooth = T3(shortTerm);
def shortUp = shortSmooth > shortSmooth[1];

#=============================
# SAFE HTF BIAS (NO EMA/RSI!)
#=============================
def closeHTF = close(period = higherTF);

# Simple slope-based bias (safe for HTF)
def HTF_slope = closeHTF - closeHTF[3];

def HTF_Bull = HTF_slope > 0;
def HTF_Bear = HTF_slope < 0;

#=============================
# PLOTS (MAIN LINES)
#=============================
plot FastLine = shortSmooth;
FastLine.SetLineWeight(3);
FastLine.AssignValueColor(if shortUp then Color.GREEN else Color.RED);

plot FastShadow = shortSmooth;
FastShadow.SetLineWeight(5);
FastShadow.SetDefaultColor(Color.BLACK);

plot SlowLine = longTerm;
SlowLine.SetLineWeight(2);
SlowLine.AssignValueColor(
    if longTerm > longTerm[1] then Color.DARK_GREEN else Color.DARK_RED
);

plot SlowShadow = longTerm;
SlowShadow.SetLineWeight(4);
SlowShadow.SetDefaultColor(Color.BLACK);

#=============================
# SIGNALS
#=============================
def Buy =
    shortSmooth > shortSmooth[1] and
    shortSmooth[1] < shortSmooth[2];

def Sell =
    shortSmooth < shortSmooth[1] and
    shortSmooth[1] > shortSmooth[2];

plot BuySignal =
    if Signals and Buy then shortSmooth else Double.NaN;

BuySignal.SetPaintingStrategy(PaintingStrategy.POINTS);
BuySignal.SetLineWeight(4);
BuySignal.SetDefaultColor(Color.GREEN);

plot SellSignal =
    if Signals and Sell then shortSmooth else Double.NaN;

SellSignal.SetPaintingStrategy(PaintingStrategy.POINTS);
SellSignal.SetLineWeight(4);
SellSignal.SetDefaultColor(Color.RED);

#=============================
# HISTOGRAMS
#=============================
plot LongHist = longTerm;
LongHist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
LongHist.AssignValueColor(
    if longTerm > 0 then
        if longTerm > longTerm[1] then Color.DARK_GREEN else Color.LIGHT_GREEN
    else
        if longTerm > longTerm[1] then Color.DARK_RED else Color.RED
);

plot ShortHist = shortTerm;
ShortHist.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
ShortHist.AssignValueColor(
    if shortTerm > 0 then
        if shortTerm > shortTerm[1] then Color.DARK_GREEN else Color.LIGHT_GREEN
    else
        if shortTerm > shortTerm[1] then Color.DARK_RED else Color.RED
);

#=============================
# HTF BIAS LABEL
#=============================
AddLabel(yes,
    if HTF_Bull then "HTF: UP TREND"
    else if HTF_Bear then "HTF: DOWN TREND"
    else "HTF: NEUTRAL",
    if HTF_Bull then Color.GREEN
    else if HTF_Bear then Color.RED
    else Color.GRAY
);

#=============================
# INFO LABEL
#=============================
AddLabel(yes,
    "MTF Xtrender Active (" + higherTF + ")",
    Color.WHITE
);
 
Code:
#// This source code is subject to the terms of the Mozilla Public License 2.0 at #https://mozilla.org/MPL/2.0/
#// ©Puppytherapy
#//@version=4
#study(title="B-Xtrender")
# Converted by mrhitts - 012/2022
# MTF antwerks 03/30/2026


declare lower;

input Signals = yes;

#=============================
# CUSTOM RSI
#=============================
script RSI_Custom {
    input price = close;
    input length = 14;

    def gain = Max(price - price[1], 0);
    def loss = Max(price[1] - price, 0);

    def avgGain = ExpAverage(gain, length);
    def avgLoss = ExpAverage(loss, length);

    def rs = if avgLoss != 0 then avgGain / avgLoss else 0;

    plot RSI = 100 - (100 / (1 + rs));
}

#=============================
# T3 SMOOTHING
#=============================
script T3 {
    input src = close;

    def xe1 = ExpAverage(src, 5);
    def xe2 = ExpAverage(xe1, 5);
    def xe3 = ExpAverage(xe2, 5);
    def xe4 = ExpAverage(xe3, 5);
    def xe5 = ExpAverage(xe4, 5);
    def xe6 = ExpAverage(xe5, 5);

    def b = 0.7;
    def c1 = -b * b * b;
    def c2 = 3 * b * b + 3 * b * b * b;
    def c3 = -6 * b * b - 3 * b - 3 * b * b * b;
    def c4 = 1 + 3 * b + b * b * b + 3 * b * b;

    plot out = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3;
}

#=============================
# XTRENDER CORE
#=============================
def rsiShort = ExpAverage(close, 5) - ExpAverage(close, 20);
def rsiLong  = ExpAverage(close, 20);

def shortTerm = RSI_Custom(price = rsiShort, length = 15) - 50;
def longTerm  = RSI_Custom(price = rsiLong, length = 15) - 50;

def shortSmooth = T3(shortTerm);

#=============================
# TREND LOGIC
#=============================
def shortUp = shortSmooth > shortSmooth[1];
def longUp  = longTerm > longTerm[1];

#=============================
# "HTF-LIKE" BIAS (SMART FIX)
#=============================

# slower smoothing = higher timeframe effect
def biasSmooth = ExpAverage(longTerm, 20);

def biasUp   = biasSmooth > biasSmooth[1];
def biasDown = biasSmooth < biasSmooth[1];

#=============================
# PLOTS
#=============================
plot FastLine = shortSmooth;
FastLine.SetLineWeight(3);
FastLine.AssignValueColor(if shortUp then Color.GREEN else Color.RED);

plot FastShadow = shortSmooth;
FastShadow.SetLineWeight(5);
FastShadow.SetDefaultColor(Color.BLACK);

plot SlowLine = longTerm;
SlowLine.SetLineWeight(2);
SlowLine.AssignValueColor(if longUp then Color.DARK_GREEN else Color.DARK_RED);

plot SlowShadow = longTerm;
SlowShadow.SetLineWeight(4);
SlowShadow.SetDefaultColor(Color.BLACK);

#=============================
# SIGNALS
#=============================
def Buy =
    shortSmooth > shortSmooth[1] and
    shortSmooth[1] < shortSmooth[2];

def Sell =
    shortSmooth < shortSmooth[1] and
    shortSmooth[1] > shortSmooth[2];

plot BuySignal = if Signals and Buy then shortSmooth else Double.NaN;
BuySignal.SetPaintingStrategy(PaintingStrategy.POINTS);
BuySignal.SetDefaultColor(Color.GREEN);

plot SellSignal = if Signals and Sell then shortSmooth else Double.NaN;
SellSignal.SetPaintingStrategy(PaintingStrategy.POINTS);
SellSignal.SetDefaultColor(Color.RED);

#=============================
# HISTOGRAMS
#=============================
plot LongHist = longTerm;
LongHist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
LongHist.AssignValueColor(
    if longTerm > 0 then
        if longTerm > longTerm[1] then Color.DARK_GREEN else Color.LIGHT_GREEN
    else
        if longTerm > longTerm[1] then Color.DARK_RED else Color.RED
);

plot ShortHist = shortTerm;
ShortHist.SetPaintingStrategy(PaintingStrategy.SQUARED_HISTOGRAM);
ShortHist.AssignValueColor(
    if shortTerm > 0 then
        if shortTerm > shortTerm[1] then Color.DARK_GREEN else Color.LIGHT_GREEN
    else
        if shortTerm > shortTerm[1] then Color.DARK_RED else Color.RED
);

#=============================
# LABELS
#=============================
AddLabel(yes,
    if biasUp then "BIAS: UP (HTF STYLE)"
    else if biasDown then "BIAS: DOWN (HTF STYLE)"
    else "BIAS: NEUTRAL",
    if biasUp then Color.GREEN
    else if biasDown then Color.RED
    else Color.GRAY
);

AddLabel(yes,
    "Auto-Timeframe Mode",
    Color.WHITE
);
 

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

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
727 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