RSI 오시레이터 거북이 거래 단기 전략

저자:차오장, 날짜: 2023-11-14 15:59:25
태그:

img

전반적인 설명

이것은 거북이 거래 규칙을 기반으로 한 RSI 지표를 사용하는 단기 거래 전략입니다. RSI가 과잉 구매 또는 과잉 판매 구역에 진입 할 때 RSI 지표와 윌리엄스 알리거터 지표를 결합하여 역 트렌드 거래를합니다. 비교적 보수적인 단기 거래 전략입니다.

전략 논리

이 전략은 주로 다음과 같은 원칙에 기초합니다.

  1. 거북이 거래 규칙을 사용하여 상대적으로 보수적인 거래 접근 방식을 채택하여 명백한 반전이있을 때만 시장에 진출하십시오.

  2. RSI 지표를 사용하여 과잉 구매/ 과잉 판매 조건을 판단합니다. RSI 라인이 과잉 구매 구역 (불시행 60 이상) 또는 과잉 판매 구역 (불시행 40 이하) 에 진입하면 시장이 반전 지점에 있음을 나타냅니다.

  3. 시장 트렌드를 결정하기 위해 윌리엄스 알리거터 지표를 결합합니다. 알리거터가 세 줄 (Lips, Teeth, Jaw) 을 하락 추세로 정렬했을 때만 단축; 세 줄이 상승 추세로 정렬되었을 때만 길게 이동하십시오.

  4. RSI의 RSI를 사용하여 RSI 지표 자체의 과잉 구매 / 과잉 판매 조건을 판단하여 이중 필터 효과를 만듭니다. RSI 라인이 과잉 구매 / 과잉 판매 구역에 들어가고 RSI의 RSI가 또한 과잉 구매 / 과잉 판매 구역에 들어가면 거래 신호가 활성화됩니다.

  5. 스톱 로스 및 영업 라인을 설정합니다. 가격이 리버스되어 영업 라인이나 영업 라인을 타격 할 때 수익 또는 스톱 로스를 위해 포지션을 닫습니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 거북이 거래에 대한 엄격한 규칙을 채택하고, 시장이 명백한 반전이 있을 때만 시장에 진출하면 시장이 변동할 때 엄청난 위험을 피할 수 있습니다.

  2. 시장 반전 지점을 결정하기 위해 RSI 지표를 사용하여 지표는 간단하고 명확하며 작동이 쉽습니다. RSI 설정의 RSI는 윙사브를 피하고 이중 필터는 신호 신뢰성을 향상시킵니다.

  3. 트렌드 방향을 결정하기 위해 알리거터 지표를 결합하면 트렌드에 반대하는 거래를 피합니다. 알리거터는 효율성을 향상시키기 위해 추가 필터 역할을합니다.

  4. 스톱 로스를 설정하고 이윤을 확보하고 위험을 통제합니다.

  5. 매개 변수를 최적화하기 쉽다. RSI 매개 변수 및 입출 기준은 전략을 최적화하기 위해 다른 시장에 맞게 조정할 수 있습니다.

위험 분석

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. RSI 지표에서 잘못된 신호가 발생할 확률이 있습니다. RSI는 잘못된 과잉 구매/ 과잉 판매 신호를 줄일 수 있습니다. 알리거터를 결합하면 잘못된 신호가 감소 할 수 있습니다.

  2. 너무 넓은 스톱 손실은 손실을 증가시킬 수 있습니다. 스톱 손실은 거래 당 손실을 줄이기 위해 적절하게 좁혀야합니다.

  3. 반전점은 RSI 과잉 구매/ 과잉 판매 구역에서 정확히 일어나지 않을 수 있습니다. 시장 체제 변경은 반전 지점을 변경할 수 있으므로 매개 변수를 적절히 조정해야합니다.

  4. 거래의 수는 낮을 수 있으며 거래가 없는 기간을 맞이할 수 있습니다. 거래의 수를 증가시키기 위해 입시 기준이 완화 될 수 있습니다.

  5. 장기적인 트렌드 시장은 단기 거래를 어렵게 할 수 있습니다. 보유 기간은 거래 기간을 연장하거나 단축하여 적시에 조정되어야합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. RSI 매개 변수를 최적화하고, 다른 시장에 적응하기 위해 과반 구매/ 과반 판매 구역을 조정합니다.

  2. 트렌드 방향을 결정하는 정확도를 높이기 위해 악어 매개 변수를 조정합니다.

  3. 스톱 로스를 최적화하고 이윤 설정을 취하여 마이너 다운 컨트롤을 극대화하고 더 많은 이윤을 확보합니다.

  4. KDJ, MACD 등과 다른 지표와 결합하여 신호의 정확성을 향상시킵니다.

  5. 자동 스톱 손실을 추가하고, 트레일링 스톱 손실을 추가하여 단일 거래 손실을 더 잘 제어합니다.

  6. 다양한 시장 조건에서 리스크를 관리하기 위해 포지션 크기를 최적화합니다.

  7. 트레이딩 세션을 최적화하고, 트렌드가 더 명백한 시기에 트레이드하세요.

