Estrategia de seguimiento de tendencias basada en el impulso


Fecha de creación: 2024-03-11 10:53:50 Última modificación: 2024-03-11 10:54:08
Copiar: 0 Número de Visitas: 620
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en el impulso

Descripción general

Esta estrategia, combinada con el uso del indicador Aroon y el indicador de fuerza absoluta ((ASH), está diseñada para identificar las tendencias del mercado y las oportunidades de negociación potenciales. Aroon ayuda a identificar la fuerza y la dirección de las tendencias, mientras que la ASH ofrece una visión de la fuerza del impulso. Mediante la combinación de estos indicadores, la estrategia trata de capturar oportunidades de negociación rentables en el mercado de Ethereum.

Principio de estrategia

La estrategia utiliza dos conjuntos de parámetros para el indicador Aroon:

  • Posiciones de varios jefes: Aroon tiene un ciclo de 56 (en el tren de arriba) y 20 (en el tren de abajo)
  • Posiciones de cabeza vacía: Aroon tiene un ciclo de 17 años en la vía ascendente y 55 años en la vía descendente.

El ASH tiene una longitud de 9 líneas K y utiliza el precio de cierre como fuente de datos.

La estrategia incluye ciertas condiciones de entrada y salida:

  1. La entrada de una posición de más de uno: cuando el indicador de Aroon se desvía, indica una tendencia potencialmente al alza, por lo que se abre una posición de más de uno.
  2. La salida de las posiciones de más cabeza: cuando el indicador de Aroon se desvía, las posiciones de más cabeza se equilibran.
  3. Entra en una posición vacía: cuando el indicador Aroon baja en la vía, indica una tendencia a la baja potencial y, por lo tanto, abre una posición vacía.
  4. Exit de la posición vacía: cuando el indicador Aroon entra en trayectoria, la posición vacía se despega.

Análisis de las ventajas

La mayor ventaja de esta estrategia reside en la combinación de dos indicadores. El indicador Aroon es eficaz para determinar la dirección y la intensidad de la tendencia, y el indicador ASH ofrece una visión adicional de la dinámica para ayudar a determinar los tiempos de entrada y salida.

Además, el uso de dos diferentes conjuntos de parámetros para el indicador Aroon para la evaluación de la falta de espacio permite la flexibilidad para adaptarse a los cambios en la situación del mercado.

Análisis de riesgos

El principal riesgo de esta estrategia reside en las limitaciones del indicador en sí mismo. El indicador Aroon es débil para la corrección de la bolsa por el temblor y es propenso a generar señales erróneas. El indicador ASH también es más sensible a la inversión excesiva a corto plazo.

Además, la configuración incorrecta de los parámetros también puede afectar el rendimiento de la estrategia. Se necesita optimizar y probar el período largo y corto del indicador Aroon y la longitud del indicador ASH para encontrar la combinación óptima de parámetros.

Dirección de optimización

Se puede considerar la adición de filtros, como brechas de precios, aumento de volumen de transacciones, etc., para evitar la generación de señales erróneas en situaciones de crisis.

Se pueden probar diferentes combinaciones de parámetros y pesos de indicadores para encontrar el parámetro óptimo. También se puede intentar combinar otros indicadores, como RSI, KD, etc., para formar una combinación de indicadores más fuerte y mejorar el rendimiento de la estrategia.

Resumir

Esta estrategia integra las ventajas de usar dos indicadores, Aroon y ASH, para confirmar que es más eficaz al juzgar tendencias y capturar puntos de inflexión. Sin embargo, la configuración de parámetros y las limitaciones de los indicadores en sí mismos aún necesitan ser optimizadas. En general, la idea es novedosa y merece ser mejorada y verificada.

Código Fuente de la Estrategia
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false