상대적 강도 지수 장기/단기 전략

저자:차오장, 날짜: 2023-11-16 17:06:14
태그:

img

전반적인 설명

이 전략은 암호화폐의 RSI 지표를 암호화폐 시장 지표의 RSI 지표와 비교하여 암호화폐의 상대적 가치를 암호화폐 시장에 비해 판단하여 거래 신호를 생성합니다.

전략 논리

이 전략은 먼저 전체 시가총액, 비트코인을 제외한 전체 시가총액, 다른 코인의 시가총액 등 암호화폐 시장 지수를 선택할 수 있다. 또한 암호화폐 지수의 더 높은 시간 프레임을 선택하여 매일로 기본 설정한다. 그런 다음 선택된 암호화폐의 RSI와 암호화폐 지수의 RSI를 계산하고 그 비율에 따라 상대적 강도 지수를 생성한다. 상대적 강도 지수가 지정된 매개 변수를 넘을 때 구매 신호가 생성된다. 그 아래를 넘을 때 판매 신호가 생성된다.

핵심 논리는 암호화폐의 RSI가 암호화폐 지수보다 강할 때 동전이 시장에 비해 상대적으로 과부가가치되고, 과부가가치 될 가능성이 있다는 것을 의미합니다. 동전의 RSI가 시장 지수보다 약할 때 동전이 시장에 비해 상대적으로 과부가가치되고, 과부가가치 될 가능성이 있다는 것을 의미합니다. 상대적 강도 지수는 더 정확한 평가 판단을 허용합니다.

이점 분석

이 전략의 가장 큰 장점은 상대적 강도 지수를 사용한다는 것입니다. 이는 암호화폐에 대한 보다 정확한 평가로 결정하기 위해 단일 동전의 기술적 지표에만 의존하는 대신, 모든 것을 고립적으로 보는 함정을 피하는 것입니다.

상대적 강도 지수는 전체 시장 환경의 개별 동전에 미치는 영향을 고려하고 시장 회전 리듬과 부문 회전을 파악하고 시장에서 가치있는 동전을 발굴 할 수 있습니다.

또한 전략은 다양한 시장 환경에 최적화되어 전략의 효과를 보장할 수 있는 여러 인덱스 선택을 제공합니다.

위험 분석

이 전략의 주요 위험은 상대 강도 지수가 가치 평가 도구일 뿐이고, 개별 동전의 기술적 패턴으로 인한 거래 위험을 완전히 피할 수 없다는 것입니다.

예를 들어, 동전이 명백한 헤드 앤 어깨 상위 반전 패턴에 들어갔고 시장 구조가 바뀌었다면 상대적 강도에 의존하는 구매 신호는 손실로 이어질 수 있습니다.

따라서 전략은 각 암호화폐 자체의 기술적 패턴을 결합하여 중요한 기술적 지점에서의 불리한 거래를 피해야 합니다.

또 다른 위험은 선택된 인덱스가 부적절하고 암호화폐와의 상관 관계가 낮으면 상대 강도 인덱스의 지표력이 크게 손상 될 것입니다. 이것은 다른 동전과 시장 인덱스의 상관관계에 따라 인덱스 선택을 최적화해야합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 스톱 로스 전략을 추가하여 가격 반전 시 적시에 손실을 줄이십시오.

  2. 인덱스 선택을 최적화하고, 상관관계를 높이기 위해 다른 코인들에 대한 다른 인덱스를 일치시킵니다.

  3. 신호 신뢰성을 높이기 위해 매일 신호를 4시간 신호로 확인하는 것과 같은 여러 시간 프레임 조합을 추가합니다.

  4. 기계 학습 알고리즘을 추가하여 고정 매개 변수를 사용하는 대신 상대 강도 지수의 임계치를 적응적으로 결정합니다.

  5. 더 포괄적인 평가 시스템을 형성하기 위해 감정 분석, 근본 분석과 같은 다른 지표를 포함합니다.

결론

상대적 강도 지수 전략은 시장 지수와 비교하여 암호화폐의 상대적 가치를 판단하고 거래 신호를 생성합니다. 이 전략의 장점은 시장 분석 차원을 통합하고 시장 리듬을 포착하는 데 있습니다. 그러나 성능을 향상시키기 위해 스톱 로스, 시간 프레임 조합, 적응적 임계 등 최적화가 필요한 위험이 있습니다. 제대로 구현되면이 전략은 암호화 알고리즘 거래에서 중요한 역할을 할 수 있습니다.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('RSI correlation with cryptoindices [strategy version]', overlay=false)

// Testing Start dates
testStartYear = input(2016, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

len = input(4, title='length of rsi comparison')
correlationcrossover = input(1, title='correlation crossover')
IndexSwitch = input.string('CRYPTOCAP:TOTAL2', title='Index selection', options=['CRYPTOCAP:TOTAL2', 'CRYPTOCAP:TOTAL', 'CRYPTOCAP:OTHERS', 'CRYPTOCAP:USDT', 'CRYPTOINDEX:CIX100', 'CRYPTOCAP:BTC.D', 'CRYPTOCAP:BTC'])
IndexHTF = input.string('120', title='higher time frame reference index', options=['1', '2', '5', '10', '15', '30', '45', '60', '90', '120', '150', '240', '360', '720', 'D', '3D', 'W', 'M'])
switchColor = input(true, 'Color Hull according to trend?')
ref = request.security(IndexSwitch, IndexHTF, close[1], lookahead=barmerge.lookahead_on)
RSI_ref = ta.rsi(ref, len)
RSI_close = ta.rsi(close, len)
relative = RSI_ref / RSI_close
plot(relative, color=color.new(color.blue, 0))
long = ta.crossover(relative, correlationcrossover)
short = ta.crossunder(relative, correlationcrossover)
corr = plot(correlationcrossover, color=color.new(color.green, 0), linewidth=1)
hullColor = switchColor ? relative > correlationcrossover ? #00ff00 : #ff0000 : #ff9800

//PLOT
///< Frame
Fi1 = plot(relative, title='relative', color=hullColor, linewidth=1, transp=50)
fill(Fi1, corr, title='Band Filler', color=hullColor, transp=50)

if long and testPeriod()
    strategy.entry("long", strategy.long)
    
if short and testPeriod()
    strategy.entry("long", strategy.short)

// alertcondition(long, title='long', message='long')
// alertcondition(short, title='short', message='short')



더 많은