Strategy · Pine Script v6 · On the chart

VWAP Reclaim (LONG-only)

by skipp-dev· code credited to VWAP Long Reclaim Strategy

This long-only strategy identifies trading opportunities using anchored VWAP reclaims, retests, and breakouts.

View on GitHub

Repaints

GitHub stars1on the repository
Pine versionv6current
Lines of code344
Settings29inputs
LicenceNone statedfile: MPL-2.0
Last update2 days ago26 Oct 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new strategy, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart. The trades and results appear in the Strategy Tester tab; adjust the settings with the gear icon.

Source Code

344 lines of Pine Script v6 from pine/legacy/VWAP_Long_Reclaim_Strategy.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

VWAP_Long_Reclaim_Strategy.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © 2026 VWAP Long Reclaim Strategy

//@version=6
strategy(
    title="VWAP Reclaim (LONG-only)",
    shorttitle="VWAP Reclaim LONG",
    overlay=true,
    default_qty_type=strategy.percent_of_equity,
    default_qty_value=3,
    initial_capital=1000,
    pyramiding=1,
    commission_type=strategy.commission.percent,
    commission_value=0.025,
    // T-2 (TEMPORAL_NUMERICAL_AUDIT_2026-04-24): tick-only execution.
    process_orders_on_close=false,
    calc_on_every_tick=true
)

// Import library
// import wbburgin/wbburgin_utils/2 as utils  // replaced by native slope+bias trend

// ==================== HELPER FUNCTIONS ====================

// Zero-Lag error-corrected EMA source (from SkippALGO USI Quantum Pulse).
// Leads classic EMA by ~2-5 bars, enabling earlier RSI flips.
f_zl_src(src, len) =>
    e1 = ta.ema(src, len)
    e2 = ta.ema(e1, len)
    2.0 * e1 - e2

// ==================== INPUTS ====================

// VWAP Settings
hideonDWM = input(false, title="Hide VWAP on 1D or Above", group="VWAP Settings")
var anchor = input.string(defval="Session", title="Anchor Period",
    options=["Session", "Week", "Month", "Quarter", "Year", "Decade", "Century", "Earnings", "Dividends", "Splits"], 
    group="VWAP Settings")
src = input(title="Source", defval=hlc3, group="VWAP Settings")
offset = input(0, title="Offset", group="VWAP Settings")

// Standard Deviation Bands Settings
showBand_1 = input(true, title="Show Band 1", group="Standard Deviation Bands Settings")
stdevMult_1 = input(0.88, title="Standard Deviation Multiplier", group="Standard Deviation Bands Settings")

// Strategy Settings
simpleVwapCross = input.bool(false, "Simple VWAP Cross Entry",
    tooltip="BUY sobald der Preis den VWAP von unten kreuzt. Überspringt die Reclaim→Retest→Go Sequenz.",
    group="Strategy")
breakoutEntry = input.bool(true, "Breakout Entry (Pullback High)",
    tooltip="BUY wenn Close den rollenden Pullback High bricht (Reclaim→Retest→Go). Kann unabhängig vom Simple VWAP Cross ein-/ausgeschaltet werden.",
    group="Strategy")
matchedTrends = input.bool(true, "Only Enter on Matched Trends",
    tooltip="Only enter a long trade when the VWAP is trending up.",
    group="Strategy")

displaybars = input.bool(true, "Barcolors", group="Display")
showTradeLabels = input.bool(true, "Show Trade Labels", group="Display")

// Trend Detection Settings
trendSlopeBars = input.int(5, "VWAP Slope Lookback", minval=1, maxval=20,
    tooltip="Bars for VWAP slope calculation. Lower = faster but noisier.",
    group="Trend Detection")
trendEmaLen = input.int(8, "Price Bias EMA Length", minval=3, maxval=50,
    tooltip="EMA length for price-above-VWAP bias. Lower = earlier signal.",
    group="Trend Detection")

