다중 시간 프레임 RSI 및 확률적 전략


생성 날짜: 2024-02-21 15:56:37 마지막으로 수정됨: 2024-02-21 15:56:37
복사: 1 클릭수: 511
1
집중하다
1166
수행원

다중 시간 프레임 RSI 및 확률적 전략

개요

다중 시간 프레임 RSI와 무작위 지표 전략은 RSI와 무작위 지표의 조합 지표를 사용하여 다중 시간 프레임에서 시장 과매매를 판단하는 전략이다. 이 전략은 동시에 4 시간 프레임의 RSI와 무작위 지표를 결합하여 전체 시장 움직임을 판단하고 과매매를 판단하는 평균 값을 사용하여 각 시간 프레임 지표의 장점을 발휘한다.

전략 원칙

1. RSI 지표

RSI 지표는 강력한 과매매 지표로, 일정 시간 동안 주식의 상승과 하락을 기반으로 계산한다. RSI 값은 0에서 100 사이로 변동한다. 일반적으로 RSI가 70보다 크면 과매매를 나타내고, 30보다 작으면 과매매를 나타낸다.

이 전략은 14개의 RSI 지표를 사용하며, 1개월, 1일, 4시간, 1시간의 4개의 시간 프레임의 RSI 값을 얻습니다.

2. 무작위 지표 %K

무작위 지표 %K는 시장이 과매도 또는 과매도 범위를 나타내는 지표이며, 값은 0에서 100 사이로 변동한다. 일반적으로, 무작위 지표는 80보다 큰 것은 과매도, 20보다 작은 것은 과매도이다.

이 전략에서, 무작위 지표 %K의 길이는 14, 부드러운 것은 3, 마찬가지로 위의 4 시간 프레임의 값을 얻는다.

3. 평균 포트폴리오

전략의 핵심은 위의 두 지표의 4 시간 프레임의 평균값을 계산하여 각 시간 프레임의 장점을 발휘하여 전체 시장의 움직임을 판단하는 것입니다. 구체적인 계산 공식은 다음과 같습니다:

RSI 평균값 = (RSI 달선 + RSI 일선 + RSI 4시간 + RSI 1시간) / 4

랜덤 지표의 평균값 = (랜덤 지표 달선 + 랜덤 지표 일선 + 랜덤 지표 4시간 + 랜덤 지표 1시간) / 4

4. 거래 신호

RSI 평균값이 30보다 작고, 랜덤 지표 평균값이 20보다 작으면 더 많이 하고, RSI 평균값이 70보다 크고, 랜덤 지표 평균값이 80보다 크면 더 많이 한다.

더 많은 것을 한 후, 임의의 지표 평균값이 70 이상이고 RSI 평균값이 50 이상일 때 평소 위치; 임의의 지표 평균값이 30 이상이고 RSI 평균값이 50 이상일 때 평소 위치.

우위 분석

이 전략의 가장 큰 장점은 두 지표와 여러 시간 프레임이 동시에 결합되어 거래 신호의 신뢰성을 크게 향상시키고 가짜 신호를 최대한 방지 할 수 있다는 것입니다. 구체적인 장점은 다음과 같습니다.

  1. RSI 지표와 무작위 지표는 상호 검증된다. 단일 지표에만 의존하면 가짜 신호가 발생하기 쉽지만, 이 전략은 두 지표를 조합하여 신호의 정확성을 높일 수 있다.

  2. 다중 시간 프레임 분석은 판단의 정확성을 향상시킬 수 있다. 예를 들어, 달선과 태양선은 오버 바이를 나타내고 있지만 4시간과 1시간은 완전히 오버 바이가 되지 않는 것으로, 이는 추세가 계속될 수 있음을 나타낸다. 모든 시간 프레임이 일치하면 신호는 더 신뢰할 수 있다.

  3. 구조적 전환점을 더 명확하게 판단한다. 여러 시간 프레임에서 동시적으로 중요한 지원/저항의 돌파구를 보는 것은 현재 추세 전환을 판단할 수 있다.

  4. 자동 계산 지표 평균 값 간소화 작업. 수동 계산이 필요하지 않고, 코드가 자동으로 데이터 추출을 완료하고, 지표 계산 및 평균을 구하여 작업량을 줄인다.

