
Strategi ini menggunakan indikator bergoyang secara rawak (Stochastic Oscillator) untuk mengenal pasti keadaan pasaran yang terlalu banyak dan terlalu banyak, dan mencetuskan perdagangan di bawah parameter risiko dan pulangan yang telah ditentukan, dengan harapan untuk mendapatkan keuntungan dalam kawasan perdagangan yang bergoyang. Idea utama strategi ini adalah untuk membeli pada titik rendah di kawasan perdagangan dan menjual pada titik tinggi di kawasan perdagangan, sambil mengawal risiko dengan ketat.
Strategi perdagangan rantaian bergolak berdasarkan indikator bergolak secara rawak berusaha untuk mencetuskan perdagangan dalam rantaian perdagangan yang telah ditetapkan, menggunakan isyarat overbuy dan oversell dari indikator rawak. Strategi ini mengawal risiko melalui pengurusan risiko yang ketat dan selang waktu perdagangan. Walaupun strategi ini mempunyai kelebihan tertentu, kejayaannya sangat bergantung kepada pengenalan rantaian perdagangan yang betul. Arah pengoptimuman masa depan termasuk menggabungkan indikator teknikal lain, memperkenalkan stop loss yang dinamik, menggunakan teknologi pengenalan rantaian yang lebih maju, dan menambahkan penapis trend.
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Range Trading with Stochastic", overlay=true)
// Input Parameters
overboughtLevel = input.int(80, title="Overbought Level", minval=1, maxval=100)
oversoldLevel = input.int(20, title="Oversold Level", minval=1, maxval=100)
stochLength = input.int(14, title="Stochastic Length", minval=1)
riskPerTrade = input.float(0.01, title="Risk per Trade (%)", minval=0.01, maxval=100, step=0.01)
barsBetweenTrades = input.int(20, title="Bars Between Trades", minval=1)
// Calculate Stochastic Oscillator
k = ta.sma(ta.stoch(close, high, low, stochLength), 3)
d = ta.sma(k, 3)
// Variables to Track Time Since Last Trade
var lastTradeBar = 0
barsSinceLastTrade = bar_index - lastTradeBar
// Risk Management
atr = ta.atr(14)
stopLoss = 2 * atr
takeProfit = 2 * atr
riskAmount = strategy.equity * riskPerTrade / 100
positionSize = 1
// Entry Conditions
longCondition = k < oversoldLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades
shortCondition = k > overboughtLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades
// Entry/Exit Orders
if longCondition
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Long Exit", "Long", stop=close - stopLoss, limit=close + takeProfit)
lastTradeBar := bar_index // Update last trade bar
if shortCondition
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Short Exit", "Short", stop=close + stopLoss, limit=close - takeProfit)
lastTradeBar := bar_index // Update last trade bar
// Plot Stochastic
plot(k, color=color.blue, title="%K")
plot(d, color=color.orange, title="%D")
hline(overboughtLevel, color=color.red, title="Overbought")
hline(oversoldLevel, color=color.green, title="Oversold")