전략 (RSI)

RSI를 활용한 전략

전략설명
  • RSI가 30이하에서 RSI가 RSI의 이동평균선을 골든크로스할 경우 매수.
  • RSI가 80보다 큰지점으로 부터 80미만이된 지점에서 익절.
  • 과거 10일간의 최저치를 깰 경우 손절.

[Pine스크립트]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
strategy(title = "RSI전략샘플")  
// rsi일수  
rsiDays = input(type = integer, title = "RSI일수", defval = 10, minval = 3, maxval = 20, step = 1)    
// 트레일링 스탑 일수  
TSDays = input(type = integer, title = "TS일수", defval = 10, minval = 3, maxval = 200, step = 1)   
// 매수시 사용할 RSI값  
EntryRSIValue = input(type = integer, title = "RSI매수조건", defval = 30, minval = 10, maxval = 50, step = 10)   
// 매도시 사용할 RSI값  
ExitRSIValue = input(type = integer, title = "RSI매도조건", defval = 80, minval = 50, maxval = 100, step = 10)   
  
// rsi계산  
rs = rsi(close, rsiDays)  
rsMA = sma(rs, rsiDays)  
// rsi표시  
plot(rs, color=black)  
plot(rsMA, color = gray)  
hline(EntryRSIValue, color=blue, linestyle=dashed, linewidth=1)  
hline(ExitRSIValue, color=red, linestyle=dashed, linewidth=1)  
  
// rsi30이하의 지점에서 rsi가 rsiMA를 골든크로스할 경우 매수  
isEntryPoint = crossover(rs, rsMA) and rs[1] < EntryRSIValue and rsMA[1] < EntryRSIValue  
strategy.entry("long", true, 1, when = isEntryPoint)  
  
// 최저치 구하기  
Lowest(TSDays) => ser = lowest(low, TSDays)  
lowest = Lowest(TSDays)  
  
// rsi가70이상이면 익절 또는 트레일링 스탑에 걸리면 손절  
isExitPoint = crossunder(rs, ExitRSIValue) or (low == lowest)  
strategy.close("long", when = isExitPoint)