SPY RSI 스토카스틱 크로스오버 트렌드 역전 전략

저자:차오장, 날짜: 2024-02-23 14:38:49
태그:

img

전반적인 설명

SPY RSI 스토카스틱 크로스오버 리버스 트렌드 전략은 가격 반전을 결정하기 위해 빠르고 느린 라인 사이의 RSI 지표 크로스오버를 사용하는 양적 거래 전략이다. 전략은 느린, 빠른 및 MA 라인을 결합하고 특정 조건이 충족되면 구매 및 판매 신호를 생성하여 중요한 가격 반전 기회를 포착합니다.

전략 논리

이 전략의 핵심 논리는 RSI 빠른 및 느린 라인 크로스오버에 기반하고 있습니다. RSI는 일반적으로 과잉 구매 및 과잉 판매 구역에서 반전됩니다. 따라서 빠른 및 느린 RSI 라인 사이의 황금 십자 및 죽음의 십자 상황을 결정함으로써 가능한 가격 반전 지점을 사전에 식별 할 수 있습니다. 구체적으로 전략은 주로 다음과 같은 지표와 조건에 의존합니다.

  1. 느린 RSI 라인: 64주기 RSI 라인
  2. 빠른 RSI 라인: 9주기 RSI 라인
  3. RSI MA 라인: 빠른 RSI 라인의 3주기 간단한 이동 평균
  4. RSI 과잉 매수 기준: 파라미터 83로 설정
  5. RSI 초판 한계: 파라미터 25로 설정
  6. RSI 중립 구역: 39에서 61 사이
  7. 거래 시간: 월요일부터 금요일까지 오전 9시부터 다음 날 오전 9시까지

빠른 RSI가 느린 RSI (골든 크로스) 를 넘어서고 빠른 라인이 MA 라인을 넘어서면 구매 신호가 생성됩니다. 빠른 RSI가 느린 RSI (죽음 크로스) 를 넘어서고 빠른 라인이 MA 라인을 넘어서면 판매 신호가 생성됩니다.

또한, 다음의 논리는 소음 트레이드를 필터링하도록 구성되어 있습니다.

  1. 중립 RSI 구역 내에서 생성된 거래 신호가 없습니다.
  2. 월요일부터 금요일까지 오전 9시부터 다음 날 오전 9시까지만 거래

입국 후 두 가지 출구 조건이 있습니다.

  1. 급격한 RSI가 반대 영역에 진입하면 포지션을 닫습니다.
  2. 리버스 RSI 크로스오버 신호가 발생했을 때 닫기 위치

이점 분석

SPY RSI 스토카스틱 크로스오버 트렌드 역전 전략의 가장 큰 장점은 중요한 가격 반전이 발생하기 전에 트렌드를 일찍 파악할 수 있다는 것입니다. 빠르고 느린 RSI 라인 크로스오버를 통해 시간보다 먼저 거래 신호를 발급하고 시장 진입 기회를 창출 할 수 있습니다. 또한 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 명확한 신호 생성 규칙, 이해하기 쉽고 추적
  2. 소음 신호를 줄이기 위해 설계된 듀얼 필터
  3. 유연한 과잉 구매/ 과잉 판매 구역 설정은 다른 시장 환경에 적합합니다.
  4. 트렌드 추적과 역전 포착 기능을 결합합니다.

요약하자면, 트렌드 추적과 가치 반전 분석을 결합함으로써 전략은 어느 정도 가격 반전 시기를 파악할 수 있으며, 강력한 실용성을 가지고 있습니다.

위험 분석

SPY RSI 스토카스틱 크로스오버 트렌드 역전 전략은 몇 가지 장점을 가지고 있지만 다음과 같은 주요 위험도 가지고 있습니다.

  1. 이중 필터 설계에도 불구하고 노이즈 무역에서 발생하는 위험을 완전히 피할 수 없습니다.
  2. RSI 크로스오버는 실제 반전 지점을 예측하는 데 완벽하지 않습니다. 어떤 어려움이 있습니다.
  3. 합리적인 매개 변수 설정이 필요, 그렇지 않으면 너무 빈번하거나 희박한 거래가 발생할 수 있습니다.
  4. 거짓 탈출으로 이어지는 블랙 스완 사건은 완전히 피할 수 없습니다.

위 위험에 대응하기 위해 전략은 다음과 같은 측면에서 최적화되고 개선될 수 있습니다.

  1. 기계 학습 알고리즘을 사용하여 최적의 매개 변수를 훈련하고 소음 신호를 줄이십시오.
  2. 크로스오버 신호의 신뢰성을 높이기 위해 다른 기술적 지표를 포함
  3. 거래 리스크 노출별 제어에 스톱 로스 메커니즘을 추가합니다
  4. 적응력을 향상시키기 위해 매개 변수의 적응 업데이트를 최적화합니다.

최적화 방향

