Estratégia de Trailing Stop de Momentum de Preço


Data de criação: 2023-11-27 11:45:04 última modificação: 2023-11-27 11:45:04
cópia: 0 Cliques: 627
1
focar em
1617
Seguidores

Estratégia de Trailing Stop de Momentum de Preço

Visão geral

Esta estratégia de bloquear o lucro através da computação de indicadores de dinâmica do preço, definir um longo e curto bi-direcional tracking stop-loss, de modo a realizar a tendência de acompanhamento de stop-loss. A estratégia, ao mesmo tempo, combinado com o nível de ativação, só começar a seguir o stop-loss depois de atingir o lucro designado, pode prevenir eficazmente a parada prematura.

Princípio da estratégia

Calcule a dinâmica de 12 ciclos do preço, e calcule a dinâmica de 1 ciclo do movimento. Quando a dinâmica rápida (a dinâmica de 1 ciclo do movimento do preço) é maior que 0, faça mais e menor que 0 faça menos. Assim, é possível determinar a direção da mudança da dinâmica do preço e dominar a tendência do preço.

Configure o tracking stop loss distance e o tracking stop loss activation level. O tracking stop loss distance é o ajuste do stop loss a uma distância designada quando o preço se move para uma nova alta ou baixa. O tracking stop loss activation é quando o tracking stop loss deve ser iniciado depois de atingir uma certa taxa de ganho.

A estratégia de bloquear o lucro através da localização de preços mais altos ou mais baixos, emitindo um sinal de parada quando o preço retorna acima da distância de parada definida.

Análise de vantagens estratégicas

  1. O uso de um julgamento de dupla dinâmica permite determinar com precisão a direção da tendência de preços, reduzindo o número de transações e evitando a manipulação.

  2. A configuração flexível permite o rastreamento de stop loss, redução de risco e bloqueio de lucro.

  3. Pode-se configurar o nível de ativação de stop loss para rastrear e ativar o mecanismo de stop loss somente após atingir um certo lucro, evitando o stop loss prematuro.

  4. É possível definir simultaneamente o nível de perda de multi-cabeça e o de cabeçalho vazio, para controlar totalmente o risco.

  5. O processo de cálculo é simples, eficiente, fácil de entender e implementar.

Análise de risco estratégico

  1. A dupla dinâmica pode gerar um sinal de reversão, que requer uma combinação de filtragem de tendência.

  2. A distância de parada excessiva pode causar perdas significativas.

  3. Se o nível de ativação for muito alto, você pode perder a oportunidade de parar.

  4. Mais testes e otimização de parâmetros são necessários para encontrar o melhor ponto de parada.

Pode-se reduzir os sinais errados através do julgamento de tendências e otimização de parâmetros. Teste diferentes variedades de contratos e configurações de parâmetros para encontrar a melhor configuração.

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

  1. Combinando com os indicadores de identificação da estrutura do mercado, identifique tendências de hipotecas e evite negociações reversíveis.

  2. Adição de mais condições de tempo, como mudanças no volume de transação, brechas de escala, etc., para melhorar a precisão do sinal.

  3. Optimizar os parâmetros para testar o desempenho de diferentes distâncias de parada e níveis de ativação.

  4. Considere a distância de parada de rastreamento dinâmico, ajustando-se automaticamente à volatilidade do mercado.

  5. Pode-se configurar um stop parcial ou um stop móvel para controlar ainda mais o risco.

Resumir

A estrutura geral da estratégia é clara, determina a tendência dos preços por meio de indicadores de dupla dinâmica, define um stop loss de rastreamento flexível para bloquear os lucros e controlar efetivamente o risco de negociação. A estratégia é fácil de entender e implementar, e há espaço para otimização, adicionando mais indicadores técnicos e testes de parâmetros para melhorar ainda mais o desempenho da estratégia.

Código-fonte da estratégia
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop Snippet", overlay=true)

length = input(12)
price = close
momentum(seria, length) =>
	mom = seria - seria[length]
	mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)

tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
	strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
	strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
	strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail    
    strategy.close_all()
if not strategy.opentrades
	array.clear(ts_)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)