Estrategia de negociación de futuros intradiarios con doble media móvil cruzada

El autor:¿ Qué pasa?, Fecha: 2023-11-15 16:48:02
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el principio de doble cruce de promedios móviles, incorpora el indicador ATR para detener pérdidas y obtener ganancias, y agrega control de la hora de negociación para diseñar una estrategia de negociación intradiaria adecuada para contratos de futuros.

Estrategia lógica

La estrategia utiliza líneas de cruce de WMA de 5 períodos y 20 períodos como señales de entrada. Se hace largo cuando la línea de 5 períodos se rompe por encima de la línea de 20 períodos, y se hace corto cuando la línea de 5 períodos se rompe por debajo de la línea de 20 períodos. También utiliza la línea de WMA de 50 períodos para determinar la dirección de la tendencia. Las señales de negociación solo se activan cuando la dirección de la ruptura del precio es consistente con la tendencia principal.

Además, la estrategia aprovecha el indicador ATR para establecer niveles dinámicos de stop loss y take profit. ATR refleja la volatilidad del mercado.

Por último, la estrategia solo activa las operaciones durante las horas de negociación de EE.UU. (9:00-14:30 CST) para evitar una alta volatilidad en torno a la apertura y el cierre del mercado donde se forman fácilmente señales falsas.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El cruce de la media móvil doble captura efectivamente los puntos de inflexión de la tendencia para una entrada oportuna.

  2. El filtro de tendencia evita el comercio contra la tendencia principal y reduce las señales falsas.

  3. Las pérdidas de operaciones de tipo de interés de las operaciones de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés de tipo de interés.

  4. La limitación de las horas de negociación evita períodos de apertura y cierre volátiles.

  5. Reglas simples y claras, fáciles de entender e implementar para los principiantes.

  6. Parámetros personalizables como los períodos de MA, el multiplicador ATR, las horas de negociación, etc. para la optimización.

Análisis de riesgos

La estrategia también presenta los siguientes riesgos:

  1. Más detener pérdidas desencadena durante los mercados de rango limitado.

  2. El cruce de doble MA tiene retraso y puede perderse los brotes a corto plazo.

  3. La configuración incorrecta de los parámetros ATR conduce a una gran o pequeña pérdida de parada.

  4. Confiar únicamente en indicadores técnicos sin análisis fundamental.

  5. La eficacia depende de un símbolo adecuado y un marco de tiempo.

  6. El sistema mecánico corre el riesgo de ser arbitrado.

  7. Los parámetros deben ajustarse para diferentes sesiones de negociación.

Estos pueden mejorarse mediante ajuste de parámetros, combinaciones de indicadores, intervención manual selectiva, etc.

Direcciones de optimización

La estrategia puede mejorarse en los siguientes aspectos:

  1. Prueba diferentes sistemas de MA como EMA, DMA, etc.

  2. Añadir otros filtros técnicos como MACD, RSI, etc.

  3. Optimizar los parámetros de ATR para una mejor relación stop loss/profit.

  4. Incorpore indicadores de volumen para encontrar señales de entrada de alta calidad.

  5. Ajustar los parámetros basados en los símbolos específicos.

  6. Integrar factores fundamentales para evitar el comercio contra el mercado.

  7. Introduzca el aprendizaje automático como redes neuronales para el modelado del mercado.

  8. Explore combinaciones de marcos de tiempo múltiples para más oportunidades.

  9. Construir un conjunto de estrategias para mejorar la robustez.

Conclusión

En resumen, esta es una estrategia simple e intuitiva adecuada para principiantes para practicar el comercio en vivo. Al mismo tiempo, queda un gran espacio para la optimización a través de indicadores más técnicos o aprendizaje automático. El ajuste de parámetros basado en símbolos y dinámica del mercado también es clave. La estrategia proporciona un marco de referencia para principiantes de comercio cuantitativo, pero requiere pruebas y mejora incansables para obtener ganancias estables.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © james4392010

//@version=4

strategy(title="DayTradingFutures Cross-Strategy", overlay=true)




// === GENERAL INPUTS ===
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
//highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn



wmaFastSource   = input(defval = close, title = "Fast WMA Source")
wmaFastLength   = input(defval = 5, title = "Fast WMA Period")
wmaSlowSource   = input(defval = close, title = "Slow WMA Source")
wmaSlowLength   = input(defval = 20, title = "Slow WMA Period")
wmaDirectionSource  = input(defval = close, title = "Trend 50 Period Source")
wmaDirectionLength  = input(defval = 50, title = "Trend 50 Period")
timeinrange(res, sess) => time(res, sess) != 0



// === SERIES SETUP ===
/// a couple of ma's..
wmaFast = wma(close, 5)
wmaSlow = wma(close, 20)
wmaDirection = wma(close, 50)





// === PLOTTING ===
fast = plot(series=wmaFast, color=color.white, linewidth=2)
slow = plot(series=wmaSlow, color=color.yellow, linewidth=2)
direction = plot(series=wmaDirection, color=color.red, linewidth=2)


// === INPUT BACKTEST RANGE ===

//fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
//fromYear = input(defval = 2022, title = "From Year", minval = 2022)
 
// To Date Inputs
//toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//toYear = input(defval = 2022, title = "To Year", minval = 2022)
//startDate = timestamp(fromYear, fromMonth, fromDay)
//finishDate = timestamp(toYear, toMonth, toDay)
//inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear) 



// === FUNCTION EXAMPLE ===
//inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear)


// === LOGIC ===

enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430")
enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430")

//trend := nz(trend[1], trend)
//trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
//upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)

buySignal = enterLong 
//plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green)
plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)
//dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)

sellSignal = enterShort
//plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red)
plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)
//mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
//longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
//shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
//fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
//fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="Buy", message="Buy!")
alertcondition(sellSignal, title="Sell", message="Sell!")
//changeCond = trend != trend[1]
//alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")



// Entry for strategy //

//tp=input(25,title="TakeProfit")
//sl=input(40,title="StopLoss")

strategy.entry("Long",1, when=buySignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)

strategy.entry("Short",1, when=sellSignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
//strategy.exit("Exit", wmaFastwmaSlow)

//Buy and Sell Signals

//strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430"))   


// === FILL ====

fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red)
//fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area")
//fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")






Más.