SPY RSI 스토카스틱 크로스오버 트렌드 역전 전략은 주로 다음 영역에서 최적화 될 수 있습니다.

  1. 매개 변수 최적화: 유전 알고리즘, 그리드 검색 등과 같은 방법을 통해 최적의 매개 변수 조합을 체계적으로 찾습니다.
  2. 특징 공학: 부피 변화, 변동성 등과 같은 가격에 영향을 미치는 요소를 더 많이 포함하여 의사결정을 촉진하십시오.
  3. 기계 학습: 정확성을 향상시키기 위해 기계 학습 알고리즘으로 트레인 크로스 오버 기준
  4. 손실 최적화 중지: 리스크를 통제하기 위해 후속 중지, 시간 중지 등을 도입
  5. 적응성 있는 업데이트: 주요 매개 변수를 실시간 시장 조건에 따라 적응적으로 조정할 수 있도록 합니다.

이러한 최적화는 전략 매개 변수를 더 지능화하고 신호를 더 신뢰할 수 있으며 시장 변화에 따라 규칙을 조정하여 전략의 수익 안정성을 크게 향상시킬 수 있습니다.

결론

SPY RSI 스토카스틱스 크로스오버 리버스 트렌드 전략은 RSI의 빠르고 느린 라인 크로스오버를 판단하는 데 기반한 비교적 간단하고 명확한 양적 거래 전략 시스템을 설계했다. 트렌드 따라와 리버스 트레이딩 기능을 모두 결합하여 어느 정도 가격 리버스 타이밍을 파악할 수 있다. 그러나 전략은 또한 몇 가지 내재적인 결함을 가지고 있으며 위험을 제어하고 신호 품질을 향상시키기 위해 매개 변수, 기능 및 모델 최적화를 필요로 한다. 지속적인 최적화로 안정적인 수익성 있는 양적 시스템으로 변할 수 있다.


/*backtest
start: 2024-01-23 00:00:00
end: 2024-02-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SPY Auto RSI Stochastics", pyramiding = 3)


// Input parameters
slowRSILength = input(64, title="SLOW RSI Length")
fastRSILength = input(9, title="FAST RSI Length")
smaRSILength = input(3, title="RSI SMA Length")
RSIUpperThreshold = input(83, title="RSI Upper")
RSILowerThreshold = input(25, title="RSI Lower")
RSIUpperDeadzone = input(61, title='RSI Upper Deadzone')
RSILowerDeadzone = input(39, title='RSI Lower Deadzone')
blockedDays = (dayofweek(time) == 1 or dayofweek(time) == 7)
sessionMarket = input("0900-0900", title="Session Start")
allowedTimes() => time(timeframe = timeframe.period, session = sessionMarket, timezone = "GMT+1")
isvalidTradeTime =true

// RSI and ATR
slowRSI = ta.rsi(close, slowRSILength)
fastRSI = ta.rsi(close, fastRSILength)
smaRSI = ta.sma(fastRSI, smaRSILength)
rsi = fastRSI

// Entry condition
RSIUptrend() =>  ta.crossover(fastRSI, slowRSI) and ta.crossover(fastRSI, smaRSI)
RSIDowntrend() =>  ta.crossunder(fastRSI, slowRSI) and ta.crossunder(fastRSI, smaRSI)


isRSIDeadzone() =>
    rsi < RSIUpperDeadzone and rsi > RSILowerDeadzone

isBullishEngulfing() =>
    close > high[1]

isBearishEngulfing() =>
    close < low[1] 

// Declare variables
var float initialSLLong = na
var float initialTPLong = na
var float initialSLShort = na
var float initialTPShort = na
//var bool inATrade = false

entryConditionLong = RSIUptrend() and not isRSIDeadzone() and isvalidTradeTime
entryConditionShort = RSIDowntrend() and not isRSIDeadzone() and isvalidTradeTime

exitConditionLong = entryConditionShort or fastRSI > RSIUpperThreshold
exitConditionShort = entryConditionLong or fastRSI < RSILowerThreshold


if (entryConditionLong)
    strategy.entry(id = "Long", direction = strategy.long, alert_message = 'LONG! beep boop, all aboard the long train')

if (entryConditionShort)
    strategy.entry(id = "Short", direction = strategy.short, alert_message = 'Short! beep boop, all aboard the short train')

if (exitConditionLong)
    strategy.exit("Long", from_entry="Long", limit=close, alert_message = 'Stop Long, halt halt, take the profits and runnn')

if (exitConditionShort)
    strategy.exit("Short", from_entry="Short", limit=close, alert_message = 'Stop Short, halt halt, take the profits and runnn')


//plot(smaRSI, "RSI MA", color=color.red)
plot(slowRSI, "Slow RSI", color=color.green)
//plot(fastRSI, "Fast RSI", color=color.white)
plot(smaRSI, "SMA RSI", color=color.white)


더 많은