0

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.

enter image description here

//@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

0 Answers0