使用更高时间框架安全功能的策略晚 1 柱交易

Strategy using Higher Time Frame Security Function trades 1 bar late

一段时间以来一直在为多时间框架策略使用安全功能,想知道是否有针对晚 1 根柱线交易的策略的解决方案。

正如您在我下面的脚本中看到的那样,这个简单的策略是在上周收盘 > 开盘时买入,反之亦然。我的问题是它在星期二而不是星期一交易。我相信到周一前一周的信息已经完整,因此应该可以根据该信息在周一进行交易。

是否可以通过安全功能解决这个问题,或者我们是否必须以其他方式对每周蜡烛的值进行编码?

提前致谢。

//@version=4
strategy("MTF Lag Issue", overlay=true)

weekly_open = security(syminfo.tickerid, 'W', open[1], barmerge.gaps_off, barmerge.lookahead_on)
weekly_close = security(syminfo.tickerid, 'W', close[1], barmerge.gaps_off, barmerge.lookahead_on)

weekly_red_candle = weekly_close < weekly_open
weekly_green_candle = weekly_close > weekly_open

weekly_candle_color = weekly_green_candle ? color.lime : weekly_red_candle ? color.red : color.gray

IsMonday = dayofweek == dayofweek.monday
IsTuesday = dayofweek == dayofweek.tuesday

Long = weekly_green_candle
Short = weekly_red_candle


//PLOT
w_o = plot(weekly_open, linewidth=2, color=weekly_candle_color, style=plot.style_circles, title="Open")
w_c = plot(weekly_close, linewidth=3, color=weekly_candle_color, title="Close")

plotchar(IsMonday, title='M', char='M', location=location.abovebar, color=color.yellow, size=size.auto, transp=0)
plotchar(IsTuesday, title='T', char='T', location=location.abovebar, color=color.aqua, size=size.auto, transp=0)

//STRATEGY

strategy.entry('BUY', strategy.long, when=Long)
strategy.entry('SELL', strategy.short, when=Short)

使用:

strategy("MTF Lag Issue", overlay=true, process_orders_on_close = true)

https://www.tradingview.com/pine-script-reference/v4/#fun_strategy

这是一个将在本周初开盘时进场交易的版本。它不使用 security()。您可以在脚本的 Settings/Inputs 中返回到之前的策略。请确保在使用之前验证它。评论解释了一些新增内容:

//@version=4
strategy("MTF Lag Issue", overlay=true)
useSecurity = input(false, "Use security as before")
showAbnormalWeeks = input(true, "Show abnormal weeks")
showWeekBoundaries = input(true, "Show Beginning and end of weeks")

IsMonday = dayofweek == dayofweek.monday
IsTuesday = dayofweek == dayofweek.tuesday
// Correctly detects beginning of the week on any day.
WeekBegin = change(weekofyear)
// Detect end of week hoping it's a Friday but accommodate weeks with no Friday.
WeekEnd = dayofweek == dayofweek.friday or (WeekBegin and dayofweek[1] != dayofweek.friday)

// New open/close data.
var weekly_open = open
var weekly_close = close
if WeekBegin
    weekly_open := open
if WeekEnd
    weekly_close := close

// Previously used open/close data.
weekly_open2 = security(syminfo.tickerid, 'W', open[1], barmerge.gaps_off, barmerge.lookahead_on)
weekly_close2 = security(syminfo.tickerid, 'W', close[1], barmerge.gaps_off, barmerge.lookahead_on)

weekly_red_candle = useSecurity ? weekly_close2 < weekly_open2 : weekly_close < weekly_open
weekly_green_candle = useSecurity ? weekly_close2 > weekly_open2 : weekly_close > weekly_open

weekly_candle_color = weekly_green_candle ? color.lime : weekly_red_candle ? color.red : color.gray

Long = weekly_green_candle
Short = weekly_red_candle

//PLOT
w_o = plot(useSecurity ? weekly_open2 : weekly_open, linewidth=2, color=weekly_candle_color, style=plot.style_circles, title="Open")
w_c = plot(useSecurity ? weekly_close2 : weekly_close, linewidth=3, color=weekly_candle_color, title="Close")

plotchar(IsMonday, title='M', char='M', location=location.abovebar, color=color.yellow, size=size.auto, transp=0)
plotchar(IsTuesday, title='T', char='T', location=location.abovebar, color=color.aqua, size=size.auto, transp=0)
// Begin and end of week conditions.
plotchar(showWeekBoundaries and WeekBegin, title='WeekBegin', char='▲', location=location.belowbar, color=color.silver, size=size.tiny, transp=0)
plotchar(showWeekBoundaries and WeekEnd, title='WeekEnd', char='▼', location=location.belowbar, color=color.silver, size=size.tiny, transp=0)
// Show weeks with abnormal beginnings/ends.
bgcolor(showAbnormalWeeks and WeekEnd and dayofweek != dayofweek.friday ? color.red : na)
//STRATEGY

strategy.entry('BUY', strategy.long, when=Long)
strategy.entry('SELL', strategy.short, when=Short)