Estrategia de trading cuantitativo de acciones con media móvil exponencial combinada con stop loss dinámico y stop loss porcentual


Fecha de creación: 2024-01-03 16:25:54 Última modificación: 2024-01-03 16:25:54
Copiar: 0 Número de Visitas: 699
1
Seguir
1621
Seguidores

Estrategia de trading cuantitativo de acciones con media móvil exponencial combinada con stop loss dinámico y stop loss porcentual

Descripción general

El núcleo de esta estrategia es la utilización de la media móvil plana del índice como una señal de compra y venta, combinada con paros de seguimiento y paros porcentuales para bloquear los beneficios y controlar el riesgo. La estrategia es simple de implementar y se aplica a la negociación cuantitativa de acciones y otros productos financieros.

Principio de estrategia

  1. Calcular el EMA rápido y el EMA lento, el EMA rápido tiene un período de 20 días y el EMA lento tiene un período de 50 días. Cuando el EMA rápido atraviesa el EMA lento, genera una señal de compra; cuando el EMA rápido atraviesa el EMA lento, genera una señal de venta.

  2. Establezca un stop-loss de seguimiento después de la entrada, el porcentaje de stop-loss de seguimiento de múltiples posiciones y el stop-loss de seguimiento de la posición vacía según la dirección de la posición, por ejemplo, el 7%. El stop-loss de seguimiento se ajusta automáticamente en cada línea K para bloquear el máximo beneficio posible.

  3. Al mismo tiempo, se establece una posición de stop loss, según la dirección de la posición y el precio de entrada, respectivamente, se establece el porcentaje de stop loss de múltiples posiciones y el stop loss de la posición vacía, por ejemplo, el 2%. La posición de stop loss se mantiene fija, para evitar pérdidas excesivas.

  4. Compara el precio de parada y el precio de parada, elige la posición de parada más cercana al precio de mercado para la transacción y emite una orden de parada.

Ventajas estratégicas

  1. Las señales de las medias móviles son fáciles de entender y de implementar.

  2. El bloqueo de pérdidas de seguimiento puede bloquear al máximo las ganancias, al tiempo que evita que los errores de juicio causen pérdidas innecesarias.

  3. El porcentaje de stop loss es intuitivamente ajustable y permite controlar la pérdida máxima por transacción.

  4. La combinación de stop-loss colado y stop-loss fijo bloquea los beneficios y controla el riesgo.

Riesgos y contramedidas

  1. Las estrategias de medias móviles son propensas a generar falsas señales e introducir condiciones de filtración más fuertes.

  2. La pérdida de seguimiento a veces se detiene prematuramente, y la amplitud de la pérdida de seguimiento se relaja adecuadamente.

  3. La configuración incorrecta de la posición de parada fija puede ser demasiado radical o conservadora, y se debe ajustar el parámetro de porcentaje para la prueba.

  4. El stop loss mecánico puede perder la oportunidad de una reversión del mercado y puede combinarse con indicadores técnicos para determinar el stop loss.

Optimización de las ideas

  1. Probar combinaciones de EMA de diferentes parámetros para encontrar el equilibrio óptimo.

  2. Se añaden indicadores como el volumen de transacciones para filtrar las falsas señales.

  3. Prueba más acciones para encontrar el parámetro de stop loss adecuado.

  4. Intente agregar un stop móvil y ajuste la posición del stop según el mercado.

  5. La hora de detener el deterioro se determina en combinación con indicadores como el RSI.

Resumir

La estrategia integra señales de comercio de promedio móvil, stop loss de seguimiento y stop loss porcentual, se optimiza por parámetros, puede aplicarse a una variedad de acciones y mercancías, obtener ganancias estables y al mismo tiempo controlar el riesgo estrictamente, vale la pena que los comerciantes estudien la práctica de la cuantificación y la optimización continua.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
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/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)