
La estrategia combina el indicador de oscilación aleatoria (estocástico) y el promedio móvil (moving average) para determinar el estado de sobrecompra y sobreventa del mercado y determinar la dirección de la operación en función de la dirección de la tendencia de la media móvil. La estrategia abre una posición de venta cuando el indicador de oscilación aleatoria cruza hacia arriba en la zona de venta por encima de la norma y la media móvil está en tendencia alcista. La estrategia abre una posición de venta en blanco cuando el indicador de oscilación aleatoria cruza hacia abajo en la zona de compra por encima de la norma y la media móvil está en tendencia alcista.
La estrategia utiliza la dirección de la tendencia de las medias móviles para filtrar las señales de negociación y establecer paros para controlar el riesgo, al mismo tiempo que capta el estado de sobrecompra y sobreventa del mercado. La estrategia es clara, fácil de entender y implementar. Sin embargo, la estrategia también tiene algunas limitaciones, como el retraso de los indicadores, el comercio frecuente, etc.
/*backtest
start: 2024-04-22 00:00:00
end: 2024-04-29 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Pablo_2uc
//@version=5
strategy("Estrategia Stoch + MA c/ SL", overlay=true)
// Parámetros del Estocástico
length = input.int(14, title="Longitud Estocástico")
smoothK = input.int(3, title="Suavizado K")
smoothD = input.int(3, title="Suavizado D")
oversold = input.int(20, title="Sobreventa")
overbought = input.int(80, title="Sobrecompra")
// Parámetros de la Media Móvil
maLength = input.int(9, title="Longitud MA")
maSource = input(close, title="Fuente MA")
// Capital inicial
capital = 500
// Tamaño de posición (10% del capital)
positionSize = 1
// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100
// Cálculo del Estocástico
k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)
// Cálculo de la Media Móvil
ma = ta.sma(maSource, maLength)
// Condiciones de entrada en largo y corto
longCondition = ta.crossunder(k, oversold) and ma > ma[1]
shortCondition = ta.crossover(k, overbought) and ma < ma[1]
// Condiciones de salida
exitLongCondition = ta.crossover(k, ma) and ma < ma[1]
exitShortCondition = ta.crossunder(k, ma) and ma > ma[1]
// Estrategia
if (longCondition)
strategy.entry("Long", strategy.long, qty=positionSize)
strategy.exit("Exit Long", "Long", stop=close * (1 - stopLossPercent))
if (shortCondition)
strategy.entry("Short", strategy.short, qty=positionSize)
strategy.exit("Exit Short", "Short", stop=close * (1 + stopLossPercent))
// Cierre de posiciones
if (exitLongCondition)
strategy.close("Long")
if (exitShortCondition)
strategy.close("Short")