RSI 이동 평균 교차 전략


생성 날짜: 2023-10-25 11:46:49 마지막으로 수정됨: 2023-10-25 11:46:49
복사: 2 클릭수: 1164
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

RSI 이동 평균 교차 전략

개요

이 전략은 평행선 교차의 원리를 사용하여 RSI 지표와 결합하여 트렌드 방향을 판단하고 구매 및 판매 작업을 수행합니다.

전략 원칙

이 전략은 3개의 서로 다른 주기의 EMA 평균선을 사용한다. 즉, 빠른 선, 중간 선, 그리고 느린 선이다. 빠른 선에서 중간 선을 통과할 때 구매 신호로 판단한다. 빠른 선 아래 중간 선을 통과할 때 판매 신호로 판단한다.

이 전략은 동시에 RSI 지표를 사용하여 과매매를 판단합니다. RSI는 한 주기 동안의 평균 상승과 평균 하락의 비율을 통해 자산의 상대적인 강점을 보여줍니다. RSI가 설정된 과매선을 초과하면 과매매 상태라고 간주되며, RSI가 설정된 과매선을 초과하면 과매매 상태라고 간주됩니다.

이 전략의 조건은 다음과 같습니다.

  1. 가격에 대해선 단선, 중간선, 느린선으로
  2. RSI 상에서 설정된 오버셀 라인

판매 조건은 다음과 같습니다:

  1. 중간선 아래로
  2. RSI 아래의 중간선

평균선으로 큰 트렌드 방향을 판단하고 RSI와 결합하여 단기 오버 바이 오버 소드를 발견하기 위해, 이 전략은 트렌드 트레이딩과 반전 트레이딩의 전략을 사용한다.

우위 분석

이 전략은 평균선 교차와 RSI 지표를 결합하여 트렌드를 판단하고 오버 바이 오버 셀 수 있으며, 가짜 돌파구로 인한 일부 노이즈 거래를 필터링 할 수 있습니다. 세 개의 평균선을 사용하여 트렌드 상태를 더 명확하게 판단 할 수 있습니다.

RSI 지표의 설정은 또한 이 전략이 오버 바이 오버 셀 영역에서 우수한 입수 및 출구 시기를 잡을 수 있도록 해줍니다.

이 전략은 거래비용도 고려하고, 가격이 3개의 평균선을 넘었을 때만 진입함으로써 피당하는 것을 피할 수 있다.

위험 분석

이 전략은 여전히 재조합의 위험을 가지고 있습니다. 실물 시장 환경의 변화는 새로운 시장 상황에 대한 변수가 더 이상 적응되지 못하게 할 수 있습니다.

위기 상황에서 이 전략은 잘못된 신호를 발생시키며 손실을 초래할 수 있다.

RSI 파라미터의 설정은 다른 시장에 따라 조정이 필요합니다. 파라미터의 설정이 잘못되면 놓친 기회를 만들거나 거짓 신호를 생성 할 수 있습니다.

최적화 방향

  1. 더 긴 시간 주기의 차트에서 신호를 다시 확인하는 것을 고려할 수 있으며, 단기 시장 소음으로 방해되는 것을 피할 수 있다.

  2. 시장에 진입하기 전에 실험할 수 있으며, 브레이크를 기다리거나 평행선으로 다시 진입하여 신호를 추가로 검증한다.

  3. 다른 지표와 결합할 수 있다. 예를 들어 MACD, 브린 밴드 등과 같이, 복합 지표의 신호를 조합하여 Entry 히트율을 높인다.

  4. 기계 학습 알고리즘을 사용하여 최적화 변수를 보조하여 전략을 더 적응시킬 수 있습니다.

  5. 트렌드가 불확실할 때 적당히 손실을 막는 전략도 고려할 수 있다.

요약하다

이 전략은 평평선 교차와 RSI 지표를 통합하여 추세를 판단하면서 단기 트렌드 반전 기회를 발견한다. 트렌드 거래와 반전 거래의 장점을 효과적으로 활용하여 장기적으로 좋은 방향으로 유지하면서 단선 기회를 잡을 수 있다. 이 전략에는 약간의 최적화 공간이 있으며, 신호, 최적화 변수, 스톱 손실 등을 추가하여 전략의 안정성을 높일 수 있다.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © chadsadachai

//@version=5
strategy("EMA Cross V1", overlay= true)

//rsi
length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50)
overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40)
overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100)
mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60)
price = close
vrsi = ta.rsi(price, length)
co = vrsi >= mLine and vrsi < overB 
cu = ta.crossunder(vrsi, overB)
//ema
F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50)
M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100)
S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200)
emaF = ta.ema(price , F)
emaM = ta.ema(price , M)
emaS = ta.ema(price , S)

//plot
plot(emaF , color = color.green , linewidth=1)
plot(emaM , color = color.yellow , linewidth=1)
plot(emaS , color = color.red , linewidth=1)

//Time Stamp
start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0)
end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0)
// years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025)
// months = input.int(title = "Month" , defval=1 , minval=1, maxval=12)
// days = input.int(title = "Day" , defval=1 , minval=1, maxval=31)

//longCondition Default
// longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow)  EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow
// longCondition3 = price >= EMA_Medium and price > EMA_Slow
// longCondition2 = vrsi >= overSold and vrsi <= overBought 

//longCondition & shortCondition ETHUSD
// 1.price > emaF > emaM > emaS
// 2.rsi overcross overS
longC1 = price > emaF and price > emaM and price > emaS 
// longC1 = ta.crossover(emaF, emaM)
longC2 = if longC1
    co
// shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu
// shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine

// exitLong Condition
// 1.price < emaF < emaM < emaS
// 2.rsi overcross mediumLine
exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF
exitLong2 = ta.crossunder(vrsi,mLine)
//exitLong3 = price < emaM
//strategy.entry
if time >=start and time <=end
    strategy.entry("Buy", strategy.long , when = longC1 and longC2)

// if(exitLong1 or exitLong2)
strategy.close("Buy" , when = exitLong1 or exitLong2)
    
// exitShort1 = EMA_Fast > EMA_Medium
// //exitShort2 = ta.crossover(vrsi , mediumLine) 
// exitShort2 = ta.crossunder (vrsi,mediumLine)
// strategy.close("Short" , when = exitShort1 or exitShort2)
// //shortCondition = cu


// //if (shortCondition1 and shortCondition2)
//     //strategy.entry("My Short Entry Id", strategy.short)