빠른 RSI 및 촛불 색상 기반의 역전 전략

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

이 전략은 Fast RSI와 촛불 색상 기반의 역전 전략이라고 불립니다. 이는 빠른 RSI를 사용하여 과소매/ 과소매 수준을 판단하고 촛불 색상을 사용하여 트렌드 방향을 결정하며, 둘 다 동시 신호를 내릴 때 역전 거래를합니다.

빠른 RSI는 더 작은 매개 변수를 가지고 있으며 가격 과잉 구매/ 과잉 판매 상태를 더 빠르게 감지 할 수 있습니다. 30 이하의 RSI는 과잉 판매 상태를 시사하고, 70 이상은 과잉 구매입니다.

촛불의 색상은 흰색이 열리기에 가까운 가격을 가리키고 녹색은 상승하고 빨간색은 하락하는 가격을 나타냅니다.

거래의 논리는 다음과 같습니다.

빠른 RSI가 과잉 판매를 표시하고 4 개의 연속적인 빨간 촛불이 나타나면, 그것은 긴 거리에 대한 강력한 반전 신호로 간주됩니다.

급격한 RSI가 과잉 매입되고 4개의 녹색 촛불이 나타나면, 그것은 단위로 갈 수있는 강력한 역전 기회를 신호합니다.

이미 긴 포지션을 보유하고 있다면 녹색 촛불이 표시될 때 종료합니다. 짧은 포지션을 보유하고 있다면 빨간 촛불이 표시될 때 종료합니다.

이 전략의 장점은 반전 신호를 정확하게 결정하기 위해 지표 조합을 사용하는 것입니다. 그러나 무거운 포지션 사이즈링으로 인해 엄격한 화폐 관리가 필요합니다. 스톱 손실도 필수적입니다.

요약하자면, 반전 거래는 타이밍을 정확하게 식별하는 지표에 의존합니다. RSI와 촛불 정보를 합리적으로 적용하면 전략 성능을 향상시킬 수 있습니다. 그러나 단일 전략은 완벽하지 않습니다. 거래자는 여전히 유연한 거래 사고 방식을 유지해야합니다.


/*backtest
start: 2022-09-06 00:00:00
end: 2023-01-20 00:00:00
period: 4d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Hundred Strategy v1.0", shorttitle = "Hundred str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lev = input(5, defval = 5, minval = 1, maxval = 100, title = "leverage")
onlyprofit = input(true, defval = true, title = "Only Profit")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
cbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Color Bars")
fromyear = input(1900, defval = 1900, 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")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Signals
long = strategy.position_size >= 0
short = strategy.position_size <= 0
up = sma(bar, cbars) == -1 and long and dnrsi
dn = sma(bar, cbars) == 1 and short and uprsi
profit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) or onlyprofit == false
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and profit
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

더 많은