이것은 채널 지표에 기반한 브레이크아웃 거래 전략이다. 상위 대역을 넘어서면 가격이 길게, 하위 대역을 넘어서면 짧게 갈 수 있도록 채널 대역의 오스실레이션 특성을 활용한다. 트렌드를 따르는 전략 범주에 속한다.
이 전략은 먼저 SMA를 사용하여 채널의 중간선을 계산합니다. 상단역은 중간선 더해 매개 변수 값으로 설정되며, 하단역은 중간선 빼기 매개 변수 값으로 가격 채널을 형성합니다. 그 다음 가격이 상단역 또는 하단역에서 벗어날 수 있는지 판단하고, 오픈 신호로 거래량 상승과 결합합니다. 가격이 채널로 다시 떨어지면 종료 신호로 사용됩니다.
구체적으로, 거래 논리는 다음과 같습니다.
미드라인 계산: SMA (거의, N)
상단역: 중간선 + 매개 변수 값
하부 대역: 중간선 - 파라미터 값
가격이 상단 범위를 넘어서면 거래량이 이전 기간의 2배가 넘으면 긴 거래가 됩니다.
가격이 채널로 떨어지면 긴 포지션을 닫습니다.
가격이 하위 범위를 넘어서면, 거래량이 전기보다 2배나 커지면, 쇼트하게 됩니다.
가격이 채널로 다시 떨어지면, 짧은 포지션을 닫습니다.
이 전략의 장점은 다음과 같습니다.
채널 표시기를 사용하면 가격 추세를 효과적으로 추적 할 수 있습니다.
거래량 증가와 결합하면 가짜 브레이크를 잘 필터합니다.
채널로 돌아가는 것은 손해를 막는 메커니즘으로 작용하고 거래당 손실을 제한합니다.
오스실레이션 특성은 중장기 트렌드를 포착하는 데 적합합니다.
간단한 논리는 이해하기 쉽고 실행하기 쉽다.
또한 몇 가지 위험이 있습니다.
연속적인 같은 방향 거래는 가격이 길고 손실 위험이 증가하기 위해 채널의 한쪽에 붙어있을 때입니다.
잘못된 채널 파라미터 설정은 과도한 잘못된 신호를 일으킬 수 있습니다.
거래량 상승에 대한 잘못된 기준은 진정한 브레이크오웃 신호를 놓칠 수 있습니다.
스톱 손실 메커니즘은 너무 보수적이어서 더 큰 움직임을 놓칠 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
다양한 시장 특성에 맞는 채널 매개 변수를 최적화합니다.
잘못된 브레이크오프를 피하기 위해 MA 크로스오버 또는 촛불 패턴을 고려하는 것과 같은 오픈 포지션 기준을 향상시킵니다.
스톱 손실 메커니즘을 최적화하고, 조기 출구를 피하기 위해 더 넓은 스톱 손실 범위를 허용합니다.
포지션 크기와 자본 활용을 시장 조건에 따라 조정하기 위해 포지션 크기를 조정하는 규칙을 추가합니다.
전체 트렌드 방향을 결정하기 위해 더 많은 지표를 포함하고 주요 트렌드에 반하는 거래를 피하십시오.
요약하면, 이것은 단순하고 실용적인 트렌드 다음 전략이다. 채널 오스실레이션을 활용함으로써 중장기 트렌드를 효과적으로 파악할 수 있다. 그러나 다른 시장에 맞게 매개 변수 조정이 필요하며, 위험은 모니터링되어야 한다. 더 많은 지표와 기술을 이용한 추가 최적화는 안정성과 수익성을 향상시킬 수 있다.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Copyright, 2022, Cache_that_pass. You are free to use this script however you see fit and reproduce it in any manner. //@version=5 ////// Name the strategy between the 2 quotation marks. Consider setting commission type and value in strategy header to match exchanges rates. ////// strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true) ////// Inputs and calculations used by script ////// period = input(title='Period', defval=25) len = input(title='Period', defval=25) smaHigh = ta.sma(high, len) smaLow = ta.sma(low, len) Hlv = int(na) Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? smaHigh : smaLow sslUp = Hlv < 0 ? smaLow : smaHigh ////// Show me the money ////// plot(sslDown, linewidth=2, color=color.new(color.red, 0)) plot(sslUp, linewidth=2, color=color.new(color.lime, 0)) ////// Trade execution logic ////// //pseudo-code// //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits) // //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp //Close shorts when sslDown crosses under sslUp longCondition1 = (sslUp > sslDown) longCondition2 = ta.crossover(high, sslUp) //longCondition3 = (volume >= (volume[1]*1.89)) longCondition = ((longCondition1) and (longCondition2))// and (longCondition3)) longExit = ta.crossunder(sslUp, sslDown) ////// Bring It ////// if (longCondition) strategy.entry("Bring It", strategy.long) ////// Sling It ////// if (longExit) strategy.close("Bring It", comment="Sling It") shortCondition1 = (sslDown) > (sslUp) shortCondition2 = ta.crossunder(low, sslUp) //shortCondition3 = (volume >= (volume[1]*1.89)) shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3)) shortExit = ta.crossunder(sslDown, sslUp) ////// Bring It ////// if (shortCondition) strategy.entry("Bring It", strategy.long) ////// Sling It ////// if (shortExit) strategy.close("Bring It", comment="Sling It") ////// Sling It ////// if (shortCondition) strategy.entry("Sling It", strategy.short) ////// Bling It ////// if (shortExit) strategy.close("Sling It", comment="Bring It")