Indicador de momentum combinado con media móvil para hacer estrategia de largo plazo


Fecha de creación: 2024-02-29 11:57:18 Última modificación: 2024-02-29 11:57:18
Copiar: 7 Número de Visitas: 536
1
Seguir
1617
Seguidores

Indicador de momentum combinado con media móvil para hacer estrategia de largo plazo

Descripción general

Esta estrategia combina el indicador de dinámica MACD y el indicador de tendencia DMI para realizar múltiples operaciones cuando se cumplen las condiciones. Sus salidas tienen paradas fijas y paradas de trailing de volatilidad personalizadas para bloquear los ingresos.

El principio

Las entradas de esta estrategia dependen de los indicadores MACD y DMI:

  • Cuando el MACD es positivo (la línea MACD está por encima de la línea de la señal), indica que el mercado se ha incrementado
  • Cuando el DI+ en DMI es mayor que el DI- indica que el mercado está en una fase de tendencia al alza

Cuando las dos condiciones anteriores se cumplen al mismo tiempo, abre más posiciones.

Las salidas de posición tienen dos criterios:

  • Detención fija: cerrar El porcentaje de alza de precios que alcanza el tiempo de parada establecido
  • Trailing Stop Loss: utiliza el ATR y el precio más alto reciente para calcular una posición de parada ajustada dinámicamente. Esto puede hacerse en función de la volatilidad del mercado.

Las ventajas

  • La combinación de MACD y DMI permite determinar la dirección de la tendencia del mercado de manera más confiable, reduciendo las operaciones erróneas
  • Las condiciones de stop-loss combinan stop-loss fijo y stop-loss volátil para bloquear ganancias con flexibilidad

El riesgo

  • El MACD y el DMI pueden generar falsas señales y causar pérdidas innecesarias
  • El bloqueo fijo puede impedir que se maximizen los beneficios
  • Trails con pérdida de movilidad La velocidad puede ajustarse incorrectamente, ser demasiado radical o conservadora

Dirección de optimización

  • Se puede considerar la inclusión de otros indicadores para filtrar las señales de entrada, como el uso del indicador KDJ para determinar si se ha sobrecomprado o sobrevendido
  • Se pueden probar diferentes parámetros para obtener un mejor efecto de deterioro de la parada
  • Los parámetros como el promedio móvil se pueden ajustar según la variedad de transacción específica, optimizando el sistema

Resumir

Esta estrategia integra varios indicadores para determinar las tendencias y condiciones del mercado, interviniendo en situaciones con una probabilidad favorable de ganancias. Las condiciones de parada también están diseñadas de manera optimizada, teniendo en cuenta la flexibilidad del bloqueo de ganancias al tiempo que garantiza ciertas ganancias. A través de la adaptación de parámetros y una mayor gestión de riesgos, esta estrategia puede convertirse en un sistema de negociación cuantitativa de salida estable.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 2h
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/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())