이 전략은 암호화폐 시장을 위해 고안되었으며, 초장기 RSI와 RVI 지표의 조합을 사용하여 입시와 출시를 결정합니다.
구체적으로, 긴 엔트리는 RVI가 구매 구역을 표시하고 슈퍼 롱 RSI가 과잉 구매 수준을 넘을 때 발생합니다. RVI가 판매 구역에 들어가면 출입이 발생하고 RSI가 스톱 로스를 위해 과잉 판매 수준을 넘을 때 발생합니다.
이 전략의 장점은 초장 RSI가 윙사우를 피하기 위해 추세를 더 정확하게 결정할 수 있다는 것입니다. RVI는 더 높은 입점 정확성을 위해 구매/판매 압력을 측정하는 데 도움이됩니다. 스톱 로스 방법은 마감량을 줄이기 위해 적시에 손실을 줄일 수 있습니다.
그러나 RSI와 RVI 모두 뒤떨어진 문제를 가지고 있으며 전환점을 신속하게 파악할 수 없습니다. 스파이크에 적응하기 위해 느슨한 매개 변수 또는 이동 스톱이 필요합니다. 또한 RSI는 복잡한 가격 동작을 해독하는 데 제한된 능력을 가지고 있습니다.
요약하자면, 암호화폐 RSI 곡선 추적 전략은 강력한 트렌드 움직임과 결합하면 괜찮은 결과를 얻을 수 있습니다. 그러나 적극적인 위치 관리, 매개 변수 조정 및 모니터링 기본은 거래자가 장기적으로 안정적인 이익을 얻기 위해 여전히 필수적입니다.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © exlux99 strategy(title="Crypto RSI + RVI Strategy", overlay=true, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.03, pyramiding=1 ) Period = input(100, minval=1) BuyZone = input(49, minval=1) SellZone = input(50, minval=1) length=Period MA_s=0.0 pos=0.0 possig=0.0 nU=0.0 nD=0.0 nRes=0.0 ob=SellZone os=BuyZone WiMA(src, length) => MA_s=0.0 MA_s:=(src + nz(MA_s[1] * (length-1)))/length MA_s calc_rsi_volume(fv, length) => up=iff(fv>fv[1],abs(fv-fv[1])*volume,0) dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0) upt=WiMA(up,length) dnt=WiMA(dn,length) 100*(upt/(upt+dnt)) rsi_v = calc_rsi_volume(close, length) // u=plot(ob) // l=plot(os) // fill(u,l,color.red) // plot(50) // plot(rsi_v, color=color.red, linewidth=1) reverse = input(false, title="Trade reverse") xPrice = close StdDev = stdev(xPrice, Period) d = iff(close > close[1], 0, StdDev) u = iff(close > close[1], StdDev, 0) nU := (13 * nz(nU[1],0) + u) / 14 nD := (13 * nz(nD[1],0) + d) / 14 nRes := 100 * nU / (nU + nD) pos := iff(nRes < BuyZone, -1, iff(nRes > SellZone, 1, nz(pos[1], 0))) possig := iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) long=crossover (rsi_v,ob) and (possig == 1) short=crossunder(rsi_v,os) and (possig == -1) g(v, p) => round(v * (pow(10, p))) / pow(10, p) risk = input(100) leverage = input(2.5) c = g((strategy.equity * leverage / open) * (risk / 100), 4) strategy.entry("long",1,c,when=long) strategy.close("long",when=short) //strategy.entry("short",0,when=short) // ------------------------- Strategy Logic --------------------------------- // var longOpeneda = false var shortOpeneda = false var int timeOfBuya = na longCondition= long and not longOpeneda if longCondition longOpeneda := true timeOfBuya := time longExitSignala = short exitLongCondition = longOpeneda[1] and longExitSignala if exitLongCondition longOpeneda := false timeOfBuya := na //plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.color.white) //plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.color.white) sl=input(0.2) tp=input(1.0) strategy.exit("long_tp/sl", "long", profit=close * tp / syminfo.mintick, loss=close * sl / syminfo.mintick, comment='long_tp/sl', alert_message = 'closelong') strategy.exit("short_tp/sl", "short", profit=close * tp / syminfo.mintick, loss=close * sl / syminfo.mintick, comment='short_tp/sl', alert_message = 'closeshort')