이 전략은 쌍층 초트렌드 채널을 구축하여 가격 돌파 채널과 결합하여 거래 신호를 생성한다. 가격 변동률을 사용하여 채널 폭을 조정하여 자조 효과를 달성한다. 트렌드 추적 유형 전략에 속한다.
가격의 표준차와 변동률 ATR을 계산하고, 변동률에 따라 초트렌드 채널의 폭을 조정한다.
이중층 초전향 통로를 구축하여 내부 통로가 더 민감하고 외부 통로가 더 안정된다.
가격이 내층 또는 외층 초트렌드 채널을 뚫을 때 구매 또는 판매 신호를 생성한다.
이중 통로 구조를 사용하여 일부 가짜 돌파구를 필터링 할 수 있습니다.
파동률 ATR은 통로 폭을 조정하는데, 파동이 커지면 통로 폭이 증가하여 자기 적응 효과를 달성한다.
트렌드 채널은 트렌드를 쉽게 추적할 수 있습니다.
이중 계층 채널 구조는 신호 품질을 향상시키고, 가짜 돌파를 필터링한다.
변동률은 채널의 폭을 조정하여 채널을 다른 시장 환경에 더 적합하게 조정합니다.
실행하기 쉽고, 변수 조정도 간단하다.
통로와 돌파구를 시각화하여 직관적인 거래 신호를 형성합니다.
뚫린 신호는 잘못된 판단으로 인해 불필요한 손실을 초래할 수 있습니다.
트렌드 방향에 대한 판단이 불가능하며, 역전 거래의 위험이 있습니다.
적응적 조정이 너무 민감하고, 너무 큰 조정이 될 수 있다.
매개 변수 최적화가 잘못되면 과잉 최적화가 발생할 수 있다.
트렌드 추적 전략으로, 듀들 (uddle) 은 시장에서 수익이 적거나 손실이 발생할 수 있습니다.
통로의 적응 효과에 대한 다양한 매개 변수의 영향을 테스트한다.
평균선과 같은 지표들을 조합해서 큰 트렌드 방향을 판단해보세요.
위조된 침입을 방지하기 위해 침입 확인 메커니즘을 최적화하십시오.
단편적 손실을 통제하기 위한 스톱로스 전략을 추가합니다.
거래 빈도에 대한 채널 변수 조정의 영향을 평가한다.
기계 학습 알고리즘을 통해 동적으로 최적화 가능한 파라미터.
이 전략은 두 층의 자기 적응 초 트렌드 채널을 사용하여 가격 트렌드를 캡처한다. 장점은 간단하고 직관적이어서 트렌드를 효과적으로 추적할 수 있다. 그러나 일부 돌파구 오판과 트렌드 판단 오류의 위험도 존재한다. 매개 변수 최적화와 보조 메커니즘의 보완을 통해 전략 효과를 더욱 개선하여 안정적이고 효율적인 트렌드 추적 시스템을 만들 수 있다.
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000)
//Inputs
multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1)
period = input(title="Period", type=input.integer, step=1, defval=10, minval=1)
SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
dev = stdev(close, period)
stdDev = (dev / close) * 100 + 1
MultDev = SelfAdjust ? multi * stdDev : multi
up_lev1 = hl2 - MultDev * atr(period)
dn_lev1 = hl2 + MultDev * atr(period)
up_lev2 = hl2 - (MultDev * 2 * atr(period))
dn_lev2 = hl2 + (MultDev * 2 * atr(period))
up_trend1 = 0.0
up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1
up_trend2 = 0.0
up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2
down_trend1 = 0.0
down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1
down_trend2 = 0.0
down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2
trend1 = 0
trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1)
trend2 = 0
trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1)
st_line1 = trend1 == 1 ? up_trend1 : down_trend1
st_line2 = trend2 == 1 ? up_trend2 : down_trend2
// Plotting
plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1")
plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2")
fill(plot1, plot2, color = color.aqua, title = "Cloud")
buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1
sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1
if(buy and time_cond)
strategy.entry("long", long = true , comment="long")
if (close < st_line1 and time_cond or close < st_line2 and time_cond)
strategy.close("long")
if (not time_cond)
strategy.close_all()