// Reclaim Settings
preset3m = input.string("Neutral", "3m Preset", options=["Aggressive", "Neutral", "Conservative", "Custom"], group="Reclaim Settings")
reclaimWindowBars = input.int(12, "Reclaim: Max Bars bis Retest", minval=1, group="Reclaim Settings")
retestTolATR = input.float(0.10, "Retest Toleranz (ATR-Anteil)", minval=0.0, step=0.01, group="Reclaim Settings")
useAtrTol = input.bool(true, "Toleranz via ATR", group="Reclaim Settings")
debug = input.bool(true, "Debug Markers", group="Reclaim Settings")
showStatusTable = input.bool(true, "Show Status Table", group="Reclaim Settings")
pullbackLookback = input.int(5, "Pullback High Lookback", minval=2, maxval=30,
    tooltip="Rolling-Fenster für den Pullback High (Donchian). Kleiner = schneller. Default 5.",
    group="Reclaim Settings")

// USI Trend Filter Settings (aggressive, early-tuned)
useUsiFilter = input.bool(true, "USI Trend Filter",
    tooltip="BUY nur wenn der USI (Universal Strength Index) einen Aufwärtstrend zeigt. Aggressive Einstellung mit Zero-Lag und kurzen RSI-Längen für früheste Erkennung.",
    group="⚡ USI Trend Filter")
usiLen1 = input.int(7, "USI Slow RSI Length", minval=2, maxval=30,
    tooltip="Längster RSI im Stack. Default 7 (aggressiv). SkippALGO nutzt 13.",
    group="⚡ USI Trend Filter")
usiLen2 = input.int(5, "USI Mid RSI Length", minval=2, maxval=30,
    tooltip="Mittlerer RSI im Stack. Default 5.",
    group="⚡ USI Trend Filter")
usiLen3 = input.int(3, "USI Fast RSI Length", minval=2, maxval=30,
    tooltip="Kürzester/schnellster RSI (Red Line). Default 3 (aggressiv).",
    group="⚡ USI Trend Filter")
usiMinBullStack = input.int(2, "Min Bull Stack", minval=1, maxval=2,
    tooltip="Mindest-Stacking: Wie viele kürzere RSIs müssen über dem nächst-langsameren liegen? 1 = aggressiv, 2 = alle gestapelt.",
    group="⚡ USI Trend Filter")

// Signal Filter Settings — bar-close confirmation + volume gate
barCloseOnly = input.bool(true, "Bar Close Only",
    tooltip="Labels und Alerts nur auf geschlossenen Bars. Verhindert Intra-Bar-Flicker bei Live-Daten.",
    group="🔒 Signal Filters")
useVolFilter = input.bool(false, "Volume Filter",
    tooltip="Signale nur wenn das aktuelle Barvolumen über dem Durchschnitt liegt. Filtert Signale in ruhigen/illiquiden Phasen.",
    group="🔒 Signal Filters")
minVolRatio = input.float(1.0, "Min Volume Ratio", minval=0.1, step=0.1,
    tooltip="Mindest-Verhältnis: Aktuelles Barvolumen / SMA(Volumen). 1.0 = Durchschnitt, 1.5 = 50% über Durchschnitt.",
    group="🔒 Signal Filters")
volSmaLen = input.int(20, "Volume SMA Length", minval=5, maxval=100,
    tooltip="Lookback für den Volumen-Durchschnitt.",
    group="🔒 Signal Filters")

reclaimWindowBarsEff = preset3m == "Aggressive" ? 20 : preset3m == "Conservative" ? 8 : preset3m == "Neutral" ? 12 : reclaimWindowBars
retestTolATREff = preset3m == "Aggressive" ? 0.16 : preset3m == "Conservative" ? 0.06 : preset3m == "Neutral" ? 0.10 : retestTolATR

cumVolume = ta.cum(volume)
if barstate.islast and cumVolume == 0
    runtime.error("No volume is provided by the data vendor.")

