RSI와 볼링거 밴드 합병 거래 전략 LTC

저자:차오장, 날짜: 2024-02-06 10:48:03
태그:

img

전반적인 설명

이 전략은 상대 강도 지수 (RSI) 와 볼링거 밴드를 결합하여 라이트코인 (LTC) 을 구매 및 판매할 수 있는 자동화된 전략을 구현합니다. LTC/USD 거래 쌍에 적합하며 Bitfinex 암호화폐 거래소에서 실행됩니다.

전략 논리

이 전략은 주로 다음과 같은 두 가지 거래 결정 지표에 의존합니다.

  1. 상대적 강도 지수 (RSI): 자산이 과소매 또는 과소매인지 결정하기 위해 가격 변화의 규모와 속도를 반영합니다. 20 이하의 RSI는 과소매로 간주되며 80 이상은 과소매로 간주됩니다.

  2. 볼링거 밴드 (Bollinger Bands): 중선, 상단 및 하단 3개의 라인을 포함합니다. 중선은 n일 이동 평균입니다. 상단 및 하단 밴드는 지난 n일 동안의 가격의 중선 ± 2 표준편차입니다. 상단 근처의 가격은 과잉 구매 상태를 제안하고, 하단 근처의 가격은 과잉 판매 상태를 제안합니다.

이 두 가지 지표에 따르면 거래 규칙은 다음과 같습니다.

구매 신호: RSI가 낮은 구역에서 20을 넘을 때, 그것은 역전될 수 있는 과반 판매 상태를 나타냅니다. 가격이 또한 볼링거 밴드의 하단 범위를 넘으면 구매 신호가 발생합니다.

판매 신호: RSI가 높은 구역에서 80 이하를 넘으면, 역전될 수 있는 과잉 매수 상태를 나타냅니다. 가격이 또한 볼링거 밴드의 상단 범위를 넘으면 판매 신호가 발생합니다.

우리가 볼 수 있듯이, 전략은 거래 신호를 생성하기 위해 시장 과잉 구매/ 과잉 판매 상태와 가격 브레이크 모두 고려합니다.

장점

이 전략의 주요 장점은 다음과 같습니다.

  1. RSI와 볼링거 밴드를 결합하여 시장 상태를 포괄적으로 판단하여 신뢰할 수있는 신호를 제공합니다.

  2. RSI는 과잉 구매/ 과잉 판매 수준을 나타내고 볼링거 밴드는 일반적인 분포에서 가격 오차를 나타냅니다. 둘은 상호 보완합니다.

  3. 지표 판독과 가격 브레이크 둘 다 고려하여 범위에 묶인 시장에서 잘못된 신호를 피합니다.

  4. RSI와 볼린거 밴드 기간 및 임계값의 합리적인 매개 변수 설정은 지표 실패를 방지하기 위해 최적화에 기반합니다.

  5. 특히 LTC에 최적화되었습니다. 성능은 역사적 데이터 백테스트에 기초하여 좋습니다. 추가 최적화는 더 향상시킬 수 있습니다.

위험성

이점에도 불구하고 몇 가지 위험 요소가 있습니다.

  1. RSI와 볼링거 밴드 모두 실패할 수 있습니다. 특히 비정상적인 시장 상태에서 잘못된 신호와 손실로 이어질 수 있습니다.

  2. 매개 변수 최적화는 역사적 데이터에 의존합니다. 시장 정권의 중요한 변화는 이러한 매개 변수를 무효화하여 전략 성과를 악화시킬 수 있습니다.

  3. 비록 두 개의 지표가 사용되지만, 범위에 묶인 시장에서 여전히 윙사 (whispsaws) 가 발생할 수 있으며 손실과 기회 비용을 초래합니다.

  4. 거래 비용은 전략에서 무시됩니다. 높은 거래 빈도와 과대 규모의 지점은 비용을 통해 수익을 빠르게 침식 할 수 있습니다.

위의 위험을 줄이기 위해 매개 변수 조정, 더 많은 지표, 포지션 사이징, 거래 빈도를 제한하는 등의 방법을 채택 할 수 있습니다.

개선 방향

전략을 개선하기 위한 몇 가지 방향:

  1. 다른 RSI와 볼링거 밴드 매개 변수를 테스트하여 더 나은 설정을 얻습니다.

  2. 계좌 자금에 기반한 포지션 크기 규정을 도입해야 합니다.

  3. 스톱 손실을 설정하거나 다른 지표를 사용하여 스톱 손실을 결정하고 최대 마감량을 제한하기 위해 수익 수준을 취합니다.

  4. 실제 거래에서 매개 변수를 조정하고 손실을 멈추기 위해 미끄러짐을 고려하십시오.

  5. 변동성 지수, 부피 등과 같은 더 많은 요소를 추가하여 더 높은 정확성을 위해 다중 요소 모델을 형성합니다.

  6. 다른 LTC 시장 체제와 주기에 따라 적응 메커니즘을 설계하여 전략 매개 변수를 동적으로 조정합니다.

결론

이 전략은 우선 과잉 구매/ 과잉 판매 수준을 판단하고 이후 브레이크아웃과 결합하여 거래 신호를 생성하여 LTC에 적합합니다. 그러나 지표 실패, 체제 변경 및 거래 비용과 같은 위험은 주의해야 합니다. 개선을위한 많은 방향이 있으며 추가 최적화는 더 나은 결과를 가져올 수 있습니다.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-05 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("LTCUSD BB + RSI 30MIN,", shorttitle="LTCUSD BBRSI 30MIN ", overlay=true)
     
     // Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(01, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true


///////////// RSI
RSIlength = input(5,title="RSI Period Length") 
RSIoverSold = input(20, minval=1,title="RSIL")
RSIoverBought = input(80, minval=1,title="RSIh")
price = open
vrsi = rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input(60, minval=1,title="Bollinger Period Length")
BBmult = input(2.0, minval=0.001, maxval=50,title="Bb")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = crossover(source, BBlower)
sellEntry = crossunder(source, BBupper)
plot(BBbasis, color=aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na
barcolor(switch1?TrendColor:na)
bgcolor(switch2?TrendColor:na,transp=50)


///////////// RSI + Bollinger Bands Strategy
if (not na(vrsi))

    if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower))
        strategy.entry("RSI_BB_L", strategy.long and startTime, stop=BBlower,  comment="RSI_BB_L")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper))
        strategy.entry("RSI_BB_S", strategy.short and startTime, stop=BBupper,  comment="RSI_BB_S")
    else
        strategy.cancel(id="RSI_BB_S")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

더 많은