This strategy combines the Stochastic Oscillator and Moving Average (MA) to determine overbought and oversold market conditions and uses the trend direction of the moving average to determine the trading direction. When the Stochastic Oscillator crosses upward in the oversold area and the moving average is in an upward trend, the strategy opens a long position; when the Stochastic Oscillator crosses downward in the overbought area and the moving average is in a downward trend, the strategy opens a short position. Additionally, the strategy sets a Stop Loss to control risk.
This strategy combines the Stochastic Oscillator and moving average to capture overbought and oversold market conditions while using the trend direction of the moving average to filter trading signals and setting a stop loss to control risk. The strategy logic is clear and easy to understand and implement. However, the strategy also has some limitations, such as indicator lag and frequent trading. By introducing other technical indicators, optimizing stop loss methods, dynamically adjusting parameters, and implementing position sizing, the strategy’s performance and robustness can be further enhanced.
/*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")