Tendencia cruzada de la media estocástica y de la media móvil siguiendo una estrategia cuantitativa

El autor:¿ Qué pasa?, Fecha: 2024-02-05 15:27:03
Las etiquetas:

img

Resumen general

Esta estrategia utiliza principalmente los cruces del indicador de Stoch en el área de sobrecompra/sobreventa como señales de entrada, al tiempo que juzga la dirección de la tendencia actual con el indicador EMA.

Principios

La estrategia consta de tres partes principales:

  1. EMA para determinar la dirección de la tendencia

    Cuando se utiliza una EMA rápida y una EMA lenta, cuando la EMA rápida está por encima de la EMA lenta, se determina como una tendencia alcista.

  2. Las acciones para generar señales comerciales

    El indicador de Stoch se compone de líneas %K y %D. Cuando %K cruza por encima de %D en el área de sobrecompra, genera una señal de compra. Cuando %K cruza por debajo de %D en el área de sobreventa, genera una señal de venta. Esta estrategia solo toma señales de cruce de Stoch cuando ocurren en las zonas de sobrecompra / sobreventa.

  3. Mecanismo de gestión de riesgos

    La estrategia también establece niveles de stop loss y take profit. Cuando se mantiene una posición larga, si el precio rompe el nivel de stop loss, se saldrá del comercio. Si el precio rompe el nivel de take profit, se cerrará la posición para obtener ganancias. La misma lógica se aplica a las posiciones cortas.

En general, se trata de una estrategia comercial cuantitativa típica que utiliza una combinación de indicadores para determinar la dirección de la tendencia y las señales de negociación, complementadas con estrictas normas de gestión del riesgo para reducir el riesgo comercial.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. El uso de EMA para determinar las tendencias principales y menores evita quedar atrapado en un mercado lateral.

  2. La fortaleza del indicador Stoch radica en su capacidad para reflejar con precisión los niveles de sobrecompra/sobreventa.

  3. La estrategia especifica claramente los posibles escenarios largos y cortos, lo que filtra aún más las señales y evita la apertura ciega de posiciones en un mercado complejo.

  4. La estricta gestión del riesgo ayuda a controlar la pérdida de las operaciones individuales, limita el máximo de retirada mientras que todavía da margen para operaciones rentables.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Los indicadores como la EMA y el Stoch tienen un carácter retardado, lo que dificulta que esta estrategia capte a tiempo las reversiones del mercado.

  2. La mera dependencia de los indicadores puede establecer fácilmente sesgos, perdiendo así las oportunidades comerciales que realmente ofrece el mercado.

  3. El mecanismo de gestión del riesgo en sí mismo también puede limitar el potencial de ganancia estableciendo un stop loss y un take profit prematuros.

  4. Hay riesgos asociados con la selección de parámetros. Se necesita una amplia prueba posterior y optimización para encontrar los parámetros óptimos.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Pruebe diferentes tipos de EMA para determinar la tendencia, como WMA, Hull MA, etc. y compare los resultados.

  2. Combinar otros indicadores para generar señales comerciales, por ejemplo, MACD, KDJ para construir un sistema de múltiples indicadores.

  3. Optimizar los ajustes de stop loss y take profit para adaptarse mejor a la volatilidad del mercado.

  4. Prueba la variación del rendimiento en diferentes productos y plazos para encontrar la combinación óptima.

  5. Considere la introducción de modelos de aprendizaje automático para ayudar a la tendencia y al juicio de señales para hacer la estrategia más inteligente.

Conclusión

En conclusión, esta estrategia combina indicadores comúnmente utilizados para formar un sistema de seguimiento de tendencias relativamente maduro, teniendo en cuenta la determinación de tendencias, las señales comerciales y la gestión de riesgos. Con una mayor optimización, creo que esta estrategia puede lograr mejores resultados comerciales en vivo. Al mismo tiempo, también debemos ser conscientes de las limitaciones de las estrategias individuales y continuar aprendiendo las complejidades del mercado en busca de ganancias constantes a largo plazo.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//by Wugamlo
//Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs
//Default setup seems to work best on 4HR timeframe for BTC 

strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000)

