진동 채널 돌파 전략


생성 날짜: 2023-11-15 16:01:09 마지막으로 수정됨: 2023-11-15 16:01:09
복사: 1 클릭수: 660
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

진동 채널 돌파 전략

개요

이 전략은 통로 지표에 기반한 돌파 거래 전략이다. 통로 오르락 내리락의 흔들림 특성을 이용하고, 가격이 통로 오르락 돌파할 때 더하고, 통로 하락 돌파할 때 공백하고, 트렌드 추적 유형 전략이다.

전략 원칙

이 전략은 먼저 SMA 계산 채널의 중축선을 이용하여 중축선에 하나의 변수값을 상향 궤도로 더하고 하나의 변수값을 하향 궤도로 빼서 가격 채널을 형성한다. 그 다음 가격의 상향 하향 궤도를 돌파했는지 판단하고 거래량의 급증과 결합하여 포지션 개설 신호로 한다. 가격이 다시 채널로 들어갔을 때 평소 포지션 신호로 한다.

특히, 전략의 거래 논리는 다음과 같습니다.

  1. 통로 중축을 계산합니다: SMA ((폐쇄 가격, N)

  2. 통로 상궤도선: 중축 + 변수값

  3. 통로 아래 궤도: 중축 - 변수 값

  4. 상위 궤도 라인을 돌파할 때, 거래량이 이전 주기의 2배 이상인 조건이 충족되면 추가 입장을 한다.

  5. 통로로 돌아가는 동안,

  6. 하위 궤도 라인을 돌파할 때, 거래량이 이전 주기보다 2배가 더 큰 조건을 충족하면 공백 입구

  7. 다시 통로로 들어갔을 때,

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 통로 지표는 가격 동향을 효과적으로 추적할 수 있습니다.

  2. 거래량이 급증하는 조건과 함께 가짜 돌파구를 효과적으로 필터링 할 수 있습니다.

  3. 역입 통로 (Back-in Channel) 는 단편 거래의 손실을 제한하는 손실 퇴출 장치입니다.

  4. 의 특징은 짧은 선의 경향을 잡기 위해 적합하다.

  5. 구현 논리는 간단하고 이해하기 쉽고 구현하기 쉽다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 가격이 통로 쪽에 장기간 있을 때, 동방향 포지션을 연이어 발동하여 손실의 위험에 직면한다.

  2. 채널 매개 변수를 잘못 설정하면 너무 많은 오류 신호가 발생할 수 있습니다.

  3. 거래량이 급증하는 판단기준이 부적절할 경우 진정한 돌파구를 놓칠 수도 있습니다.

  4. 하지만, 이 경우에도, 이 제도는 너무 보수적일 수 있고, 큰 상황을 놓칠 수도 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 채널의 매개 변수를 최적화하여 다양한 시장의 특성에 맞게 조정합니다.

  2. 포지션 개시 조건을 최적화하거나 증가시키며, 평균선 빈도, 클라인 형태 등을 고려하여 가짜 돌파구를 피한다.

  3. 손해제출 메커니즘을 최적화하고, 손해제출을 적절히 완화하고, 조기 퇴장을 피한다.

  4. 포지션 관리 메커니즘을 늘리고, 시장 상황에 따라 포지션과 자금 활용률을 조정한다.

  5. 더 많은 지표와 함께 대차별 트렌드의 방향을 판단하여 대차별 트렌드에 대응하는 것을 피하십시오.

요약하다

이 전략은 전체적으로 보다 간단하고 실용적인 트렌드 추적 전략이다. 가격 채널의 흔들림 특성을 활용하여 중단계 트렌드를 효과적으로 포착할 수 있다. 그러나 또한 최적화 파라미터 설정을 주의해야 하며, 그 안에 존재하는 위험을 예방하는 것도 필요하므로, 이러한 방법으로 더 나은 전략 효과를 얻을 수 있다. 더 많은 지표와 기술 수단과 결합하여 최적화하면 전략의 안정성과 수익성을 더욱 강화할 수 있다.

전략 소스 코드
/*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")