HLC Trend - Tradingview script converted to TOS

Skulzgar

New member
VIP
Found a video on youtube of a confirmation indicator I wanted to backtest in TOS. However, I could not find anywhere. Closest one I could find was on TradingView - https://www.tradingview.com/script/i218XnGI-TrendXplorer-com-HLC-Trend-Indicator/

Is this possible to be converted to thinkorswim? The Tradingview Code is below - Thanks a lot


Code:
study("(AK) TrendXplorer.com HLC Trend Indicator")
// Indicator based on article found on TrendXplorer.com

// Inputs

emac = ema(close,5)
emal = ema(low,13)
emah = ema(high,34)

// Calculations

long = (emac - emah)>= (emal-emac)
neut = (emac - emah)
short = (emal- emac) > ( emac - emah)



// plot indicator

plot(emac-emah, color = blue,linewidth = 2)
plot(emal-emac, color = red, linewidth = 2)


barcolor(long ? blue :red)
bgcolor(long ? blue :red)
barcolor(neut ? yellow :na)
 
Last edited by a moderator:

tradegeek

Active member
2019 Donor
VIP
Try this...


Code:
# study("(AK) TrendXplorer.com HLC Trend Indicator")
# Indicator based on article found on TrendXplorer.com
# Link:  https://www.tradingview.com/script/i218XnGI-TrendXplorer-com-HLC-Trend-Indicator/
# Ported to TOS by tradegeek

declare lower;

input closeLength = 5;
input lowLength = 13;
input highLength = 34;
input PaintBars = yes;

def emac = ExpAverage(close, closeLength);
def emal = ExpAverage(low, lowLength);
def emah = ExpAverage(high, highLength);

# Calculations
def long = (emac - emah) >= (emal - emac);
def neut = (emac - emah);
def short = (emal - emac) > ( emac - emah);

# plots
plot ch = emac - emah;
ch.SetDefaultColor(Color.GREEN);
ch.SetPaintingStrategy(PaintingStrategy.LINE);
ch.SetLineWeight(2);

plot lc = emal - emac;
lc.SetDefaultColor(Color.RED);
lc.SetPaintingStrategy(PaintingStrategy.LINE);
lc.SetLineWeight(2);

assignpriceColor(if long and PaintBars then color.Green else if short and PaintBars then color.RED else color.YELLOW);
 
Last edited:

Drestat

New member
Hi! How would I go about adding a name to each of the plots? Say if its a Green Line, have it named "Emal". Similar to when you manually make a "Price Level" line in TOS and tell it to display its name/label.

Thanks in advance!
 

nab

New member
Hello, need help in converting this tradingview study to TOS

Thank you

Code:
//@version=3
strategy(title="Range Filter Buy and Sell 5min [Strategy]", overlay=true, commission_type=strategy.commission.percent, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, slippage=0)

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Use Date ----------------', type=bool)
FromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 25, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE ===


sources = input(defval=close, title="Source")
isHA = input(false, "Use HA Candles", bool)
src = isHA ? security(heikenashi(tickerid), period, sources) : sources
// Sampling Period
// Settings for 5min chart, BTCUSDC. For Other coin, change the paremeters

per = input(defval=50, minval=1, title="Sampling Period")

// Range Multiplier

mult = input(defval=3.0, minval=0.1, title="Range Multiplier")

// Smooth Average Range

smoothrng(x, t, m)=>
    wper      = (t*2) - 1
    avrng     = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper)*m
    smoothrng
smrng = smoothrng(src, per, mult)

// Range Filter

rngfilt(x, r)=>
    rngfilt  = x
    rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r))
    rngfilt
filt = rngfilt(src, smrng)

// Filter Direction

upward   = 0.0
upward  := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

// Target Bands

hband = filt + smrng
lband = filt - smrng

// Colors

filtcolor = upward > 0 ? lime : downward > 0 ? red : orange
barcolor  = (src > filt) and (src > src[1]) and (upward > 0) ? lime : (src > filt) and (src < src[1]) and (upward > 0) ? green :
   (src < filt) and (src < src[1]) and (downward > 0) ? red : (src < filt) and (src > src[1]) and (downward > 0) ? maroon : orange

filtplot = plot(filt, color=filtcolor, linewidth=3, title="Range Filter")

// Target

hbandplot = plot(hband, color=aqua, transp=100, title="High Target")
lbandplot = plot(lband, color=fuchsia, transp=100, title="Low Target")

// Fills

fill(hbandplot, filtplot, color=aqua, title="High Target Range")
fill(lbandplot, filtplot, color=fuchsia, title="Low Target Range")

// Bar Color

//barcolor(barcolor)

// Break Outs

longCond = na
shortCond = na
longCond := ((src > filt) and (src > src[1]) and (upward > 0)) or ((src > filt) and (src < src[1]) and (upward > 0))
shortCond := ((src < filt) and (src < src[1]) and (downward > 0)) or ((src < filt) and (src > src[1]) and (downward > 0))

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Alerts

plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = white, style=shape.labelup, size = size.normal, location=location.belowbar, color = green, transp = 0)
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = red, transp = 0)

//strategy.entry("Long", strategy.long, stop = hband, when = window() , comment="Long")
//strategy.entry("Short", strategy.short, stop = lband, when = window() , comment="Short")

strategy.entry("Long", strategy.long, when = longCondition and window() , comment="Long")
strategy.entry("Short", strategy.short, when = shortCondition and window() , comment="Short")



// === Stop LOSS ===
useStopLoss = input(false, title='----- Use Stop Loss / Take profit -----', type=bool)
sl_inp = input(100, title='Stop Loss %', type=float, step=0.25)/100
tp_inp = input(1.5, title='Take Profit %', type=float, step=0.25)/100
stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)
stop_level_short = strategy.position_avg_price * (1 + sl_inp)
take_level_short = strategy.position_avg_price * (1 - tp_inp)
// === Stop LOSS ===

if useStopLoss
    strategy.exit("Stop Loss/Profit Long","Long", stop=stop_level, limit=take_level)
    strategy.exit("Stop Loss/Profit Short","Short", stop=stop_level_short, limit=take_level_short)
 

Similar threads

Top