Estrategia de stop dinámico con triple EMA


Fecha de creación: 2023-10-17 15:05:41 Última modificación: 2023-10-17 15:05:41
Copiar: 2 Número de Visitas: 715
1
Seguir
1617
Seguidores

Estrategia de stop dinámico con triple EMA

Descripción general

La estrategia es una implementación de una típica estrategia de comercio de promedios móviles de triple índice. Se genera una señal de negociación a través de la intersección de un EMA de 5 días más rápido, un EMA de 20 días más rápido y un EMA de 50 días más lento. Al mismo tiempo, se combina con ciertas ticks de alza o caída del precio de cierre de la línea K actual el día anterior al cierre para filtrar las señales falsas.

El principio

Hacer más cuando el EMA del día 5 atraviesa el EMA del día 20 y los tres EMAs están alineados de manera múltiple (EMA del día 5 > EMA del día 20 > EMA del día 50), y el precio de cierre de la línea K actual aumenta más de ciertos ticks el día anterior; Hacer vacío cuando el EMA del día 5 atraviesa el EMA del día 20 y los tres EMAs están alineados de forma vacía (EMA del día 5 < EMA del día 20 < EMA del día 50), y el precio de cierre de la línea K actual disminuye más de ciertos ticks el día anterior.

Después de la entrada, si el precio se ejecuta más allá de ciertos ticks, se inicia el mecanismo de seguimiento de la parada de pérdidas, y se ajusta continuamente la línea de parada de acuerdo con la fluctuación del precio para bloquear más ticks.

Las ventajas

  1. El uso de la triple EMA para formar señales de negociación puede filtrar eficazmente el ruido del mercado y identificar tendencias. El EMA rápido refleja los cambios más recientes, el EMA medio determina la dirección de la tendencia y el EMA lento filtra las oscilaciones.

  2. El aumento de la comparación entre el precio de cierre de la línea K actual y el precio de cierre del día anterior puede filtrar aún más las señales falsas y reducir las transacciones innecesarias.

  3. El mecanismo de seguimiento de la pérdida permite ajustar dinámicamente la línea de pérdida de acuerdo con la evolución del mercado, lo que maximiza el bloqueo de las ganancias.

  4. La configuración de los parámetros de la estrategia es flexible y se puede optimizar para diferentes variedades y períodos, desde la línea diaria hasta la línea de minutos.

El riesgo

  1. En situaciones de crisis, las señales de cruce de EMA son frecuentes y pueden generar demasiadas transacciones, lo que aumenta las tarifas de transacción y los costos de deslizamiento.

  2. Los trazadores de pérdidas pueden detenerse prematuramente en una gran sacudida y no pueden mantener toda la tendencia.

  3. La característica de retardo de la EMA puede perder el punto de inflexión de la tendencia y generar pérdidas.

  4. Los parámetros que requieren optimización, como la longitud del ciclo EMA, el seguimiento de los ticks de parada, etc., varían mucho en función de la variedad y el ciclo.

Dirección de optimización

  1. Se puede combinar con otros indicadores como MACD, KD, etc. para ayudar a filtrar las señales de negociación.

  2. Se puede probar y optimizar para encontrar la combinación óptima de parámetros en función de la variedad y el ciclo específicos.

  3. Los parámetros se pueden ajustar dinámicamente mediante métodos como la intervención manual o el aprendizaje automático.

  4. Se puede considerar el cierre del seguimiento de los stop losses y la tendencia a mantener la posición completa en determinadas situaciones.

  5. Se puede combinar con una parada automática para reemplazar la pérdida de seguimiento simple.

Resumir

La estrategia integra tres métodos de análisis técnico comunes: cruce de EMA, breakout de precios y seguimiento de stop loss, para formar un sistema de comercio de seguimiento de tendencias más completo y confiable. Se puede adaptar a todas las variedades y períodos a través de la optimización de parámetros y funciona mejor en mercados con tendencias evidentes.

Código Fuente de la Estrategia
/*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)