PresentTrend Estratégia de acompanhamento de tendências


Data de criação: 2023-09-21 15:00:08 última modificação: 2023-09-21 15:00:08
cópia: 0 Cliques: 615
1
focar em
1617
Seguidores

Visão geral

A estratégia PresentTrend é uma estratégia de acompanhamento de tendências personalizada, que combina tendências de mercado de curto e longo prazo para se adaptar a diferentes condições de mercado.

Princípio da estratégia

A estratégia consiste em duas partes:

  1. Indicador de RSI ou MFI personalizado: O indicador calcula o valor de PresentTrend com base no RSI ou no MFI e gera sinais de compra e venda com base nesse valor, indicando uma potencial reversão de tendência.

  2. Indicador ATR: é um indicador de tendência popular que segue a média real de variação do ATR.

Quando os sinais de compra e venda de ambas as estratégias são acionados simultaneamente, a estratégia abre uma posição a mais ou a menos. Isso pode garantir que as negociações ocorram apenas quando as tendências de curto e longo prazo estão em consonância, aumentando a confiabilidade da estratégia.

Vantagens estratégicas

  • Combina tendências de curto e longo prazo e aplica-se a diferentes condições de mercado
  • Utilização de indicadores personalizados e ATR para melhorar a confiabilidade do sinal
  • Opção de negociar apenas em ativos, apenas em ativos ou em ambos os lados, adaptada a diferentes estilos de negociação
  • Parâmetros padrão são otimizados para equilibrar sensibilidade e estabilidade
  • Parâmetros podem ser ajustados de acordo com as preferências pessoais, estratégias de otimização

Riscos estratégicos e soluções

  • Todas as tendências seguem uma estratégia com risco de arbitragem
  • Transações bidirecionais multi-espaço podem aumentar o número de transações e as comissões
  • Parâmetros mal definidos podem gerar muitos sinais de erro
  • Reduzir adequadamente o ciclo de negociação e o risco de arbitragem
  • Opção de fazer apenas mais ou menos, reduzindo o número de transações
  • Os parâmetros devem ser testados e adequadamente ajustados para garantir que sejam razoáveis

Direção de otimização da estratégia

  • Aumentar os mecanismos de suspensão de perdas e controlar melhor as perdas individuais
  • Combinação de outros indicadores para filtragem de sinais e redução de erros de negociação
  • Testar diferentes parâmetros de ciclo de detenção para encontrar o melhor parâmetro
  • Tente otimizar automaticamente os parâmetros com base em aprendizado de máquina
  • Utilizando mais fontes de dados, como o fluxo de pedidos
  • Otimização do código de estratégia para aumentar a eficiência da execução

Resumir

A estratégia PresentTrend é uma estratégia de acompanhamento de tendências muito eficaz em geral. Combina indicadores de tendências de curto e longo prazo, aumentando a confiabilidade do sinal, mantendo a sensibilidade. A estratégia pode se adaptar a diferentes ambientes de mercado e necessidades de comerciantes, ajustando a direção, os parâmetros e adicionando lógica adicional.

Código-fonte da estratégia
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 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/
// © PresentTrading

//@version=5

// Define the strategy settings
strategy('PresentTrend - Strategy [presentTrading]' , overlay=true, precision=3, default_qty_type=strategy.cash, 
 commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, 
  currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital= 10000)

// Define the input parameters
priceSource  = input.source(title='Source', defval=hlc3, group='PresentTrend') // The price source to use
lengthParam  = input.int(title='Length', defval=14, group='PresentTrend') // The length of the moving average
multiplier = input.float(title='Multiplier', defval=1.618, step=0.1, group='PresentTrend') // The multiplier for the ATR
indicatorChoice  = input.bool(title='Whether to use RSI or MFI', defval=false, group='PresentTrend') // Whether to use RSI or MFI

// Add a parameter for choosing Long or Short
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])

// Calculate the ATR and the upT and downT values
ATR = ta.sma(ta.tr, lengthParam)
upperThreshold = low - ATR * multiplier 
lowerThreshold  = high + ATR * multiplier 

// Initialize the PresentTrend indicator
PresentTrend = 0.0

// Calculate the PresentTrend indicator
PresentTrend := (indicatorChoice ? ta.rsi(priceSource, lengthParam) >= 50 : ta.mfi(hlc3, lengthParam) >= 50) ? upperThreshold < nz(PresentTrend[1]) ? nz(PresentTrend[1]) : upperThreshold : lowerThreshold > nz(PresentTrend[1]) ? nz(PresentTrend[1]) : lowerThreshold

// Calculate the buy and sell signals
longSignal  = ta.crossover(PresentTrend, PresentTrend[2])
shortSignal  = ta.crossunder(PresentTrend, PresentTrend[2])

// Calculate the number of bars since the last buy and sell signals
barsSinceBuy = ta.barssince(longSignal)
barsSinceSell = ta.barssince(shortSignal)
previousBuy = ta.barssince(longSignal[1])
previousSell = ta.barssince(shortSignal[1])

// Initialize the direction variable
trendDirection = 0

// Calculate the direction of the trend
trendDirection := longSignal and previousBuy > barsSinceSell ? 1 : shortSignal and previousSell > barsSinceBuy ? -1 : trendDirection[1]

// Check the trade direction parameter before entering a trade
if (trendDirection == 1 and (tradeDirection == "Long" or tradeDirection == "Both"))
    strategy.entry("Buy", strategy.long) 
if (trendDirection == -1 and (tradeDirection == "Short" or tradeDirection == "Both"))
    strategy.entry("Sell", strategy.short) 

// Add a stop mechanism when the tradeDirection is one-sided
if (tradeDirection == "Long" and trendDirection == -1)
    strategy.close("Buy")
if (tradeDirection == "Short" and trendDirection == 1)
    strategy.close("Sell")

// Visualization
plot(PresentTrend, color=color.blue, title="PresentTrend")
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")