Com base na estratégia de rastreamento de explosão de momentum


Data de criação: 2024-03-01 11:08:43 última modificação: 2024-03-01 11:08:43
cópia: 0 Cliques: 826
1
focar em
1617
Seguidores

Com base na estratégia de rastreamento de explosão de momentum

Visão geral

A estratégia de rastreamento de explosão de dinâmica determina a ruptura do preço calculando a porcentagem de mudança de preço, combinando o sinal de filtragem de volume de transação para obter um ponto de ruptura de tendência de captura de alta probabilidade. Quando o sinal de compra é acionado, a estratégia usa o método de rastreamento de perda de preço para bloquear os lucros e evitar a retirada excessiva.

Princípio da estratégia

A estratégia é baseada em indicadores como:

  1. Percentagem de mudança de preço (isFourPercentBull) - calcula a porcentagem de mudança do preço de fechamento em relação ao preço de fechamento do dia anterior para determinar se o preço foi efetivamente quebrado;

  2. HighCloseRatio - Calcula a relação entre o preço de fechamento e o preço de fechamento para determinar a intensidade da ruptura;

  3. Volume - requer um volume maior do que o do dia anterior para garantir uma ruptura eficaz;

  4. A média móvel simples de 200 dias (SMA) - requer que o preço de fechamento e o preço de abertura estejam acima da linha de 200 dias para determinar a direção da tendência.

Quando várias das condições acima são simultaneamente satisfeitas, um sinal de compra é emitido. Em seguida, a estratégia adota um stop loss de acompanhamento de preço para bloquear o lucro e bloquear os prejuízos.

trailPrice = close * (100 - trailPercent) / 100

O trailPercent é um percentual de tracking de perda configurável. O Ensure é que, se o preço subir, a linha de parada também aumentará, bloqueando os lucros. Quando o preço retorna à linha de parada, a parada de liquidação é eliminada.

Vantagens estratégicas

É uma estratégia de ruptura típica, com as seguintes vantagens:

  1. Filtragem de múltiplos requisitos para garantir a eficácia das brechas e evitar falsas brechas;
  2. A utilização de um tracking de preços para travar perdas e bloquear lucros, evitando o máximo de retrações;
  3. A lógica da estratégia é simples, clara, fácil de entender e de otimizar.

Risco estratégico

A estratégia também apresenta alguns riscos:

  1. A probabilidade de fracasso da brecha permanece e os prejuízos não podem ser totalmente evitados;
  2. A radicalização do bloqueio de rastreamento pode ocasionar o bloqueio frequente;
  3. A configuração incorreta dos parâmetros pode causar frequência de transação excessiva ou falha de sinal.

As soluções para os riscos são:

  1. Optimizar os parâmetros, reduzir o stop loss e garantir espaço suficiente;
  2. A flexibilização apropriada das condições de ruptura para garantir que não se percam tendências claras;
  3. Testar diferentes variedades e avaliar a estabilidade da estratégia.

Direção de otimização

Tendo em conta a alta frequência de stop loss da estratégia, as seguintes direções podem ser melhoradas:

  1. Tente outros métodos de rastreamento de stop loss, como rastreamento de média, ATR e rastreamento de volatilidade.
  2. Aumentar o algoritmo de aprendizagem de máquina para determinar a melhor combinação de parâmetros de ruptura com base no treinamento de dados históricos;
  3. Aumentar os critérios auxiliares para a obtenção de breaks baseados em volume de transações, de modo a garantir a sua eficácia;
  4. Avaliar as diferenças de configuração de parâmetros de diferentes variedades para encontrar as variedades mais adequadas.

Resumir

A estratégia de rastreamento de explosão de dinâmica é, em geral, uma estratégia de rastreamento de tendências muito prática. Ela resolve o problema de que a estratégia de ruptura não pode efetivamente parar e parar, ao mesmo tempo em que capta a tendência, mas também pode controlar o risco. A introdução de meios como otimização de parâmetros e aprendizado de máquina, a estratégia também tem espaço para aumentar ainda mais a eficácia, vale a pena aprofundar a pesquisa e a aplicação.

Código-fonte da estratégia
/*backtest
start: 2023-03-01 00:00:00
end: 2023-12-10 05:20:00
period: 1d
basePeriod: 1h
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/
// © doks23

//@version=5
strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true)

//Check Vol
checkVol = input.bool(defval=false,title="IncludeAvgVolume?")
volSMAlength = input(50, title="VolumeLength")
volumeSma = ta.sma(volume, volSMAlength)
highvolume = volume >= volumeSma
volumeCond=checkVol?highvolume:true

// Profit and Loss
trailPercent    = input.float(title="Trail%", defval=3, step=0.1)

//longCondition
PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1)
MaxThreshold=input.float(10,'Max Breakout', step=0.1)
HighCloseRatio=input.float(70,'Close to High Ratio', step=1)
float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100)
float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100)
LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold
barcolor(color=(LongCond?color.yellow: na),title='BObar')
longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200)

//Input Strategy
DateCheck=  input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy')
FromDate=   input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy')
ToDate      =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy')
PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy')
ContractQty =input.int(1,'No of Contract',group = 'Strategy')

//Backtesting Date Range
TimeWindow=true
// Number of Contract
var int trade_qty=na
if(PostionSize=='Contract')
    trade_qty:=ContractQty
else
    trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty


//Position Buy
BuyTriggerPrice = ta.valuewhen(longCondition,high,0)
//Trailing price
var float trailPrice    = na
float percentMulti = (100 - trailPercent) / 100
longCondition2=longCondition and TimeWindow
if longCondition2
    strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice)
    trailPrice := close*percentMulti
if strategy.position_size>0
    trailPrice := math.max(close*percentMulti,trailPrice[1])
    if low <= trailPrice
        strategy.exit('Exit','Long',stop = trailPrice)
        if strategy.position_size==0     
            trailPrice:=na
// Plot Strategy
var float trail_long_SL=na
if strategy.position_size>0
    trail_long_SL:=trailPrice
else
    trail_long_SL:=na
//Strategy Plot
PlotMA=input.bool(title="Plot MA?", defval=false)
plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA')
plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA')
plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA')
// plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)