
Strategi ini adalah sistem perdagangan pelapisan indikator bertingkat yang didasarkan pada Indeks Kekuatan Relatif (RSI). Strategi ini beroperasi dalam kurun waktu perdagangan tertentu, mengidentifikasi peluang perdagangan melalui sinyal jenuh beli dan jenuh jual dari indikator RSI, dan menggabungkannya dengan mekanisme penyesuaian posisi dinamis untuk mengoptimalkan pengembalian keseluruhan dengan membangun posisi secara berkelompok ketika pasar bergerak ke arah yang berlawanan. Strategi ini menggunakan metode target laba berdasarkan harga masuk rata-rata untuk manajemen stop-profit.
Strategi ini terutama didasarkan pada komponen inti berikut:
Strategi ini membentuk sistem perdagangan yang relatif lengkap dengan menggabungkan indikator RSI dengan mekanisme pembukaan batch. Keuntungan inti dari strategi ini terletak pada mekanisme penyaringan sinyal bertingkat dan metode manajemen posisi yang fleksibel, tetapi pada saat yang sama, perlu juga memperhatikan masalah-masalah seperti risiko pasar tren dan optimalisasi parameter. Kinerja strategi secara keseluruhan masih dapat ditingkatkan dengan menambahkan filter tren, mengoptimalkan mekanisme stop-loss, dan perbaikan lainnya.
/*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))