
Strategi ini berdasarkan pada indeks relatif kuat dan lemah (RSI) untuk menentukan isyarat beli dan jual dengan menilai sama ada nilai RSI melebihi paras naik dan turun yang ditetapkan. Strategi ini juga menetapkan had waktu berhenti dan memegang kedudukan untuk mengawal risiko.
Strategi ini menggunakan indikator RSI untuk menangkap isyarat overbought dan oversold di pasaran, sambil memperkenalkan had waktu berhenti dan memegang untuk mengawal risiko. Logik strategi mudah difahami, mudah dilaksanakan dan dioptimumkan. Walau bagaimanapun, prestasi strategi mungkin dipengaruhi oleh turun naik dan parameter pasaran, dan oleh itu perlu digabungkan dengan kaedah analisis lain dan kaedah pengurusan risiko untuk meningkatkan kehandalan dan keuntungan strategi.
/*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)