Estratégia de deslizamento de realização de lucro passo a passo


Data de criação: 2023-11-28 16:05:24 última modificação: 2023-11-28 16:05:24
cópia: 0 Cliques: 778
1
focar em
1619
Seguidores

Estratégia de deslizamento de realização de lucro passo a passo

Visão geral

Esta estratégia é uma estratégia de saída que utiliza um stop-loss escalonado combinado com um stop-loss de deslizamento. Quando o primeiro stop-loss é atingido, o stop-loss é transferido para o ponto de equilíbrio de perdas e perdas, e quando o segundo stop-loss é atingido, o stop-loss é transferido para o primeiro stop-loss, permitindo um mecanismo de stop-loss escalonado. Isso pode bloquear parte dos lucros, mas mantendo um espaço maior para os lucros.

Princípio da estratégia

A estratégia consiste em:

  1. Configure um ponto de parada e três pontos de parada.
  2. Funções de cálculo que definem o número de ganhos atuais e o preço de parada.
  3. A função de julgamento que define a fase de lucro.
  4. Modificar o preço de stop-loss em diferentes estágios de ganho para atingir o stop-loss de deslizamento.

Especificamente, ele primeiro define um intervalo de parada de 100 pontos e três intervalo de parada de 100/200/300 pontos. Em seguida, define uma função para calcular o valor da vantagem com base no preço atual e no preço de abertura da posição.curProfitInPts, e a função que calcula o preço de parada de acordo com a distância dos pontoscalcStopLossPrice

A lógica chave é:getCurrentStageFunção que determina se há uma posição atual e se o número de vantagens obtidas excedeu um ponto de parada, passando para a próxima etapa se for excedido. Por exemplo, se atingir o ponto de parada 100, entra na segunda etapa, e se atingir o ponto de parada 200, entra na terceira etapa.

Finalmente, o preço de stop-loss é modificado de acordo com o estágio, permitindo o stop-loss do ponto de deslizamento. O stop-loss do primeiro estágio mantém a configuração original, o segundo estágio é movido para o equilíbrio de ganhos e perdas e o terceiro estágio é movido para o primeiro ponto de parada.

Análise de vantagens

Esta estratégia de ponto de parada escalonado tem as seguintes vantagens:

  1. O que significa que a empresa pode bloquear parte dos lucros, mas mantendo uma maior margem de lucro.
  2. O uso de um stop loss para acompanhar o preço reduz a possibilidade de retração do PRODID ou perda.
  3. O risco de uma paragem múltipla é mais controlado do que uma paragem única.
  4. A lógica da estratégia é clara, simples e fácil de entender.

Análise de Riscos

A estratégia também traz alguns riscos:

  1. A parada em etapas pode causar a impossibilidade de parar a tempo, e é melhor perder o ponto de saída. Pode ser otimizado por ajustar o número de pontos de parada.
  2. A configuração de largura de deslizamento excessiva pode levar a que o stop loss seja acionado prematuramente. É possível testar diferentes larguras de deslizamento.
  3. A impossibilidade de parar também traz um maior risco de perda. Pode-se considerar a parada rápida em determinadas circunstâncias.

Direção de otimização

A estratégia pode ser otimizada em várias direções:

  1. Testar diferentes distâncias de travagem e parâmetros de otimização.
  2. Considerar um mecanismo de parada rápida em casos especiais.
  3. Determine o ponto de parada e o ponto de perda em combinação com o julgamento dos indicadores técnicos.
  4. Optimizar a amplitude do ponto de deslizamento, equilibrar a travagem e a travagem.
Código-fonte da estratégia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
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/
// © adolgov

// @description
// when tp1 is reached, sl is moved to break-even
// when tp2 is reached, sl is moved to tp1
// when tp3 is reached - exit

//@version=4
strategy("Stepped trailing strategy example", overlay=true)

// random entry condition
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// sl & tp in points
sl = input(100)
tp1 = input(100)
tp2 = input(200)
tp3 = input(300)

curProfitInPts() =>
    if strategy.position_size > 0
        (high - strategy.position_avg_price) / syminfo.mintick
    else if strategy.position_size < 0
        (strategy.position_avg_price - low) / syminfo.mintick
    else
        0
        
calcStopLossPrice(OffsetPts) =>
    if strategy.position_size > 0
        strategy.position_avg_price - OffsetPts * syminfo.mintick
    else if strategy.position_size < 0
        strategy.position_avg_price + OffsetPts * syminfo.mintick
    else
        0
        
calcProfitTrgtPrice(OffsetPts) =>
    calcStopLossPrice(-OffsetPts)

getCurrentStage() =>
    var stage = 0
    if strategy.position_size == 0 
        stage := 0
    if stage == 0 and strategy.position_size != 0
        stage := 1
    else if stage == 1 and curProfitInPts() >= tp1
        stage := 2
    else if stage == 2 and curProfitInPts() >= tp2
        stage := 3
    stage

stopLevel = -1.
profitLevel = calcProfitTrgtPrice(tp3)

// based on current stage set up exit
// note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters
curStage = getCurrentStage()
if curStage == 1
    stopLevel := calcStopLossPrice(sl)
    strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3")
else if curStage == 2
    stopLevel := calcStopLossPrice(0)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3")
else if curStage == 3
    stopLevel := calcStopLossPrice(-tp1)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3")
else
    strategy.cancel("x")
    
// this is debug plots for visulalize TP & SL levels
plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr)
plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)