리소스 로딩... 로딩...

RSI 트렌드 전략

저자:차오장날짜: 2024-06-14 15:28:38
태그:RSISMAEMA

img

전반적인 설명

이 전략은 상대 강도 지표 (RSI) 지표에 기반합니다. 이 전략은 RSI 값이 미리 설정된 상위 및 하위 임계치를 초과하는지 판단하여 구매 및 판매 신호를 결정합니다. 또한 전략은 위험을 제어하기 위해 스톱 로스 및 포지션 기간 한도를 설정합니다.

전략 원칙

  1. RSI 지표의 값을 계산합니다.
  2. RSI 값이 미리 설정된 구매 임계보다 낮으면 구매 신호를 생성하고, RSI 값이 미리 설정된 판매 임계보다 높으면 판매 신호를 생성합니다.
  3. 구매 신호를 기반으로 현재 종료 가격에 구매량을 계산하고 구매 명령을 합니다.
  4. 스톱 로스 비율이 설정된 경우, 스톱 로스 가격을 계산하고 스톱 로스 오더를 배치합니다.
  5. 판매 신호 또는 스톱 로스 조건에 따라 모든 포지션을 닫습니다.
  6. 최대 포지션 기간이 설정된 경우, 수익이나 손실에 관계없이 포지션 기간이 최대 기간을 초과한 후 모든 포지션을 종료합니다.

전략적 장점

  1. RSI 지표는 시장에서 과잉 구매 및 과잉 판매 신호를 효과적으로 포착 할 수있는 널리 사용되는 기술 분석 지표입니다.
  2. 이 전략은 스톱 로즈와 포지션 기간 제한을 포함하고 있어 위험을 통제하는데 도움이 됩니다.
  3. 전략 논리는 명확하고 이해하기 쉽고 구현하기 쉽습니다.
  4. RSI의 매개 변수와 임계치를 조정함으로써 전략은 다른 시장 환경에 적응할 수 있습니다.

전략 위험

  1. 어떤 경우에는 RSI 지표가 잘못된 신호를 생성하여 전략에서 손실을 초래할 수 있습니다.
  2. 이 전략은 거래 도구의 근본적인 요소를 고려하지 않으며 예상치 못한 시장 사건으로 인한 위험에 직면할 수 있는 기술 지표에만 의존합니다.
  3. 고정 스톱 로스 비율은 시장 변동성 변화에 적응하지 못할 수 있습니다.
  4. 전략의 성능은 매개 변수 설정에 의해 영향을 받을 수 있고, 부적절한 매개 변수는 전략 성능의 저하로 이어질 수 있습니다.

전략 최적화 방향

  1. 전략의 신뢰성을 높이기 위해 이동 평균과 같은 다른 기술적 지표를 도입하십시오.
  2. 트래일링 스톱 로스 또는 변동성에 기반한 동적 스톱 로스를 사용하는 것과 같은 스톱 로스 전략을 최적화합니다.
  3. 시장 조건에 따라 RSI의 매개 변수와 임계치를 동적으로 조정합니다.
  4. 전략의 위험 통제 능력을 향상시키기 위해 거래 도구의 기본 측면 분석을 결합하십시오.
  5. 최적의 매개 변수 조합을 찾기 위해 전략에 대한 역 테스트 및 매개 변수 최적화를 수행합니다.

요약

이 전략은 시장에서 과잉 구매 및 과잉 판매 신호를 캡처하기 위해 RSI 지표를 활용하며 위험을 제어하기 위해 스톱 로스 및 포지션 기간 제한을 도입합니다. 전략 논리는 간단하고 직설적이며 구현 및 최적화하기가 쉽습니다. 그러나 전략의 성능은 시장 변동성과 매개 변수 설정에 의해 영향을받을 수 있습니다. 따라서 전략의 안정성과 수익성을 향상시키기 위해 다른 분석 방법과 위험 관리 조치를 결합해야합니다.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Simple RSI Strategy", overlay=true,  initial_capital=20, commission_value=0.1, commission_type=strategy.commission.percent)

// Define the hardcoded date (Year, Month, Day, Hour, Minute)
var hardcodedYear = 2024
var hardcodedMonth = 6
var hardcodedDay = 10

// Convert the hardcoded date to a timestamp
var start_date = timestamp(hardcodedYear, hardcodedMonth, hardcodedDay)

// settings
order_size_usdt = input.float(20, title="Order Size (USDT)")
rsiLength = input.int(9, title="RSI Length")
rsiBuyThreshold = input.int(30, title="RSI Buy Threshold")
rsiSellThreshold = input.int(70, title="RSI Sell Threshold")
rsibuystrat = input.int(1, title="buy strat 1=achieved,2=recross")
rsisellstrat = input.int(1, title="sell strat 1=achieved,2=recross")
stoploss = input.int(1, title="Stop loss percent")
max_duration = input(24, title="Max Position Duration (hours)")*60

// emaPeriod = input.int(50, title="EMA Period")
// smaPeriod = input.int(200, title="SMA Period")

rsi = ta.rsi(close, rsiLength) 
// ma_rsi = ta.sma(rsi, rsiLength)
// ema = ta.ema(close,emaPeriod)
// sma = ta.sma(close,smaPeriod)
// plot(sma, color=color.red, title="exp Moving Average")
// plot(smal, color=color.blue, title="Simple Moving Average")

longCondition = ((ta.crossunder(rsi, rsiBuyThreshold) and rsibuystrat==1) or (ta.crossover(rsi, rsiBuyThreshold) and rsibuystrat==2) ) and strategy.position_size == 0
shortCondition = ( (ta.crossover(rsi, rsiSellThreshold) and rsisellstrat==1) or (ta.crossunder(rsi, rsiSellThreshold) and rsisellstrat==2) ) and strategy.position_size > 0 

// Execute Buy and Sell orders
if (longCondition)
	positionSize = order_size_usdt / close
	strategy.entry("Long", strategy.long,qty=positionSize)
	if (stoploss>0)
		stopLossPrice = close * (1 - stoploss/100 )
		strategy.exit("Stop Loss", from_entry="Long", stop=stopLossPrice)
	
if (shortCondition )//or stopCondition)
	strategy.close("Long")

//add condition open time
if (strategy.position_size > 0 and max_duration >0)
	var float entry_time = na
	if (strategy.opentrades > 0)
		entry_time := nz(strategy.opentrades.entry_time(0), na)
	else
		entry_time := na

	current_time = time
	var float duration_minutes = -1
	if (not na(entry_time))
		duration_minutes := (current_time - entry_time) / 60000

	
	// Close positions after a certain duration (e.g., 60 minutes)
	// if ( duration_minutes > max_duration and close>=strategy.opentrades.entry_price(0))
	if ( duration_minutes > max_duration )
		label.new(bar_index, high, text="Duration: " + str.tostring(duration_minutes/60) + " hrs", color=color.blue, textcolor=color.white, style=label.style_label_down, size=size.small)
		strategy.close("Long")


// Plot Buy and Sell signals
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
//plotshape(series=stopCondition, title="stop Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Plot RSI
// hline(rsiBuyThreshold, "RSI Buy Threshold", color=color.green)
// hline(rsiSellThreshold, "RSI Sell Threshold", color=color.red)

관련

더 많은