이 전략은 트리플 슈퍼트렌드 지표, 이치모쿠 클라우드 지표, 평균 진정한 범위 (ATR) 지표 및 기하급수적인 이동 평균 (EMA) 을 결합한 정량적 거래 전략입니다. 시장 트렌드를 결정하기 위해 트리플 슈퍼트렌드, 지원 및 저항을위한 이치모쿠 클라우드, 스톱 로스를위한 ATR, 트렌드 확인을위한 EMA를 사용하여 비교적 완전한 거래 시스템을 형성합니다.
이 전략의 핵심 논리는 트리플 슈퍼트렌드 지표에 기반합니다. 슈퍼트렌드 지표는 특정 기간 내 평균 진정한 범위와 가격을 비교하여 트렌드 방향을 결정합니다. 가격이 상단보다 높을 때, 그것은 상승 신호이며, 가격이 하단보다 낮을 때, 그것은 하향 신호입니다. 이 전략은 다른 매개 변수와 함께 세 개의 슈퍼트렌드 지표를 채택합니다. 세 가지 모두 동시에 구매 또는 판매 신호를 할 때 거래 신호가 생성됩니다.
또한 이치모쿠 구름 두께는 일부 잘못된 신호를 필터링하기 위해 현재 트렌드의 강도를 결정하는 데 도움이됩니다. ATR 지표는 스톱 로스를 설정하는 데 사용됩니다. EMA 지표는 중간 및 장기 트렌드를 확인합니다.
특히, 가격이 세 개의 슈퍼 트렌드 지표의 상단 범위를 넘어서면 장거리, 세 가지의 하단 범위를 넘어서면 단거리. 또한 불확실한 신호를 필터하기 위해 이치모쿠 클라우드 위에 또는 아래에 있어야 합니다. 스톱 로스는 엔트리 가격 빼기 동적 트레일링 스톱의 ATR 값으로 설정됩니다.
세 개의 슈퍼트렌드 지표와 다른 설정은 효과적으로 시장 소음을 필터하고 추세 방향을 더 정확하게 결정할 수 있습니다.
이치모쿠 클라우드는 트렌드 강도를 결정하여 가짜 브레이크오웃을 피합니다. ATR 스톱 로스 설정은 막대한 손실을 최대한 피하기 위해 합리적입니다.
EMA는 중장기 및 장기적인 트렌드 방향을 확인하고, 슈퍼트렌드 신호를 확인하고, 신뢰성을 더욱 향상시키는데 도움을 줍니다.
여러 가지 지표를 결합하면 시그널이 더 신뢰할 수 있습니다. 왜냐하면 시장 트렌드를 결정 할 때 서로 확인할 수 있기 때문입니다.
이치모쿠 구름이 추가되었지만 구름 두께가 침투하면 유효하지 않은 구역으로 들어가는 위험이 여전히 있습니다. ATR은 어느 정도 손실을 제한합니다.
변동성이 높을 때, ATR에 의해 설정된 스톱 손실은 직접적으로 활성화 될 수 있으며, 이로 인해 손실 비율이 증가합니다. 매개 변수를 조정하거나 스톱 손실 범위를 증가시킬 수 있습니다.
부적절한 신호는 슈퍼 트렌드 매개 변수가 적절하게 설정되지 않으면 자주 발생할 수 있습니다. 최적의 조합을 찾기 위해 많은 백테스트가 필요합니다.
변동성 지수, 볼링거 밴드 같은 더 많은 지표가 신호를 필터링하고 신뢰성을 향상시키는 데 도움이 될 수 있습니다.
ATR 계산을 개선하여 큰 변동에서 손실 비율을 낮추기 위해 동적으로 중지 손실 범위를 조정합니다.
수동 매개 변수 설정 대신 거래 신호를 판단하기 위해 역사 데이터에 훈련 된 기계 학습 모델을 추가합니다. 신호 정확도는 향상 될 수 있습니다.
이 전략은 트리플 슈퍼트렌드, 이치모쿠 클라우드, ATR 및 EMA를 포함한 네 가지 부분을 결합합니다. 시그널은 시장 트렌드를 결정 할 때 지표에 걸쳐 검증됩니다. 이치모쿠 클라우드 및 ATR 스톱 손실 제어 위험. EMA는 중간 및 장기 트렌드를 확인합니다. 이 전략의 신호는 중장기 보유에 비교적 신뢰할 수 있습니다. 더 나은 전략 성능을 얻기 위해 스톱 손실을 더 이상 최적화하고 더 많은 보조 지표를 추가 할 수 있습니다.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true ) // float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100 // ichimoku Cloud conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku") basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku") laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku") displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7, title="Leading Span A", display = display.none) p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a, title="Leading Span B", display = display.none) plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70)) // three supertrend //1 atrPeriod1 = input(10, "ATR Length1", group="SuperTrend") factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend") [supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1) supertrend1 := barstate.isfirst ? na : supertrend1 bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr) //2 atrPeriod2 = input(11, "ATR Length2", group="SuperTrend") factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2) supertrend2 := barstate.isfirst ? na : supertrend2 bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr) //3 atrPeriod3 = input(12, "ATR Length2", group="SuperTrend") factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3) supertrend3 := barstate.isfirst ? na : supertrend3 bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr) // ATR lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR") smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") ma_function(sourceATR, lengthATR) => switch smoothingATR "RMA" => ta.rma(sourceATR, lengthATR) "SMA" => ta.sma(sourceATR, lengthATR) "EMA" => ta.ema(sourceATR, lengthATR) => ta.wma(sourceATR, lengthATR) ATR = ma_function(ta.tr(true), lengthATR) plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none) // EMA lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA") srcEMA = input(close, title="Source of EMA", group="EMA") offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA") outEMA = ta.ema(srcEMA, lenEMA) plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none) ma(sourceEMA, lengthEMA, type) => switch type "SMA" => ta.sma(sourceEMA, lengthEMA) "EMA" => ta.ema(sourceEMA, lengthEMA) "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA) "WMA" => ta.wma(sourceEMA, lengthEMA) "VWMA" => ta.vwma(sourceEMA, lengthEMA) typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA") smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA") smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none) //logic if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) strategy.entry("L", strategy.long) else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) strategy.entry("S", strategy.short) else strategy.close_all("C")