// Signal filter gates (evaluated on every bar)
volSma = ta.sma(volume, volSmaLen)
volRatio = volSma > 0 ? volume / volSma : 0.0
volGate = useVolFilter ? volRatio >= minVolRatio : true
barCloseGate = barCloseOnly ? barstate.isconfirmed : true

// ==================== DATA REQUESTS ====================

new_earnings = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_split = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)

// ==================== VWAP ANCHOR PERIOD ====================

isNewPeriod = switch anchor
    "Earnings"  => not na(new_earnings)
    "Dividends" => not na(new_dividends)
    "Splits"    => not na(new_split)
    "Session"   => timeframe.change("D")
    "Week"      => timeframe.change("W")
    "Month"     => timeframe.change("M")
    "Quarter"   => timeframe.change("3M")
    "Year"      => timeframe.change("12M")
    "Decade"    => timeframe.change("12M") and year % 10 == 0
    "Century"   => timeframe.change("12M") and year % 100 == 0
    => false

isEsdAnchor = anchor == "Earnings" or anchor == "Dividends" or anchor == "Splits"
if na(src[1]) and not isEsdAnchor
    isNewPeriod := true

// ==================== VWAP CALCULATION ====================

var float vwapValue = na
var float upperBandValue1 = na
var float lowerBandValue1 = na
var float upperBandValue2 = na
var float lowerBandValue2 = na

if not (hideonDWM and timeframe.isdwm)
    [_vwap, _stdevUpper, _] = ta.vwap(src, isNewPeriod, 1)
    vwapValue := _vwap
    stdevAbs = _stdevUpper - _vwap
    upperBandValue1 := _vwap + stdevAbs * stdevMult_1
    lowerBandValue1 := _vwap - stdevAbs * stdevMult_1
    upperBandValue2 := _vwap + 2 * stdevAbs * stdevMult_1
    lowerBandValue2 := _vwap - 2 * stdevAbs * stdevMult_1

// ==================== RECLAIM -> RETEST -> GO (LONG-ONLY) ====================

atr = nz(ta.atr(14), syminfo.mintick * 10)
tol = useAtrTol ? atr * retestTolATREff : syminfo.mintick * 2

wasBelowVwap = close[1] < vwapValue[1]
reclaimUp = wasBelowVwap and close > vwapValue

var int reclaimBar = na
var float retestLow = na
var bool inReclaimSeq = false
var bool retestSeen = false
var bool inPosition = false   // mirrors indicator's inVirtualPos for same-bar timing

// Reset on new anchor period — old VWAP reclaim/position is no longer valid
if isNewPeriod
    if strategy.position_size != 0
        strategy.close_all("Period Reset")
    inPosition := false
    inReclaimSeq := false
    retestSeen := false
    retestLow := na
    reclaimBar := na

// Rolling highest high (Donchian) — replaces monotonic pullbackHigh.
pullbackHigh = ta.highest(high, pullbackLookback)

if reclaimUp
    reclaimBar := bar_index
    inReclaimSeq := true
    retestSeen := false
    retestLow := na

if inReclaimSeq
    expired = (bar_index - reclaimBar) > reclaimWindowBarsEff
    hardFail = close < vwapValue - tol
    if expired or hardFail
        inReclaimSeq := false
        retestSeen := false

    if not retestSeen
        retestCond = low <= vwapValue + tol and close >= vwapValue - tol
        if retestCond
            retestSeen := true
            retestLow := low

goLong = inReclaimSeq and retestSeen and close > pullbackHigh[1] and bar_index > reclaimBar

vwapSlope = ta.change(vwapValue, trendSlopeBars)
priceBias = ta.ema(close, trendEmaLen) > vwapValue
isUpTrend = vwapSlope > 0 or priceBias
matchedTrendsFilter_long = not matchedTrends ? true : isUpTrend

