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


생성 날짜: 2024-01-24 11:35:19 마지막으로 수정됨: 2024-01-24 11:35:19
복사: 0 클릭수: 770
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

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

개요

이 전략은 선형 회귀 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)