암호화폐 RSI 곡선 추적 전략

저자:차오장, 날짜: 2023-09-11 17:24:59
태그:

이 전략은 암호화폐 시장을 위해 고안되었으며, 초장기 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')


더 많은