
Strategi ini ialah sistem dagangan tindanan penunjuk pelbagai peringkat berdasarkan Indeks Kekuatan Relatif (RSI). Strategi ini beroperasi dalam tetingkap masa dagangan tertentu, mengenal pasti peluang dagangan melalui isyarat terlebih beli dan terlebih jual penunjuk RSI, dan menggabungkannya dengan mekanisme pelarasan kedudukan dinamik untuk mengoptimumkan pulangan keseluruhan dengan membina kedudukan dalam kelompok apabila pasaran bergerak ke arah yang bertentangan. Strategi ini menggunakan kaedah sasaran keuntungan berdasarkan harga kemasukan purata untuk pengurusan henti untung.
Strategi ini terutamanya berdasarkan komponen teras berikut:
Strategi ini membentuk sistem perdagangan yang agak lengkap dengan menggabungkan penunjuk RSI dengan mekanisme pembukaan kelompok. Kelebihan teras strategi terletak pada mekanisme penapisan isyarat berbilang peringkat dan kaedah pengurusan kedudukan yang fleksibel, tetapi pada masa yang sama, ia juga perlu memberi perhatian kepada isu seperti risiko pasaran trend dan pengoptimuman parameter. Prestasi keseluruhan strategi masih boleh dipertingkatkan dengan menambahkan penapis arah aliran, mengoptimumkan mekanisme henti rugi dan penambahbaikan lain.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("TonyM RSI", overlay=true)
// Input Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
startHour = input.int(2, "Start Hour", minval=0, maxval=23, group="Trading Window")
endHour = input.int(4, "End Hour", minval=0, maxval=23, group="Trading Window")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Time Filter
inTradingWindow = (hour >= startHour and hour < endHour)
// Strategy Settings
buyLevel = 30
sellLevel = 70
scaleDistance = 1.0 // Distance in points to add to the position
takeProfitPoints = 1.5 // Profit target from average price
initialQty = 1 // Initial trade size
scalingQty = 1 // Additional trade size for scaling
// Trade Logic
if inTradingWindow
// Entry Logic
if rsi <= buyLevel and strategy.position_size == 0
strategy.entry("Buy", strategy.long, qty=initialQty)
if rsi >= sellLevel and strategy.position_size == 0
strategy.entry("Sell", strategy.short, qty=initialQty)
// Scaling Logic
if strategy.position_size > 0 and close <= strategy.position_avg_price - scaleDistance
strategy.entry("Scale Buy", strategy.long, qty=scalingQty)
if strategy.position_size < 0 and close >= strategy.position_avg_price + scaleDistance
strategy.entry("Scale Sell", strategy.short, qty=scalingQty)
// Exit Logic (based on average price)
if strategy.position_size > 0
strategy.exit("Take Profit Long", "Buy", limit=strategy.position_avg_price + takeProfitPoints)
if strategy.position_size < 0
strategy.exit("Take Profit Short", "Sell", limit=strategy.position_avg_price - takeProfitPoints)
// Plot RSI
plot(rsi, "RSI", color=color.blue, linewidth=1)
rsiUpperBand = hline(70, "RSI Upper Band", color=color.red)
rsiLowerBand = hline(30, "RSI Lower Band", color=color.green)
fill(rsiUpperBand, rsiLowerBand, color=color.new(color.gray, 90))