Estratégia de acompanhamento de tendências baseada em momentum


Data de criação: 2024-03-11 10:53:50 última modificação: 2024-03-11 10:54:08
cópia: 0 Cliques: 620
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências baseada em momentum

Visão geral

A estratégia combina o uso do indicador Aroon com o indicador de força absoluta ((ASH) para identificar tendências de mercado e potenciais oportunidades de negociação. O Aroon ajuda a identificar a força e a direção das tendências, enquanto o ASH fornece insights sobre a força motriz. Combinando esses indicadores, a estratégia tenta capturar oportunidades de negociação lucrativas no mercado de Ethereum.

Princípio da estratégia

A estratégia usa dois conjuntos de parâmetros do indicador Aroon:

  • Posições múltiplas: Aroon com um ciclo de 56 (na linha de cima) e 20 (na linha de baixo)
  • Posições em branco: Aroon com um ciclo de 17 anos (na linha de cima) e 55 anos (na linha de baixo)

O ASH tem um comprimento de 9 linhas K e usa o preço de fechamento como fonte de dados.

A estratégia inclui condições específicas de entrada e saída:

  1. A entrada de posições em cima: quando o indicador de Aroon entra em uma trajectória descendente, indica uma tendência potencialmente ascendente e, portanto, abre uma posição em cima.
  2. Exit Multiposição: Quando o indicador de Aroon despenca, a posição é liquidada.
  3. Emissão de posição em branco: quando o indicador Aroon entra em rota, indica uma potencial tendência de queda e, portanto, abre uma posição em branco.
  4. A posição em aberto é retirada: A posição em aberto é retirada quando o indicador de Aroon entra em rotação.

Análise de vantagens

A maior vantagem desta estratégia é a combinação de dois indicadores. O indicador Aroon é eficaz para determinar a direção e a intensidade da tendência, e o indicador ASH fornece informações adicionais sobre a dinâmica, ajudando a determinar os momentos de entrada e saída.

Além disso, o uso de dois diferentes conjuntos de parâmetros do indicador de Aroon para o julgamento de vazio permite a flexibilidade de adaptação às mudanças na situação do mercado.

Análise de Riscos

O principal risco dessa estratégia reside na própria limitação do indicador. O indicador Aroon é fraco para a correção de choque do mercado e é propenso a produzir sinais errôneos. O indicador ASH também é mais sensível a inversões excessivas de curto prazo.

Além disso, se a configuração de parâmetros for inadequada, isso também afetará o desempenho da estratégia. É necessário otimizar e testar o período longo ou curto do indicador Aroon e o comprimento do indicador ASH para encontrar a melhor combinação de parâmetros.

Direção de otimização

Pode-se considerar a adição de filtros, como breakouts de preços, aumento de volume de transação, etc., para evitar sinais errados em situações de turbulência.

Pode-se testar diferentes combinações e pesos de indicadores para encontrar o melhor parâmetro. Também pode-se tentar combinar outros indicadores, como RSI, KD, etc., para formar uma combinação de indicadores mais forte e melhorar o desempenho da estratégia.

Resumir

Esta estratégia integra as vantagens de usar dois indicadores, Aroon e ASH, e é mais eficiente em determinar tendências e capturar pontos de inflexão. No entanto, a configuração de parâmetros e as próprias limitações dos indicadores ainda precisam ser otimizadas.

Código-fonte da estratégia
/*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