리소스 로딩... 로딩...

선형 회귀 RSI를 기반으로 한 양적 거래 전략

저자:차오장, 날짜: 2024-01-24 11:35:19
태그:

img

전반적인 설명

이 전략은 선형 회귀 RSI 지표에 기초하여 설계되었습니다. 선형 회귀 RSI와 EMA 사이의 교차를 계산하여 구매 및 판매 신호를 생성합니다. 전략은 또한 필요에 따라 선택할 수있는 구매 논리에 대한 두 가지 옵션을 제공합니다.

전략 논리

이 전략은 먼저 200주기 선형 회귀를 계산하고, 그 다음 선형 회귀 결과를 기반으로 21주기 RSI를 계산한다. 그 후, 50주기 EMA가 계산된다. RSI가 EMA를 넘을 때 구매 신호가 생성된다. RSI가 EMA를 넘을 때 판매 신호가 트리거되어 포지션을 닫는다.

이 전략은 두 가지 유형의 구매 논리를 제공합니다.

  1. RSI가 EMA를 넘을 때 구매합니다.
  2. RSI가 EMA 이상과 과잉 구매 라인 이상에서 구매하십시오.

적절한 구매 논리를 시장 조건에 따라 선택할 수 있습니다.

이점 분석

이 전략은 선형 회귀 RSI와 EMA의 강점을 결합하여 가격 소음을 효과적으로 필터링하고 더 신뢰할 수있는 거래 신호를 생성합니다.

선형 회귀 RSI는 추세를 더 잘 파악하고 EMA는 전환점을 식별하는 데 도움이됩니다. 둘의 조합은 추세 내에서 평균 회귀 기회를 찾을 수 있습니다.

이 전략은 다른 시장 단계에 적응하기 위해 더 많은 유연성을 위해 두 가지 선택적 인 구매 논리를 제공합니다. 예를 들어, 첫 번째 논리는 강한 트렌드에 사용될 수 있으며 두 번째 논리는 다양한 시장에 더 적합합니다.

위험 분석

이 전략의 주요 위험은 RSI와 EMA 사이의 관계의 잠재적 인 변화이며 이는 잘못된 거래 신호로 이어질 수 있습니다.

또한, RSI와 EMA의 지표로서의 지연성 또한 입력 및 출출에 약간의 지연을 초래할 수 있으며 전환점을 완벽하게 파악하지 못합니다. 이것은 어느 정도의 실질적 위험을 도입합니다.

리스크를 완화하기 위해, RSI와 EMA의 길이와 같은 매개 변수는 둘 사이의 더 나은 조화를 위해 최적화 될 수 있습니다. 또한 단일 거래에서 손실을 제한하기 위해 적절한 위치 사이징이 필요합니다.

개선 방향

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 가장 좋은 매개 변수 조합을 찾기 위해 선형 회귀 RSI와 EMA의 길이를 최적화
  2. 신호 품질 향상을 위해 MACD, 볼링거 밴드 등과 같은 다른 지표를 추가하십시오.
  3. 포지션 크기를 조정하기 위해 변동성 메트릭을 포함
  4. 자동으로 매개 변수를 최적화하기 위해 기계 학습 기술을 활용

결론

이 전략은 선형 회귀 RSI와 EMA를 기반으로 평균 회귀 전략을 설계하여 RSI-EMA 교차를 살펴봄으로써 범위 내에서 회귀 기회를 식별합니다. 또한 다양한 시장에 적응할 수 있는 유연성을 위해 두 가지 선택 구매 논리를 제공합니다. 전반적으로 여러 지표를 결합함으로써 전략은 회귀 기회를 효과적으로 발견 할 수 있습니다. 매개 변수 조정 및 추가 필터로 더 나은 성능을 얻을 수 있습니다.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear RSI")

startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "Month"),   input(1, "Day"),   0, 0)
_testPeriod() => true

//inputs
length = input(defval=200, minval=1, title="LR length")
length2 = input(defval=21, minval=1, title="RSI length")
ema_fast = input(defval=50, minval=1, title="EMA")
lag = 0

overBought = input(50)
overSold = input(50)


//rsi
src = close
Lr = linreg(src, length, lag)
rsi = rsi(Lr, length2)
ema = ema(rsi, ema_fast)

plot(rsi, color = rsi > overBought ? color.green : rsi < overSold ? color.red : color.silver)
plot(overBought, color=color.purple)
plot(overSold, color=color.purple)
plot(ema, color=color.blue)

first_type = input(true, title="Use first logic?")
second_type =  input(false, title="Use second logic?")

long_condition = (first_type ? crossover(rsi, ema) and _testPeriod() : false) or (second_type ? rsi > ema and rsi > overBought and _testPeriod() : false)
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition = crossunder(rsi, ema)
strategy.close('BUY', when=short_condition)

더 많은