이 전략은 RSI 지표에 기반한 간단한 트렌드 다음 거래 시스템을 설계하고, RSI를 통해 시장 트렌드 방향을 결정하고 특정 날짜 범위 내에서 자동화된 긴 및 짧은 포지션을 구현할 수 있습니다.
이 전략은 시장 추세를 결정하기 위해 RSI 지표를 사용하고, 과잉 구매 및 과잉 판매 구역을 확인하기 위해 볼링거 밴드를 사용합니다.
우선, RSI 값은 계산된다. 볼링거 밴드의 상부 및 하부 대역은 이동 평균과 RSI의 표준 편차를 기반으로 계산된다. RSI는 0-1 사이 변동하며, 볼링거 밴드는 표준 편차를 통해 과반 구매 및 과반 판매 구역을 식별한다. RSI가 상위 대역보다 높을 때, 그것은 과반 구매 구역이며, 하위 대역보다 낮을 때, 그것은 과반 판매 구역이다.
RSI가 하단에서 상단으로 돌파할 때 구매 신호가 생성됩니다. RSI가 상단에서 하단으로 돌파할 때 트렌드를 따라 판매 신호가 생성됩니다. 시장에 진출한 후 지정된 날짜 범위의 끝에서 포지션이 닫히기 전까지는 스톱 로스 또는 수익을 취하지 않습니다.
전략은 간단하고 효과적으로 RSI를 사용하여 트렌드 방향을 결정하고 볼링거 밴드를 사용하여 특정 거래 기회를 식별합니다. 날짜 범위를 정의함으로써 불필요한 위험을 피할 수 있습니다.
최적화 방향:
요약하면, 이것은 매우 간단하고 직접적인 트렌드 다음 전략입니다. 트렌드를 결정하기 위해 RSI를 사용하여 신호를 필터하고 거래 날짜 범위를 정의하여 효과적으로 트렌드를 추적하고 위험을 제어 할 수 있습니다. 그러나 전략은 더 이상 최적화 될 수 있습니다. 간단하고 효과적인 유지하면서, 중지 손실, 매개 변수 최적화 및 신호 필터링과 같은 방법을 추가하여 라이브 거래에 더 적합 할 수 있습니다.
/*backtest start: 2022-10-19 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Gidra //2018 //@version=2 strategy(title = "Gidra's RSI or MFI Strategy v0.1", shorttitle = "Gidra's RSI or MFI v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 1) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") src = input(close, title="source") lengthRSI = input(14, title="RSI or MFI length") // RSI %B useRSI = input(true, title="use RSI or MFI") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day") //MFI upper = sum(volume * (change(src) <= 0 ? 0 : src), lengthRSI) lower = sum(volume * (change(src) >= 0 ? 0 : src), lengthRSI) mf = rsi(upper, lower) //RSI rsi = useRSI?rsi(src, lengthRSI): mf // %B length = input(50, minval=1, title="BB length") mult = input(1.618, minval=0.001, maxval=50) basis = sma(rsi, length) dev = mult * stdev(rsi, length) upperr = basis + dev lowerr = basis - dev bbr = (rsi - lowerr)/(upperr - lowerr) plot(bbr, color=black, transp=0, linewidth=2) // band1 = hline(1, color=white, linestyle=dashed) // band0 = hline(0, color=white, linestyle=dashed) // fill(band1, band0, color=teal) hline(0.5, color=white) //Signals up = bbr >= 0 and bbr[1] < 0 dn = bbr <= 1 and bbr[1] > 1 //exit = ((bbr[1] < 0.5 and bbr >= 0.5) or (bbr[1] > 0.5 and bbr <= 0.5)) lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59)// or exit strategy.close_all()