Chiến lược này sử dụng Stochastic Oscillator để xác định các điều kiện thị trường mua quá mức và bán quá mức, kích hoạt các giao dịch với các tham số rủi ro và phần thưởng được xác định trước để tận dụng các biến động giá trong phạm vi giao dịch biến động. Ý tưởng chính đằng sau chiến lược này là mua ở cuối thấp của phạm vi giao dịch và bán ở cuối cao, trong khi kiểm soát rủi ro nghiêm ngặt.
Chiến lược giao dịch phạm vi biến động dựa trên Động dao động Stochastic cố gắng tận dụng các tín hiệu mua quá nhiều và bán quá nhiều của dao động trong phạm vi giao dịch được xác định trước. Chiến lược kiểm soát rủi ro thông qua quản lý rủi ro nghiêm ngặt và khoảng thời gian giao dịch. Mặc dù chiến lược có một số ưu điểm nhất định, thành công của nó phần lớn phụ thuộc vào việc xác định đúng phạm vi giao dịch.
/*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")