该策略主要利用前一交易日的最高价、最低价和收盘价作为当日的支撑和阻力位,在突破阻力位时做多,在回测试支撑位时做空,属于典型的突破策略。
代码首先定义了一个计算支撑阻力位的函数calculateSupportResistance,该函数提取前一交易日的最高价、最低价和收盘价,作为当日的支撑阻力位。
然后在主逻辑中调用该函数获取这三个价格位并绘图显示出来。
在回测逻辑中,如果收盘价低于前一日最低价同时当前价高于该最低价构成突破,则做多;如果收盘价高于前一日最高价同时当前价低于该最高价构成突破,则做空。
通过这样的突破模型实现对趋势的判断和交易信号的产生。
对策:
该策略整体来说属于典型的突破策略,简单直观,通过前一交易日数据构建当日支撑阻力,回测该位突破做多做空。优点是容易理解实现,可直接看到支撑阻力;缺点是存在假突破风险,无法确定趋势持续性。下一步可从确定突破效力、控制风险、优化资金管理等方面进行优化。
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)
// Function to calculate support and resistance levels
calculateSupportResistance() =>
highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
[highPrevDay, lowPrevDay, closePrevDay]
// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()
// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")
// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)
// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)