이 전략은 무작위적인 진동 지표 (Stochastic Oscillator) 를 사용하여 시장의 과매매와 과매매 상태를 식별하고, 미리 정의된 위험과 수익 파라미터에 따라 거래를 촉발하여, 변동하는 거래 구역에서 이익을 얻기를 기대한다. 이 전략의 주요 아이디어는 거래 구역의 낮은 시점에 구입하고 거래 구역의 높은 시점에 판매하며, 위험을 엄격히 제어한다.
무작위 진동 지표에 기반한 변동 영역 거래 전략은 미리 정해진 거래 영역 내에서 무작위 지표의 과매매 신호를 사용하여 거래를 촉발시키려고 한다. 이 전략은 엄격한 위험 관리와 거래 간격을 통해 위험을 통제한다. 이 전략의 장점이 있기는 하지만, 그 성공은 거래 영역을 올바르게 식별하는 것에 크게 달려 있다.
/*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")