polyclef

frankentrend

51
Works well on BTCUSD with a Heikin Ashi chart.

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.

Want to use this script on a chart?
//@version=2
//Strategy: jwilkinscb (@jwilkins on twitter)
//Includes parts of indicators from: 
//  Rajandran R (www.marketcalls.in)
//  LazyBear
//  ChrisMoody              
strategy("frankentrend", overlay = false, 
                         default_qty_type=strategy.fixed, 
                         default_qty_value=10,
                         currency="USD",
                         pyramiding=2,
                         calc_on_order_fills=true,
                         calc_on_every_tick=true)
                       
coin_limit = input(50, minval=1)
fastLength = input(1, minval=1)
slowLength = input(4,minval=1)
signalLength=input(6,minval=1)
hline(0, color=purple, linestyle=dashed)
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
macd = fastMA - slowMA
signal = sma(macd, signalLength)
pos = iff(signal < macd , 1, iff(signal > macd, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
//------------

Factor=input(1, minval=1,maxval = 100)
Pd=input(13, minval=1,maxval = 100)

Up=hl2-(Factor*atr(Pd)) 
Dn=hl2+(Factor*atr(Pd))

TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown

trend_xup = barssince(cross(close, Tsl) and close>Tsl)
trend_xdown = barssince(cross(close, Tsl) and close<Tsl)

//------------
// lazy bear wies wave volume indicator
lbwwv_trendDetectionLength=1
lbwwv_mov = close>close[1] ? 1 : close<close[1] ? -1 : 0

lbwwv_trend = (lbwwv_mov != 0) and (lbwwv_mov != lbwwv_mov[1]) ? lbwwv_mov : nz(lbwwv_trend[1])
lbwwv_isTrending = rising(close, lbwwv_trendDetectionLength) or falling(close, lbwwv_trendDetectionLength) //abs(close-close[1]) >= dif
lbwwv_wave=(lbwwv_trend != nz(lbwwv_wave[1])) and lbwwv_isTrending ? lbwwv_trend : nz(lbwwv_wave[1])
lbwwv_vol=lbwwv_wave==lbwwv_wave[1] ? (nz(lbwwv_vol[1])+volume) : volume
lbwwv_up=lbwwv_wave == 1 ? lbwwv_vol : 0  
lbwwv_dn=lbwwv_wave == 1 ? 0 : lbwwv_wave == -1 ? -lbwwv_vol : lbwwv_vol
lbwwv_buy = (cross(lbwwv_up, lbwwv_dn) == 1 and (lbwwv_up > lbwwv_dn))
lbwwv_sell = (cross(lbwwv_up, lbwwv_dn) == 1 )

//-----------
pnf_id = pointfigure(tickerid, "close", "Traditional", 0.5, 3)
pnf_close_0 = security(pnf_id, period, close)
pnf_close_1 = security(pnf_id, period, close[1])
pnf_trend = pnf_close_0 > pnf_close_1 ? 1 : -1
//-------------
// Vix Fix (ChrisMoody)
vf_pd = input(22, title="LookBack Period Standard Deviation High")
vf_bbl = input(20, title="Bolinger Band Length")
vf_mult = input(2.0    , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")
vf_lb = input(50  , title="Look Back Period Percentile High")
vf_ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
vf_pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
vf_hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?")
vf_sd = input(false, title="Show Standard Deviation Line?")

vf_wvf = ((highest(close, vf_pd)-low)/(highest(close, vf_pd)))*100

vf_sDev = vf_mult * stdev(vf_wvf, vf_bbl)
vf_midLine = sma(vf_wvf, vf_bbl)
vf_lowerBand = vf_midLine - vf_sDev
vf_upperBand = vf_midLine + vf_sDev

vf_rangeHigh = (highest(vf_wvf, vf_lb)) * vf_ph
vf_rangeLow = (lowest(vf_wvf, vf_lb)) * vf_pl


vf_buy = vf_wvf >= vf_upperBand or vf_wvf >= vf_rangeHigh ? true : false


//-------------

linecolor = Trend == 1 ? green : red

open_delta = strategy.openprofit[1] - strategy.openprofit
opd_pc = (open_delta/strategy.openprofit[1]) * 100
under_limit = strategy.position_size < coin_limit

if (trend_xup == trend_xdown and close > Tsl )
    trend_xdown = trend_xdown + 1


recent_avg = vwma(ohlc4, 7)

// Trade logic
enter_long = (trend_xup < trend_xdown and under_limit == true and vf_buy == true)
//exit_all = (vf_buy == false and (((high < high[1]) and (((high[1]-high)) > 0.25) and (low < low[1])) or close+0.25 < low[1]))  // $934 
//exit_all = (vf_buy == false and (((high < high[1]) and (low < low[1])) or close < low[1]))  // ** Best $1351
exit_all = (vf_buy == false and (((high < high[1]) and (low < low[1])) or close < low[1]))  // ** Best

strategy.order("trend", strategy.long, 10, when=enter_long == true)
strategy.order("macd", strategy.long, 5, when=trend_xup < trend_xdown and cross(macd, signal) and macd > signal and vf_buy == true and close < (recent_avg-1))

strategy.close_all(when=(exit_all == true)) 
strategy.close_all(when=strategy.openprofit < -50)
strategy.close_all(when=pnf_trend < 0)