볼린저 밴드와 RSI를 기반으로 한 FNGU 양적 거래 전략


생성 날짜: 2024-01-29 14:53:47 마지막으로 수정됨: 2024-01-29 14:53:47
복사: 0 클릭수: 671
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드와 RSI를 기반으로 한 FNGU 양적 거래 전략

개요

이 전략은 브린라인과 RSI의 FNGU 수량 거래 전략으로, FNGU 이 주식만을 위한 긴 포지션 전략이다. 이 전략은 주로 브린라인 지표와 RSI 지표를 사용하여 주식의 과매매 상황을 식별하여 구매 및 판매 신호를 생성한다.

전략 원칙

이 전략의 핵심 논리는 브린 라인 지표와 RSI 지표의 조합 사용에 기초한다.

첫째, 브린선은 세 개의 선으로 구성되어 있다. 중선, 상선, 하선. 중선은 n일 간소 이동 평균이며, 상선과 하선은 각각 중선의 k배의 양-무효 표준차이다. 가격이 상선이나 하선에 가까워지거나 닿을 때 주가가 과매매 상태에 들어간다는 것을 나타낸다.

이 전략에서, 부린 라인 중계 기간의 길이는 235일이며, 변수 k의 값은 2이다. 부린 라인 아래에서 가격이 낮거나 가격이 아래에서 위로 부린 중계 라인을 돌파할 때 구매 신호가 발생한다. 부린 라인 상에서 가격이 높을 때 판매 신호가 발생한다.

둘째, RSI 지표는 주식의 과매매 정도를 반영한다. RSI 70 이상은 과매매를, 30 이하는 과매매를 의미한다. 이 전략에서, RSI 파라미터 기간의 길이는 2 ᄂ이다.

이 전략에서, 부린 라인 지표와 RSI 지표가 결합되어 사용된다: RSI 지표가 초상도에서 돌파되고 동시에 가격이 부린 하위 라인을 넘어서거나 접촉할 때 구매 신호가 발생한다. RSI 지표가 초상도에서 돌파되고 가격이 부린 오프 라인을 넘어서면 판매 신호가 발생한다.

전략적 이점

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

  1. 부린라인과 RSI를 결합하여 구매 및 판매 신호를 더욱 정확하고 신뢰할 수 있도록 합니다.

  2. 부린 라인을 사용하여 주식의 과매매 영역을 식별하고 RSI가 가짜 신호를 필터링하여 상호 보완합니다.

  3. 롱 포지션 거래만 하고, 공백 거래의 위험을 고려하지 않는다.

  4. FNGU의 변동성이 높은 주식에는 최적화된 전략이 적용됩니다.

  5. 자동으로 손실을 멈추고 손실 위험을 줄입니다.

  6. 프로그래밍은 단순하고 명확하며, 이해하기 쉽고 수정하기 쉽습니다.

위험과 해결책

이 전략에는 다음과 같은 위험도 있습니다.

  1. 부린라인과 RSI는 모두 가짜 신호를 생성할 수 있으며, 경매에 쉽게 노출되어 신중한 거래가 필요합니다. 적절한 변수를 조정하거나 다른 지표를 추가하여 필터링 할 수 있습니다.

  2. FNGU 주식은 그 자체로 변동성이 높으며, 부적절한 중지 설정은 손실을 증가시킬 수 있다. 적절히 느슨한 중지 범위를 해야 한다.

  3. 이 전략은 FNGU와 같은 높은 변동성 주식에만 적합하며, 다른 주식에는 적합하지 않으며, 다른 주식에 따라 변수를 조정해야 한다.

  4. 전략 매개 변수는 최적화되었지만 시장의 변화는 매개 변수가 더 이상 적용되지 않도록 만들 수 있으며, 지속적인 최적화에 주의가 필요합니다.

전략 최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. KDJ, MACD 등과 같은 다른 지표 조합을 추가하여 신호를 더 정확하게 만듭니다.

  2. 부린라인과 RSI의 매개 변수를 최적화하여 더 많은 종류의 주식에 적합합니다.

  3. 더 많은 데이터를 사용하여 거래 신호를 생성하는 기계 학습 모델 보조 의사 결정을 추가하십시오.

  4. 초주기 거래를 가능하게 하고, 더 높은 시간 차원의 데이터를 활용하여 신호를 생성한다.

  5. 감정 분석과 함께 소셜 데이터를 활용하여 거래 신호를 생성합니다.

  6. 다양한 파라미터 설정을 빠르게 테스트할 수 있는 양적 피드백 시스템을 개발한다.

요약하다

이 전략은 긴 포지션 전략으로, 특히 FNGU와 같은 변동성이 큰 주식에 적합하다. 이 전략은 부린 라인 지표와 RSI 지표가 결합되어, 과매매 과매매 상황이 발생했을 때 거래 신호를 발생시키고, 주식 가격의 역전 기회를 잡기 위해 고안되었다. 이 전략의 최적화 공간은 여전히 넓고, 더 많은 연구와 더 나은 효과를 위해 개선할 가치가 있다.

전략 소스 코드
/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger + RSI + EMA, Double Strategy Long-Only (by EMKM)", shorttitle="1Min Killer", overlay=true)

///////////// RSI
RSIlength = input(2, title="RSI Period Length") // Adjusted RSI period length
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = rsi(price, RSIlength)

///////////// Bollinger Bands
BBlength = input(235, minval=1, title="Bollinger Period Length") // Adjusted Bollinger period length
BBmult = 2
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
BBtarget38 = BBbasis + 0.38 * BBdev  // Line at 38% of Bollinger Band width
BBtarget50 = BBbasis + 0.50 * BBdev  // Line at 50% of Bollinger Band width

///////////// EMA
emaLength = input(20, title="EMA Period Length")
ema = ema(close, emaLength)

source = close
buyEntry = crossover(source, BBlower) or (close < BBlower and close > BBbasis) or (low < BBlower and close > BBbasis) // Add condition for low touching Bollinger Band
sellEntry = crossunder(source, BBupper)

///////////// Plotting
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
plot(BBtarget38, color=color.blue, linewidth=2, title="SMA at 38% of BB width")  // Line at 38%
plot(BBtarget50, color=color.green, linewidth=2, title="SMA at 50% of BB width")  // Line at 50%
plot(ema, color=color.orange, title="EMA")  // Plot EMA

///////////// RSI + Bollinger Bands Strategy
longCondition = crossover(vrsi, RSIoverSold) and buyEntry
sellCondition = crossunder(vrsi, RSIoverBought) and close > BBupper

close_long = close > BBbasis
close_short = close < BBbasis

if (not na(vrsi))
    if longCondition
        strategy.entry("Buy", strategy.long, qty=10, stop=BBlower, comment="Buy")
    else
        strategy.cancel(id="Buy")
        
    if close_long
        strategy.close("Buy")

if (sellCondition)
    strategy.entry("Sell", strategy.short, qty=10, stop=BBupper, comment="Sell")
else
    strategy.cancel(id="Sell")

if close_short
    strategy.close("Sell")