Strategi ini menggunakan Osilator Stochastic untuk mengenal pasti keadaan pasaran yang terlalu banyak dibeli dan terlalu banyak dijual, mencetuskan perdagangan dengan parameter risiko dan ganjaran yang telah ditentukan untuk memanfaatkan turun naik harga dalam julat perdagangan yang tidak menentu.
Strategi perdagangan julat turun naik berdasarkan Osilator Stochastic cuba memanfaatkan isyarat overbought dan oversold oscillator dalam julat dagangan yang telah ditentukan. Strategi ini mengawal risiko melalui pengurusan risiko dan selang perdagangan yang ketat. Walaupun strategi ini mempunyai kelebihan tertentu, keberkesanannya sebahagian besarnya bergantung pada mengenal pasti julat dagangan dengan betul. Arahan pengoptimuman masa depan termasuk menggabungkan penunjuk teknikal lain, memperkenalkan tahap stop-loss dan mengambil keuntungan yang dinamik, menggunakan teknik pengenalan julat yang lebih maju, dan menambah 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")