// === GENERAL INPUTS ===
SectionInd      = input(defval = true ,title = "════════════ INDICATORS ════════════")
maFastLength    = input(defval = 55,   title = "Fast MA Period", minval = 1)
maSlowLength    = input(defval = 89,   title = "Slow MA Period", minval = 1)
StochLength     = input(defval = 14,   title = "Stochastic Length", minval=1)
smoothK         = input(defval = 6,    title = "%K Smooth", minval=1)
smoothD         = input(defval = 3,    title = "%D Smooth", minval=1)
overbought      = 80
oversold        = 20
HighlightOBOS   = input(defval = true, title = "Highlight Stoch Cross?")
HighlightTrend  = input(defval = true, title = "Highlight Trend?")

//DATE AND TIME
SectionFrom     = input(defval = true ,title = "═══════════════ FROM ═══════════════")
fromDay         = input(defval = 01,   title = "From day", minval=1)
fromMonth       = input(defval = 1,    title = "From month", minval=1)
fromYear        = input(defval = 2019, title = "From year", minval=2014)
SectionTo       = input(defval = true, title = "════════════════ TO ════════════════")
toDay           = input(defval = 31,   title = "To day", minval=1)
toMonth         = input(defval = 12,    title = "To month", minval=1)
toYear          = input(defval = 2020, title = "To year", minval=2014)

// === STRATEGY RELATED INPUTS ===
SectionStra     = input(defval = true ,title = "═════════════ STRATEGY ═════════════")

// Include Shorts or only trade Long Positions?
includeShorts   = input(defval = true, title = "Include Short Positions?")


// Risk Management inputs
useTakeProfit   = input(defval = true,  title = "User Take Profit?")
inpTakeProfit   = input(defval = 8,     title = "Take Profit (%)", minval = 0)
useStopLoss     = input(defval = false, title = "User Stop Loss?")
inpStopLoss     = input(defval = 2,     title = "Stop Loss (%)", minval = 0)

StopLossPerc    = inpStopLoss * 0.01
TakeProfitPerc  = inpTakeProfit * 0.01


// === EMA SERIES SETUP ===
maFast = ema(close, maFastLength)
maSlow = ema(close, maSlowLength)
diff   = maFast - maSlow

// === STOCHASTIC SETUP ===
k      = sma(stoch(close, high, low, StochLength), smoothK)
d      = sma(k, smoothD)

// Stochastic Long/Short Entry determination
stochLong  = crossover(k,d)  and (k < oversold)
stochShort = crossunder(k,d) and (k > overbought)

// Stochastic Long/Short Exit determination
stochLongEx  = crossover (k, overbought)
stochShortEx = crossunder(k, oversold)


// === PLOTTING EMAs ===
fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10)
slow = plot(maSlow, title = "Slow MA", color = white,  linewidth = 1, style = line, transp = 10)


// === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones ===
b_color = stochLong ? green : stochShort ? red : na
bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65)   //Highlight the Overbought/Oversold Stoch Crossings
t_color = diff>=0 ? green : diff<0 ? red : na
bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75)  //Highlight the EMA Trend


// === STRATEGY LOGIC ===
// Time Restriction
timeInRange = true


// === STRATEGY - LONG POSITION EXECUTION ===
if stochLong and (diff >=0) and timeInRange    //Open Long when Stoch crossing in Oversold area and EMATrend is up
    strategy.entry(id = "Long", long = true)
if stochLong and (diff <0) and timeInRange     //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals)
    strategy.close(id = "Long")
if stochLongEx and timeInRange                 //Close Long when Stoch is getting Overbought 
    strategy.close(id = "Long")


// === STRATEGY - SHORT POSITION EXECUTION ===
if stochShort and (diff <0) and timeInRange and includeShorts  //Open Short when Stoch crossing in Overbought area and EMA Trend is down
    strategy.entry(id = "Short", long = false)
if stochShort and (diff >=0) and timeInRange                   //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals)
    strategy.close(id = "Short")
if stochShortEx and timeInRange                                //Close Short when Stoch is getting Oversold 
    strategy.close(id = "Short")

        
// === STRATEGY RISK MANAGEMENT EXECUTION ===
//Stop Loss
if useStopLoss    //Exit when Stop Loss is hit
    strategy.exit("Exit Long SL",   from_entry = "Long",  loss = close * StopLossPerc / syminfo.mintick )
    strategy.exit("Exit Short SL",  from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick )

//Take Profit
if useTakeProfit  //Exit when Take Profit Limit is hit
    strategy.exit("Exit Long TP",   from_entry = "Long",  profit = close * TakeProfitPerc / syminfo.mintick)
    strategy.exit("Exit Short TP",  from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)




Más.