이 전략은 현재 시장이 과소매 또는 과소매인지 결정하기 위해 다른 시간 프레임에 걸쳐 RSI 지표의 조합을 사용하여 가격과 이동 평균 사이의 관계를 결합하여 구매 및 판매 신호를 생성합니다. 목표는 통합 중에 수익을 얻기 위해 하락을 구매하고 상승을 판매하는 것입니다.
5분, 15분, 1시간 시간 프레임의 RSI 값을 계산한다. 5분, 15분, 1시간 RSI가 모두 동시에 25 이하일 때, 그것은 과판 상태로 판단되고 구매 신호를 생성한다. 5분, 15분, 1시간 RSI가 모두 동시에 75 이상일 때, 그것은 과반 상태로 판단되고 판매 신호를 생성한다.
21일 이동 평균을 깨는 것도 거래 신호로 작용합니다. 가격이 이동 평균 이하라면 구매 신호가 생성됩니다. 가격이 이동 평균 이상이라면 판매 신호가 생성됩니다.
현재 포지션을 기반으로 초기 거래 크기와 피라미드 규칙이 설정됩니다. 첫 번째 항목에 2 개의 계약, 그리고 포지션이 2 개의 계약에 도달 할 때까지 매번 1 개의 계약을 추가합니다.
손실이 3%에 도달하면 스톱 로스가 작동합니다. 이익이 1%에 도달하면 이익을 취합니다.
여러 시간 프레임에 걸쳐 RSI 지표를 사용하여 과반 구매 및 과반 판매 조건을 결정하면 신호 신뢰성이 향상됩니다.
이동평균을 결합하면 추가적인 거래 신호가 발생하고 거래 기회가 확대됩니다.
포지션 사이즈 컨트롤과 수익/손실 비율을 설정하면 스톱 로스와 영업이익을 관리할 수 있습니다.
고정된 양으로 확장하면 수익 잠재력이 커집니다.
RSI 분산 위험. RSI가 뒤집어지기 전에 RSI가 과반 구매 또는 과반 판매 한계까지 도달 한 후에도 가격이 추세를 계속할 수 있습니다. RSI 신호를 맹목적으로 따르는 것은 손실로 이어질 수 있습니다.
이동 평균 거래 신호는 오해의 소지가 있습니다. 이동 평균은 거대한 가격 변동 중에 가격 변화를 적시에 추적하지 못합니다.
부적절한 포지션 크기와 수익/손실 비율 설정은 부적절한 위험 통제로 이어집니다.
피라미드 조건은 손실을 확대하지 않도록 합리적으로 설정해야합니다.
RSI 매개 변수를 조정하고 다른 기간 조합을 테스트하여 더 신뢰할 수 있는 과잉 구매/ 과잉 판매 신호를 찾습니다.
다른 이동 평균을 보조 거래 신호 또는 다른 기술적 지표로 테스트합니다.
보다 과학적인 위험 관리 메커니즘을 구축하기 위해 포지션 사이즈 및 스톱 로스/프로피트 취득 규칙을 최적화합니다.
피라미드 조건을 최적화하여 증대 손실을 방지하십시오. 고정량 확장 대신 기하급수적 확장을 고려하십시오.
이 전략은 트렌드 잠재력을 결정하고 더 높은 승률을 달성하기 위해 여러 시간 프레임에 걸쳐 RSI를 사용합니다. 거래 기회를 확장하기 위해 이동 평균과 함께 추가 신호가 생성됩니다. 위험은 포지션 사이징, 스톱 로스/프로피트 취득 및 고정 양 피라미딩을 통해 관리됩니다. 전반적으로이 전략은 트렌드 및 평균 반전 지표를 결합하고, 트렌드 다음과 바닥 선택 논리를 모두 포함하며 통합 중에 효과적입니다. 더 일관된 성능을 위해 더 강력한 위험 통제를 구축하기 위해 추가 테스트와 최적화가 필요합니다.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1) len =14 Initial_Trade_Size = 2 up = rma(max(change(close), 0), len) down = rma(-min(change(close), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) RSI_1h = request.security(syminfo.tickerid, "60", rsi) RSI_3h = request.security(syminfo.tickerid, "180", rsi) RSI_15m = request.security(syminfo.tickerid, "15", rsi) RSI_5m = request.security(syminfo.tickerid, "5", rsi) RSI_1m = request.security(syminfo.tickerid, "1", rsi) ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21) ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21) //(RSI_3h<=25) and (RSI_1h<=25) and (RSI_15m<=25) and Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false //alertcondition(Positive, title='POS', message='POS') //plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny) Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false //alertcondition(Negative, title='NEG', message='NEG') //plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny) Positive and Negative and lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size //lastordersize =1 // and ((ema21_15-low)/ema21_15) > 0.077 //Adding to position rules if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03)) if(strategy.position_avg_price > close and strategy.position_size > 0) strategy.entry("Add", strategy.long , qty = lastordersize , when = true) if(strategy.position_avg_price < close and strategy.position_size < 0) strategy.entry("Add", strategy.short, qty = lastordersize , when = true) if (strategy.position_size == 0) if (Positive or ((ema21_5-low)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true) // and ((high-ema21_15)/ema21_15) > 0.077 if (Negative or ((high-ema21_5)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true) //lastordersize := lastordersize * 2 //or (strategy.openprofit / abs(strategy.position_size * close))>=0.01 if(cross(ema21_5, high) or cross(ema21_5, low)) strategy.close_all()