// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jordan_valley //@version=5 indicator("~Scalping", overlay = true) //=== Indicator to be used for scalping indic = input.string("CVD", title="Indicator", tooltip = "Indicator to be used for scalping", options = ["CVD", "MACD", "STOCH", "SQUEEZE MOMENTUM"]) // Delta calculation delta_function() => vbuy=0.0, vsell=0.0, d=0.0 if close > open vbuy := volume * math.abs( open/close -1 ) if close < open vsell := volume * math.abs( open/close -1 ) d := ta.cum(vbuy - vsell) d //----Normalization Function n(s,l) => hi = ta.highest(s, l) lo = ta.lowest(s, l) n = (s - lo) / (hi - lo)+1 n //=== CVD scalping ltf_vol_ar = request.security_lower_tf(syminfo.tickerid, "5", volume, false) len9 = input(24, "Experimental CVD length", "Length used for experimental CVD") vol = ltf_vol_ar.sum() vol_n = n(vol, len9) b9 = 0.0, s9 = 0.0, d9 = 0.0 if close > open b9 := vol_n * math.abs(open / close - 1) b9 if close < open s9 := vol_n * math.abs(open / close - 1) s9 d9 := ta.cum(b9-s9) d9 := ( n(d9, len9) - 1.5 ) * 2 cvd_ma9 = ta.alma(d9, len9, 0.80, 7) ma9_rma = ta.rma(cvd_ma9, 2) //=== Long / short signal longCVD = ta.crossover(cvd_ma9, ma9_rma) ? true : false shortCVD = ta.crossunder(cvd_ma9, ma9_rma) ? true : false //======================================================== // MACD based scalping [ macdLine_faster, signal_faster, _ ] = ta.macd(close, 12, 22, 7) longMACD = false shortMACD = false //======================================================== // Stoch based scalping // Stochastic stoch = ta.stoch(close, high, low, 12) stoch_ma = ta.alma(stoch, 24, .85, 6) // Overbought or Oversold ? overbought = stoch >= 80 ? true : false oversold = stoch <= 20 ? true : false l14 = ta.lowest(14), h14 = ta.highest(14) k = (close - l14) / (h14 - l14) d = ta.sma(k, 3) k_ma = ta.ema(k, 12) k_rma = ta.rma(k_ma, 2) //=== Long / short signal longStoch = ta.crossover(k_ma, k_rma) ? true : false shortStoch = ta.crossunder(k_ma, k_rma) ? true : false //======================================================== // Squeeze Momentum based scalping //==================== Squeeze Momentum Indicator by LazyBear // Mr.Carter suggests waiting till the first gray after a black cross, and taking a position in the direction of the momentum (for ex., if momentum value is above zero, go long). Exit the position when the momentum changes (increase or decrease --- signified by a color change). My (limited) experience with this shows, an additional indicator like ADX / WaveTrend, is needed to not miss good entry points. length=0 length := input(20, title="BB Length") mult = input(2.0,title="BB MultFactor") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input.bool(true, title="Use TrueRange (KC)") // Calculate BB source = close basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = ta.sma(source, lengthKC) range0 = useTrueRange ? ta.tr : (high - low) rangema = ta.sma(range0, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = (sqzOn == false) and (sqzOff == false) val = ta.linreg(source - math.avg(math.avg(ta.highest(high, lengthKC), ta.lowest(low, lengthKC)), ta.sma(close,lengthKC)), lengthKC,0) longSQ = sqzOff and val > nz(val[1]) ? true : false shortSQ = sqzOff and val < nz(val[1]) ? true : false //=== Assign the Indicator selected by user with corresponding signals longSignal = indic == "CVD" ? longCVD : indic=="MACD" ? longMACD : indic=="STOCH" ? longStoch : indic=="SQUEEZE MOMENTUM" ? longSQ : na shortSignal = indic == "CVD" ? shortCVD : indic=="MACD" ? shortMACD : indic=="STOCH" ? shortStoch : indic=="SQUEEZE MOMENTUM" ? shortSQ : na longSignal_transp = longSignal ? 0 : 100 shortSignal_transp = shortSignal ? 0 : 100 //=== Plot plotshape(longSignal, "Long", shape.triangleup, location.belowbar, size=size.tiny) plotshape(shortSignal, "Short", shape.triangledown, location.abovebar, size=size.tiny)