// ==================== USI QUANTUM PULSE (EARLY-TUNED) ====================
// Aggressive 3-length RSI stacking with Zero-Lag source for earliest
// possible trend detection. Based on SkippALGO's USI Quantum Pulse but
// trimmed to the 3 shortest lengths and always in Zero-Lag mode.

usiSrc1 = f_zl_src(close, usiLen1)
usiSrc2 = f_zl_src(close, usiLen2)
usiSrc3 = f_zl_src(close, usiLen3)

usiLine1 = ta.rsi(usiSrc1, usiLen1)
usiLine2 = ta.rsi(usiSrc2, usiLen2)
usiLine3 = ta.rsi(usiSrc3, usiLen3)

usiBullStack = (usiLine3 > usiLine2 ? 1 : 0) + (usiLine2 > usiLine1 ? 1 : 0)
usiBullState = usiLine3 > usiLine1
usiUpTrend = usiBullStack >= usiMinBullStack and usiBullState
usiGate = useUsiFilter ? usiUpTrend : true

// Entry signal: simpleVwapCross has priority — when on, only VWAP
// cross entries fire (no breakout). When off, breakoutEntry toggle
// controls the Reclaim→Retest→Go breakout.
entryTrigger = simpleVwapCross ? reclaimUp : (breakoutEntry and goLong)
longSignal = entryTrigger and matchedTrendsFilter_long and usiGate and barCloseGate and volGate and not inPosition

// ==================== STRATEGY LOGIC ====================

var float longStop = na

if longSignal
    strategy.entry("Long", strategy.long)
    // Simple cross: no retestLow available → use VWAP minus tolerance as stop
    longStop := simpleVwapCross ? vwapValue - tol : nz(retestLow, vwapValue) - tol
    inReclaimSeq := false
    retestSeen := false
    inPosition := true

if strategy.position_size > 0 and not na(longStop)
    strategy.exit("L-Stop", "Long", stop=longStop)

exitOnVwapLoss = inPosition and close < vwapValue - tol and barCloseGate
if exitOnVwapLoss
    strategy.close("Long")
    inPosition := false

// Sync flag if stopped out by strategy.exit (stop hit)
if strategy.position_size == 0 and inPosition
    inPosition := false

// ==================== PLOTS ====================

plot(vwapValue, title="VWAP", color=color.white, linewidth=2, offset=offset)

upperBand_1 = plot(showBand_1 ? upperBandValue1 : na, title="Upper Band #1", color=color.new(color.gray, 50), offset=offset, linewidth=1)
lowerBand_1 = plot(showBand_1 ? lowerBandValue1 : na, title="Lower Band #1", color=color.new(color.gray, 50), offset=offset, linewidth=1)

plot(upperBandValue2, title="Upper Band #2", color=color.lime, linewidth=1)
plot(lowerBandValue2, title="Lower Band #2", color=color.red, linewidth=1)

hl2_plot = plot(hl2, color=na, title="HL2")

// ==================== FILLS ====================

fill(hl2_plot, upperBand_1, color=hl2 > upperBandValue1 ? color.new(color.green, 50) : na, title="Above Upper Band")
fill(hl2_plot, lowerBand_1, color=hl2 < lowerBandValue1 ? color.new(color.red, 50) : na, title="Below Lower Band")
fill(upperBand_1, lowerBand_1, title="Bands Fill", color=isUpTrend ? color.new(color.lime, 88) : color.new(color.red, 88))

// ==================== BAR COLORING ====================

barcolor(displaybars ? (isUpTrend ? color.new(color.lime, 30) : color.new(color.red, 30)) : na, title="Trade Direction")

// ==================== ENTRY/EXIT MARKERS ====================