위험 분석

이 전략의 주요 위험은 모든 기술적 분석 전략과 마찬가지로, 완전히 조작되고 가짜 신호를 생성할 가능성을 피할 수 없다는 것입니다. 주요 위험은 다음과 같습니다:

  1. 트렌드 단기 반전이 수축으로 이어진다. 예를 들어, 다수 포지션 기간 동안, 가격 단선이 하향으로 지지점을 돌파한 후 다시 부진한다. 이 때 전략의 평소 포지션 논리에 따라 즉각적인 손실이 필요하지만, 단기 손실이 발생할 수 있다.

  2. 핵심 지지/저항 지점이 깨지면 추적 스톱 손실이 발생합니다. 핵심 지지/저항 지점이 깨지면 원래의 스톱 손실 가격이 직접 뚫려 더 큰 손실을 초래할 수 있습니다.

  3. 시간 프레임 설정이 잘못되면 판단 오류가 발생합니다. 시간 프레임이 너무 길거나 너무 짧으면 지표 판단이 오차될 수 있습니다.

  4. 지표 분산은 Dunkirk 효과로 이어진다. 즉, 더 높은 시간 프레임의 지표는 과매매를 나타내고, 더 낮은 시간 프레임의 지표는 과매매를 나타내고, 평균 지표는 실제 상황을 반영하지 못한다.

위험을 대응하는 해결책은 다음과 같습니다: 손해 중지 전략을 최적화, 동적 지원 / 저항 지점을 추적, 시간 프레임 매개 변수를 조정하고 필터링 메커니즘을 추가하는 등.

최적화 방향

위와 같은 위험을 고려하여, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 손실을 막는 메커니즘을 최적화하여 손실을 추적하고 분량으로 중단할 수 있습니다. 이것은 수익을 보장하면서 단독 손실 위험을 제어 할 수 있습니다.

  2. 쿼터 라인을 추가하는 것과 같은 더 높은 시간 프레임. 이것은 더 큰 수준의 트렌드 필터링을 사용하여 잘못된 신호를 사용할 수 있습니다. 지표가 일치하지 않을 때 더 높은 시간 프레임에 우선 순위를 부여하십시오.

  3. 트래픽의 다중 공중 검증을 증가 시키십시오. 트래픽의 변화를 합성하여 하위 기절과 상위 기절을 판단하여 좀비 이동의 오해를 피하십시오.

  4. 최적화된 입시 시간. 중요한 역사적인 지지/저항 근처에서 돌파 입시를 기다리거나, 최적의 리콜 구매 지점을 기다리면 된다.

  5. 적응 스톱 손실을 증가시킨다. 최근 변동률과 ATR에 따라 동적 스톱 손실을 계산하고 조정할 수 있다.

요약하다

다중 시간 프레임 RSI와 무작위 지표 전략은 RSI 지표와 무작위 지표를 조합하여 여러 시간 프레임에서 시장을 판단하는 오버 바이 오버 시드 범위를 판단하여 명확하고 신뢰할 수있는 거래 전략입니다. 그것의 가장 큰 장점은 지표와 시간 프레임의 조합이 서로를 검증하는 것이며, 교착과 가짜 신호의 위험을 극대화 할 수 있습니다. 물론이 전략은 기술 분석 전략과 유사한 위험이 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////// MTF Stochastic & RSI Strategy 🚥 ©️ bykzis /////////////////////////////////////////
//

// *** Inspired by "Binance CHOP Dashboard" from @Cazimiro and "RSI MTF Table" from @mobester16 *** and LOT OF COPY of Indicator-Jones MTF Scanner
// 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//@version=5
strategy('MTF RSI & STOCH Strategy🚥 by kzi', overlay=false,initial_capital=100, currency=currency.USD, commission_value=0.01, commission_type=strategy.commission.percent)


// Pair list
var string GRP1       = '══════════    General    ══════════'
overbought = input.int(80, 'Overbought Level', minval=1, group=GRP1)
oversold = input.int(20, 'Oversold Level', minval=1, group=GRP1)


