Triple EMA con estrategia de stop loss de seguimiento

El autor:¿ Qué pasa?, Fecha: 2023-10-17 15:05:41
Las etiquetas:

img

Resumen general

Esta estrategia implementa un típico sistema de trading de media móvil exponencial triple (EMA). Genera señales de trading comparando una EMA rápida de 5 días, una EMA media de 20 días y una EMA lenta de 50 días. También utiliza el precio de cierre de la barra actual en comparación con las barras anteriores cercanas para filtrar señales falsas. Además, se utiliza un stop loss para bloquear las ganancias.

Principios

Cuando la EMA de 5 días se cruza por encima de la EMA de 20 días, y las tres EMA están alineadas al alza (5 días EMA > EMA de 20 días > EMA de 50 días), y el cierre de la barra actual está por encima de las barras anteriores cerradas por ciertos ticks, vaya largo.

Después de la entrada, cuando el precio se ejecuta por ciertos ticks, se iniciará un stop loss de seguimiento para seguir ajustando el stop loss basado en la fluctuación del precio, con el fin de obtener mayores ganancias.

Ventajas

  1. El uso de EMA triples para generar señales puede filtrar eficazmente el ruido del mercado e identificar tendencias.

  2. Comparar el cierre actual de las barreras con el cierre anterior de las barreras filtra aún más las señales falsas y reduce las operaciones innecesarias.

  3. Trailing stop loss ajusta dinámicamente el stop loss basado en la acción del precio para maximizar el bloqueo de ganancias.

  4. La configuración flexible de parámetros de esta estrategia permite la optimización en diferentes productos y plazos de tiempo desde barras diarias a minutos.

Los riesgos

  1. Los cruces frecuentes de la EMA pueden generar operaciones excesivas en mercados variados, aumentando los costes de comisiones y deslizamiento.

  2. El stop loss de seguimiento puede salir prematuramente de la tendencia durante los grandes golpes.

  3. El retraso de la EMA puede causar la falta de importantes puntos de inflexión y pérdidas.

  4. Los parámetros como los períodos de EMA, los ticks de stop de trailing requieren optimización para diferentes productos y plazos.

Direcciones de mejora

  1. Incorpore otros indicadores como MACD, KD para filtrar las señales comerciales.

  2. Prueba y optimiza los parámetros para productos y plazos específicos para encontrar las mejores combinaciones.

  3. Ajuste dinámico de parámetros a través de la supervisión humana o el aprendizaje automático.

  4. Considere la posibilidad de desactivar la parada trasera y mantener la posición completa para condiciones de mercado específicas.

  5. Reemplazar el simple stop loss con mecanismos automáticos más avanzados para obtener ganancias.

Conclusión

Esta estrategia integra tres técnicas comunes de análisis técnico - EMA crossover, price breakout y trailing stop loss en un sistema de trading bastante completo y robusto. A través de la optimización de parámetros, se puede adaptar a diferentes productos y plazos de tiempo y funciona bien en mercados con tendencias fuertes. Pero también tiene algunas debilidades típicas de las estrategias de análisis técnico que necesitan una mayor optimización para manejar más situaciones de mercado.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
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/
// © Matt Dearden - IndoPilot
// @version=4

/////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// 
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true

strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, 
 default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
 commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, 
 max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) 

///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////

DateFilter = input(false, "═════ Data Filtering ═════") 
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) 
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) 
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) 
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) 
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) 
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) 

//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////

var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) 
OrderQty = 1  
Buffer = InitBuffer / (Multiplier * 100)

/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////

EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)

//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) 
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) 

/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////

if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))  
    StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) 
    strategy.exit("Long Stoploss", "Long") 
    
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) 
    StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
    strategy.exit("Short Stoploss", "Short") 
    
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////

if (longCondition)
    StartPrice := close
    StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Long", strategy.long, qty=OrderQty)
    strategy.exit("Long Stoploss", "Long")

if (shortCondition)
    StartPrice := close
    StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Short", strategy.short, qty=OrderQty)
    strategy.exit("Short Stoploss", "Short")
    
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)


Más.