plotshape(debug and barCloseGate and reclaimUp, title="ReclaimUp", style=shape.triangleup, location=location.belowbar, color=color.new(color.white, 0), size=size.tiny, text="R")
plotshape(debug and barCloseGate and retestSeen and inReclaimSeq, title="RetestSeen", style=shape.circle, location=location.belowbar, color=color.new(color.yellow, 0), size=size.tiny, text="T")
plotshape(showTradeLabels and longSignal, title="Long Entry", style=shape.labelup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.white, size=size.tiny, text="Buy")
plotshape(showTradeLabels and exitOnVwapLoss, title="VWAP Loss Exit", style=shape.labeldown, location=location.abovebar, color=color.new(color.orange, 0), textcolor=color.white, size=size.tiny, text="Exit")
plot(inReclaimSeq or inPosition ? pullbackHigh : na, title="Pullback High", color=color.new(color.aqua, 0), linewidth=1)

// ==================== STATUS TABLE ====================

var table statusTable = table.new(position.top_right, 2, 10, border_width=1)
if barstate.islast
    if showStatusTable
        table.cell(statusTable, 0, 0, "Preset", text_color=color.white, bgcolor=color.new(color.blue, 65))
        table.cell(statusTable, 1, 0, preset3m, text_color=color.white, bgcolor=color.new(color.blue, 80))

        table.cell(statusTable, 0, 1, "Window", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 1, str.tostring(reclaimWindowBarsEff), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 2, "Tol ATR", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 2, str.tostring(retestTolATREff, "#.##"), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 3, "Tol Mode", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 3, useAtrTol ? "ATR" : "Ticks", text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 4, "Tol Px", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 4, str.tostring(tol, format.mintick), text_color=color.white, bgcolor=color.new(color.gray, 85))

        table.cell(statusTable, 0, 5, "Anchor", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 5, anchor, text_color=color.white, bgcolor=color.new(color.gray, 85))

        anchorHint = anchor == "Session" ? "OK" : "3m daytrade: Session"
        anchorBg = anchor == "Session" ? color.new(color.green, 75) : color.new(color.orange, 65)
        table.cell(statusTable, 0, 6, "Hint", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 6, anchorHint, text_color=color.white, bgcolor=anchorBg)

        usiLabel = not useUsiFilter ? "OFF" : (usiUpTrend ? "BULL" : "FLAT")
        usiBg = not useUsiFilter ? color.new(color.gray, 70) : (usiUpTrend ? color.new(color.green, 65) : color.new(color.gray, 70))
        table.cell(statusTable, 0, 7, "USI", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 7, usiLabel, text_color=color.white, bgcolor=usiBg)

        bcLabel = barCloseOnly ? "ON" : "OFF"
        bcBg = barCloseOnly ? color.new(color.green, 65) : color.new(color.gray, 70)
        table.cell(statusTable, 0, 8, "BarClose", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 8, bcLabel, text_color=color.white, bgcolor=bcBg)

        volLabel = useVolFilter ? str.tostring(volRatio, "#.##") + "x" : "OFF"
        volBg = not useVolFilter ? color.new(color.gray, 70) : (volGate ? color.new(color.green, 65) : color.new(color.red, 65))
        table.cell(statusTable, 0, 9, "VolFilt", text_color=color.white, bgcolor=color.new(color.gray, 70))
        table.cell(statusTable, 1, 9, volLabel, text_color=color.white, bgcolor=volBg)
    else
        table.clear(statusTable, 0, 0, 1, 9)

// ==================== ALERTING ====================

alertcondition(longSignal,     title="Buy",  message="VWAP Reclaim — Buy")
alertcondition(exitOnVwapLoss, title="Exit", message="VWAP Reclaim — Exit")

Overview

VWAP Reclaim (LONG-only) calculates VWAP with standard deviation bands alongside zero-lag EMA slope filters to verify market trend alignment. Entries trigger either from a direct VWAP crossover or through a sequence involving a reclaim, ATR-based retest tolerance, and local pullback high breakout. Volume ratios and Ultimate Strength Index (USI) stacks serve as additional entry filters. Signals plot directly on the price chart with an on-screen status dashboard.