요약

요약하자면, 이것은 비교적 강력한 단기 거래 전략이다. 보수적인 거북이 거래 접근 방식을 채택하고, 반전 지점을 결정하기 위해 RSI 지표를 사용하고, 트렌드 방향을 판단하기 위해 악어 지표를 통합하여, 정상과 바닥을 쫓는 것과 같은 고위험 거래를 효과적으로 피할 수 있으며, 비교적 안정적인 수익을 확보할 수 있다. 매개 변수, 스톱 로스/프로프트, 다른 지표 등을 결합함으로써 전략을 지속적으로 개선할 수 있다. 전반적으로, 이 전략은 역 트렌드 거래와 안정적인 수익을 추구하는 투자자에게 적합하다.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-07 20:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4

strategy(title="RSI of Ultimate Oscillator [SHORT Selling] Strategy",  shorttitle="RSIofUO" , overlay=false, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

	
//Ultimate Oscillator logic copied from  TradingView   builtin indicator
/////////////////////////////////////////////////////////////////////////////////
length1 = input(5, minval=1), length2 = input(10, minval=1), length3 = input(15, minval=1)


rsiUOLength = input(5, title="RSI UO length", minval=1)

sellLine = input (60, title="Sell at RSIofUO")
coverLine = input (75, title="Cover at RSIofUO")

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(3,title="Stop Loss",minval=1)


showUO=input(false, "show Ultimate Oscialltor")



average(bp, tr_, length) => sum(bp, length) / sum(tr_, length)
high_ = max(high, close[1])
low_ = min(low, close[1])
bp = close - low_
tr_ = high_ - low_
avg7 = average(bp, tr_, length1)
avg14 = average(bp, tr_, length2)
avg28 = average(bp, tr_, length3)
out = 100 * (4*avg7 + 2*avg14 + avg28)/7
//Ultimate Oscillator 
/////////////////////////////////////////////////////////////////////////////////

//Willimas Alligator  copied from  TradingView built in Indicator
/////////////////////////////////////////////////////////////////////////////////
smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

//moving averages logic copied from Willimas Alligator -- builtin indicator in TradingView
sma1=smma(hl2,10)
sma2=smma(hl2,20)
sma3=smma(hl2,50)

//Willimas Alligator
/////////////////////////////////////////////////////////////////////////////////


//drawings
/////////////////////////////////////////////////////////////////////////////////
hline(sellLine, title="Middle Line 60  [Short Here]", color=color.red , linestyle=hline.style_solid)

obLevelPlot = hline(75, title="Overbought",  color=color.blue , linestyle=hline.style_dashed)
osLevelPlot = hline(25, title="Oversold", color=color.blue, linestyle=hline.style_dashed)

fill(obLevelPlot, osLevelPlot, title="Background", color=color.blue, transp=90)
rsiUO = rsi(out,rsiUOLength)

ultPlot=plot(showUO==true? out : na, color=color.green, title="Oscillator")

plot(rsiUO, title = "rsiUO" ,  color=color.purple)
//drawings
/////////////////////////////////////////////////////////////////////////////////




//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="SERSIofUO", long=false,   qty=qty1, when = sma1<=sma2 and sma2 < sma3 and close<sma2 and crossunder(rsiUO,sellLine) )

//strategy.entry(id="SERSiofUO", long=false, when = sma1< sma2  and crossunder(rsiUO,60) )

barcolor(abs(strategy.position_size)>=1 ? color.purple : na )
bgcolor(abs(strategy.position_size)>=1 ? color.purple : na , transp=70)


//partial exit
strategy.close(id="SERSIofUO", comment="PExit",  qty=strategy.position_size/3, when=abs(strategy.position_size)>=1 and close< strategy.position_avg_price and crossover(rsiUO,30) )

strategy.close(id="SERSIofUO", comment="CloseAll", when=abs(strategy.position_size)>=1 and crossover(rsiUO,coverLine) )

//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////



더 많은