When I enable an alert on the below strategy, I am told that it can potentially repaint, but I am not sure which function could be causing this. Does anyone have any ideas?
The strategy looks at RSI values on a given timeframe, VWAP, and time of day to then define a potential entry, with a take profit.
//@version=5
strategy('Strategy', overlay=true, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, process_orders_on_close=false, pyramiding=1)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startYear = input.int(title='Start Year', defval=2021, minval=1800, maxval=2100)
endMonth = input.int(title='End Month', defval=1, minval=1, maxval=12)
endDate = input.int(title='End Date', defval=1, minval=1, maxval=31)
endYear = input.int(title='End Year', defval=2023, minval=1800, maxval=2100)
startHour = input.int(title='Start Hour', defval=9, minval=0, maxval=23)
startMinute = input.int(title='Start Minute', defval=30, minval=0, maxval=59)
endHour = input.int(title='end Hour', defval=15, minval=0, maxval=23)
endMinute = input.int(title='end Minute', defval=57, minval=0, maxval=59)
afterStartDate = time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, startHour, startMinute)
beforeEndDate = time <= timestamp(syminfo.timezone, endYear, endMonth, endDate, endHour, endMinute)
afterEndDate = time >= timestamp(syminfo.timezone, endYear, endMonth, endDate, endHour, endMinute)
Rsi_value = input.int(14, title='RSI Length', step=1)
rs = ta.rsi(close, Rsi_value)
hlrev_s = ta.crossunder(rs, 80)
llrev_b = ta.crossover(rs, 20)
// Get ATR inputs
atrLength = input.int(title='ATR Length', defval=14, minval=1, group='ATR Settings')
lookback1 = input.int(title='Bars To Look Back For Highs/Lows', defval=7, minval=1, group='ATR Settings')
multiplier = input.float(title='ATR Multiplier', defval=1, minval=0.1, group='ATR Settings')
trailType = input.string(title='Trailing Stop Type', defval='High/Low', options=['High/Low', 'Close', 'Open'], group='ATR Settings')
// Get display table inputs
showATR = input.bool(title='Show ATR?', defval=true, group='Display Settings')
atrColor = input.color(title='ATR Color', defval=color.new(color.blue, 100), group='Display Settings')
atrLocation = input.string(title='ATR Location', defval='BR', options=['TR', 'TC', 'BR', 'BC'], group='Display Settings')
// Calculate data
atr = ta.atr(atrLength)
longStop = (trailType == 'High/Low' ? ta.lowest(low, lookback1) : trailType == 'Close' ? close : open) - atr * multiplier
shortStop = (trailType == 'High/Low' ? ta.highest(high, lookback1) : trailType == 'Close' ? close : open) + atr * multiplier
timeinrange(res, sess) =>
not na(time(res, sess, 'America/New_York')) ? 1 : 0
var float short_profit = 0
var float short_stopLoss = 0
var float long_profit = 0
var float long_stopLoss = 0
/////VWAP
//indicator(title="Volume Weighted Average Price", shorttitle="VWAP", overlay=true, timeframe="", timeframe_gaps=true)
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")
showBand_1 = input(true, title="", group="Standard Deviation Bands Settings", inline="band_1")
stdevMult_1 = input(1, title="Bands Multiplier #1", group="Standard Deviation Bands Settings", inline="band_1")
if barstate.islast and ta.cum(volume) == 0
runtime.error("No volume is provided by the data vendor.")
new_earnings = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_off, ignore_invalid_symbol=true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_off, ignore_invalid_symbol=true)
new_split = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_off, ignore_invalid_symbol=true)
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
float vwapValue = na
float upperBandValue1 = na
float lowerBandValue1 = 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
var float allow1extraday = 0
if afterStartDate and beforeEndDate and strategy.position_size == 0 and timeinrange('1', '0930-1557') == 1 and llrev_b
if high > high[1] and low >= lowerBandValue1
strategy.entry('Long', strategy.long)
long_profit := shortStop
long_stopLoss := longStop
long_stopLoss
else
strategy.entry('Short', strategy.short)
short_profit := longStop
short_stopLoss := shortStop
short_stopLoss
if strategy.position_size < 0 and close <= short_profit
strategy.close('Short')
allow1extraday := 0
allow1extraday
if afterStartDate and beforeEndDate and strategy.position_size == 0 and timeinrange('1', '0930-1557') == 1 and hlrev_s
if low < low[1] and high <= upperBandValue1
strategy.entry('Short', strategy.short)
short_profit := longStop
short_stopLoss := shortStop
short_stopLoss
else
strategy.entry('Long', strategy.long)
long_profit := shortStop
long_stopLoss := longStop
long_stopLoss
if strategy.position_size > 0 and close >= long_profit
strategy.close('Long')
allow1extraday := 0
allow1extraday
if timeinrange('1', '1557-1558') == 1 and allow1extraday == 2 //afterEndDate and
strategy.close_all()
if timeinrange('1', '1557-1558') == 1 and strategy.opentrades > 0 and allow1extraday == 1
allow1extraday := 2
allow1extraday
if timeinrange('1', '1557-1558') == 1 and strategy.opentrades > 0 and allow1extraday == 0
allow1extraday := 1
allow1extraday
if timeinrange('1', '1559-1600') == 1 and strategy.position_size == 0 //afterEndDate and
allow1extraday := 0
allow1extraday