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