
Chiến lược này sử dụng chỉ số dao động ngẫu nhiên (Stochastic Oscillator) để xác định tình trạng quá mua và quá bán của thị trường, kích hoạt giao dịch với các tham số rủi ro và lợi nhuận được xác định trước, với hy vọng kiếm lợi nhuận trong khu vực giao dịch biến động. Ý tưởng chính của chiến lược này là mua ở mức thấp trong khu vực giao dịch và bán ở mức cao trong khu vực giao dịch, đồng thời kiểm soát chặt chẽ rủi ro.
Chiến lược giao dịch trong khu vực dao động dựa trên chỉ số dao động ngẫu nhiên cố gắng kích hoạt giao dịch trong khu vực giao dịch được xác định trước bằng cách sử dụng tín hiệu mua và bán quá mức của chỉ số ngẫu nhiên. Chiến lược này 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ù có một số ưu điểm, thành công của chiến lược phụ thuộc rất nhiều vào việc xác định đúng khu vực 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")