A estratégia de rastreamento de explosão de impulso

Autora:ChaoZhang, Data: 2024-03-01 11:08:43
Tags:

img

Resumo

A estratégia de rastreamento de explosão de momento julga os avanços de preços calculando mudanças percentuais de preço e filtra sinais com volume de negociação para implementar a captura de alta probabilidade de pontos de avanço de tendência.

Princípio da estratégia

Os principais indicadores utilizados nesta estratégia para determinar os sinais de entrada são:

  1. Mudança percentual de preço (isFourPercentBull) - Calcule a mudança percentual do preço de fechamento em relação ao preço de fechamento do dia anterior para determinar se o preço efetivamente atravessou.

  2. Relação entre o preço de fechamento e o preço mais alto (HighCloseRatio) - Calcular a relação entre o preço de fechamento e o preço mais alto para determinar a força da ruptura do preço.

  3. Volume de negociação (volume) - Exige que o volume de negociação seja superior ao do dia anterior para garantir uma ruptura válida.

  4. Mediana móvel simples de 200 dias (SMA) - Exige que o preço de fechamento e o preço de abertura sejam superiores à linha de 200 dias para determinar a direção da tendência.

Quando as várias condições acima são atendidas ao mesmo tempo, um sinal de compra é emitido. Depois, a estratégia usa o rastreamento de preços para parar a perda e bloquear os lucros. Especificamente, a fórmula de cálculo para a linha de stop loss é:

trailPrice = close * (100 - trailPercent) / 100

onde trailPercent é a porcentagem configurável de stop loss. Isso garante que, enquanto os preços aumentarem, a linha de stop loss também aumentará para bloquear os lucros. Quando os preços caírem de volta para a linha de stop loss, feche as posições para parar as perdas.

Vantagens da estratégia

Como uma estratégia de fuga típica, tem as seguintes vantagens:

  1. A filtragem multicondicional assegura a validade da fuga e evita falsas fugas.

  2. Adotar o rastreamento de preços stop loss, que pode cortar ativamente as perdas e bloquear os lucros para maximizar a evitação de drawdowns.

  3. A lógica estratégica é simples e clara, fácil de compreender e de otimizar.

Riscos da Estratégia

A estratégia apresenta também alguns riscos:

  1. Ainda existe uma probabilidade de fuga fracassada que não pode evitar completamente perdas.

  2. Paradas de rastreamento excessivamente agressivas podem causar paradas frequentes.

  3. A configuração inadequada dos parâmetros pode levar a frequências de negociação excessivas ou a sinais perdidos.

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

  1. Otimizar os parâmetros e reduzir a magnitude da perda de parada para garantir espaço suficiente.

  2. Relaxar razoavelmente as condições de ruptura para garantir que as tendências claras não sejam perdidas.

  3. Teste diferentes variedades para avaliar a estabilidade da estratégia.

Orientações de otimização

Tendo em conta a elevada frequência de paradas nesta estratégia, as seguintes direcções podem ser ainda mais otimizadas:

  1. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

  2. Aumentar os algoritmos de aprendizagem de máquina para treinar julgamentos de combinações de parâmetros de melhor desempenho com base em dados históricos.

  3. Adicionar condições de julgamento auxiliares baseadas em variações de volume para garantir a eficácia.

  4. Avaliar as diferenças nas definições dos parâmetros entre as diferentes variedades para encontrar o melhor ajuste.

Conclusão

A estratégia de rastreamento de explosão de momento é uma estratégia de rastreamento de tendências muito prática em geral. Resolve o problema da incapacidade de parar efetivamente a perda e o lucro em estratégias de ruptura, enquanto ainda controla bem os riscos ao capturar tendências. Com espaço para melhorias adicionais através da introdução de otimizações e aprendizado de máquina, vale a pena pesquisa e aplicação aprofundadas.


/*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)

Mais.