Details

Published by

skipp-dev on GitHub

Code credit

VWAP Long Reclaim Strategy, as written in the script's header

Type

Strategy, Pine Script v6

Draws

On the price chart

Category

Trend, Moving averages, Volatility & bands, Breakout

Markets

Any symbol

Timeframes

M1-M5, M15-H1

Risk Notes

  • Signals can change on the live bar or after it closes (repainting)
  • The strategy can add several entries in the same direction
  • The strategy enters trades without a stop loss

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Hide VWAP on 1D or AboveboolfalsehideonDWM
Anchor PeriodstringSessionanchor
Sourcesourcehlc3src
Offsetint0offset
Show Band 1booltrueshowBand_1
Standard Deviation Multiplierfloat0.88stdevMult_1
Simple VWAP Cross EntryboolfalsesimpleVwapCross
Breakout Entry (Pullback High)booltruebreakoutEntry
Only Enter on Matched TrendsbooltruematchedTrends
Barcolorsbooltruedisplaybars
Show Trade LabelsbooltrueshowTradeLabels
VWAP Slope Lookbackint5trendSlopeBars
Show all 29 settings
SettingTypeDefaultVariable
Price Bias EMA Lengthint8trendEmaLen
3m PresetstringNeutralpreset3m
Reclaim: Max Bars bis Retestint12reclaimWindowBars
Retest Toleranz (ATR-Anteil)float0.10retestTolATR
Toleranz via ATRbooltrueuseAtrTol
Debug Markersbooltruedebug
Show Status TablebooltrueshowStatusTable
Pullback High Lookbackint5pullbackLookback
USI Trend FilterbooltrueuseUsiFilter
USI Slow RSI Lengthint7usiLen1
USI Mid RSI Lengthint5usiLen2
USI Fast RSI Lengthint3usiLen3
Min Bull Stackint2usiMinBullStack
Bar Close OnlybooltruebarCloseOnly
Volume FilterboolfalseuseVolFilter
Min Volume Ratiofloat1.0minVolRatio
Volume SMA Lengthint20volSmaLen
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

106 stars

This strategy runs on the price chart and enters long when a fast simple moving average crosses above a slow one, and short on the opposite cross, while closing the other side. Entries also need ATR above a filter, a pullback check, a minimum candle-body chang

Strategy v5 TrendMoving averages
Updated 2 years ago · GPL-3.0 GitHub repository of 9:22 5 MIN 15 MIN BANKNIFTY

均线突破交易系统

by tangly1024
76 stars

This strategy trades long breakouts of a fast and a slow moving average on the price chart. It opens a long position when price crosses above either average, using a percentage of equity as size. It reduces the position by a set share when the high reaches the

Strategy v5 TrendMoving averages
Updated 4 months ago · None stated GitHub repository of 均线突破交易系统
16 stars

This strategy plots Donchian channels, trailing stops, and profit targets directly on the price chart. It enters breakout trades using a 55-bar Donchian channel and sizes positions according to an ATR-based risk percentage per unit. The system adds units as pr

Strategy v6 TrendBreakout
Updated 11 months ago · None stated GitHub repository of Seykota Alt 10: Profit Targets
4 stars

This strategy executes trend-following trades based on Bollinger Band breakouts confirmed by a long-term moving average filter. A long position opens when the price crosses above the upper Bollinger Band, provided the band spread meets a minimum threshold and

Strategy v5 Volatility & bandsTrend
Updated 2 years ago · None stated GitHub repository of Bollinger Trend - Strategy V1
4 stars

The Keltner Channel Strategy is a breakout system plotted directly on the main price chart. It calculates upper and lower channel bands around an exponential or simple moving average using ATR, True Range, or bar range multiplied by a specified factor. A long

Strategy v5 TrendVolatility & bands
Updated 5 months ago · None stated GitHub repository of Keltner Channel Strategy

More strategys

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers