
La estrategia utiliza un indicador de oscilación aleatoria (estocástico) para identificar el estado de sobrecompra y sobreventa en el mercado, para desencadenar operaciones con parámetros predefinidos de riesgo y retorno, con la esperanza de obtener ganancias dentro de un rango de negociación fluctuante. La idea principal de la estrategia es comprar en los bajos de los rangos de negociación y vender en los altos de los rangos de negociación, mientras se controla estrictamente el riesgo.
Las estrategias de trading de bandas de fluctuación basadas en indicadores de oscilación aleatoria intentan activar operaciones dentro de bandas de negociación predeterminadas, utilizando señales de sobreventa y sobreventa de indicadores aleatorios. La estrategia controla el riesgo a través de una estricta gestión del riesgo y la intermitencia de la negociación. Aunque la estrategia tiene ciertas ventajas, su éxito depende en gran medida de la correcta identificación de las bandas de negociación.
/*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")