/// Timeframes
var string GRP2       = '══════════   Timeframes   ══════════'
timeframe1 = input.timeframe(title="Timeframe 1", defval="W", group=GRP2)
timeframe2 = input.timeframe(title="Timeframe 2", defval="D", group=GRP2)
timeframe3 = input.timeframe(title="Timeframe 3", defval="240", group=GRP2)
timeframe4 = input.timeframe(title="Timeframe 4", defval="60", group=GRP2)

// RSI settings
var string GRP3       = '══════════   RSI settings   ══════════'
rsiLength = input.int(14, minval=1, title='RSI length', group=GRP3)
rsiSource = input(close, 'RSI Source', group=GRP3)
rsioverbought = input.int(70, 'RSI Overbought Level', minval=1, group=GRP3)
rsioversold = input.int(30, 'RSI Oversold Level', minval=1, group=GRP3)


/// Get RSI values of each timeframe /////////////////////////////////////////////////////
rsi = ta.rsi(rsiSource, rsiLength)
callRSI(id,timeframe) =>
    rsiValue = request.security(id, str.tostring(timeframe), rsi, gaps=barmerge.gaps_off)
    rsiValue

RSI_TF1 = callRSI(syminfo.tickerid, timeframe1)
RSI_TF2 = callRSI(syminfo.tickerid, timeframe2)
RSI_TF3 = callRSI(syminfo.tickerid, timeframe3)
RSI_TF4 = callRSI(syminfo.tickerid, timeframe4)




/////// Calculate Averages /////////////////////////////////////////////////////////////////
calcAVG(valueTF1, valueTF2, valueTF3, valueTF4) =>
    math.round((valueTF1 + valueTF2 + valueTF3 + valueTF4) / 4, 2)

AVG=calcAVG(RSI_TF1, RSI_TF2, RSI_TF3, RSI_TF4)



// Stochastic settings
var string GRP4       = '══════════   Stochastic settings   ══════════'
periodK = input.int(14, '%K length', minval=1, group=GRP4)
smoothK = input.int(3, 'Smooth K', minval=1, group=GRP4)
stochSource = input(close, 'Stochastic Source', group=GRP4)
stochoverbought = input.int(70, 'Stochastic Overbought Level', minval=1, group=GRP4)
stochoversold = input.int(30, 'Stochastic Oversold Level', minval=1, group=GRP4)


/// Get Stochastic values of each timeframe ////////////////////////////////////////////////
stoch = ta.sma(ta.stoch(stochSource, high, low, periodK), smoothK)
getStochastic(id,timeframe) =>
    stochValue = request.security(id, str.tostring(timeframe), stoch, gaps=barmerge.gaps_off)
    stochValue

Stoch_TF1 = getStochastic(syminfo.tickerid, timeframe1)
Stoch_TF2 = getStochastic(syminfo.tickerid, timeframe2)
Stoch_TF3 = getStochastic(syminfo.tickerid, timeframe3)
Stoch_TF4 = getStochastic(syminfo.tickerid, timeframe4)


AVG_STOCH=calcAVG(Stoch_TF1, Stoch_TF2, Stoch_TF3, Stoch_TF4)


plot(AVG, color = color.blue, title='RSI')
plot(AVG_STOCH, color = color.yellow,title='STOCH')
hline(rsioverbought,color=color.red)
hline(rsioversold, color=color.lime)
hline(50, color=color.white)

//============ signal Generator ==================================//

if AVG <= rsioversold and AVG_STOCH <=stochoversold 
    strategy.entry('Buy_Long', strategy.long)

    
strategy.close("Buy_Long",when=(AVG_STOCH >=70 and AVG >=50 and close >=strategy.position_avg_price),comment="Long_OK")

if AVG >=rsioverbought and AVG_STOCH >=stochoverbought
    strategy.entry('Buy_Short', strategy.short)


strategy.close("Buy_Short",when=(AVG_STOCH <=30 and AVG <=50 and close <=strategy.position_avg_price),comment="Short_OK")


///////////////////////////////////////////////////////////////////////////////////////////