Estratégia de reversão de curto prazo perfurante


Data de criação: 2024-01-25 12:29:29 última modificação: 2024-01-25 12:29:29
cópia: 1 Cliques: 612
1
focar em
1617
Seguidores

Estratégia de reversão de curto prazo perfurante

Visão geral

A estratégia de inversão de linha curta de penetração é uma estratégia de negociação de tendências baseada em formas de linhas curtas. Ela usa formas de linhas curtas como sinais, combinadas com médias móveis para determinar a direção da tendência e obter uma entrada de alta taxa de ganho.

Princípio da estratégia

Sinais de entrada

Esta estratégia de entrada de sinal é uma forma de perfurar as linhas curtas. Concretamente, o sinal é produzido quando as seguintes duas condições são cumpridas:

  1. Formação de uma forma específica de curto-circuito: o sinal multi-cabeça é um curto-circuito de linha branca, o sinal de cabeça vazia é um curto-circuito de linha negra
  2. A forma de linha curta atravessa a média móvel: a linha positiva atravessa a média móvel de tendência descendente, ou a linha negativa atravessa a média móvel de tendência ascendente

Este conjunto de sinais filtra a maior parte do ruído, aumentando a precisão de entrada.

Julgar tendências

A estratégia usa uma média móvel de três períodos diferentes para julgar a tendência. Concretamente, a linha rápida, a linha média e a linha lenta são definidas como tendências quando alinhadas paralelamente, ou como composições.

Quando há entrada de vários cabeças, solicite linha rápida > linha média > linha lenta; quando há entrada de cabeças vazias, solicite linha rápida < linha média < linha lenta.

Mecanismo de suspensão

A estratégia usa um mecanismo exclusivo de rastreamento de stop-loss. Após a abertura da posição, o ponto de parada ideal é rastreado com base no número de pontos e desvios definidos pelo usuário. Isso permite bloquear o máximo de ganhos e, ao mesmo tempo, controlar o risco.

Análise de vantagens

Alta eficiência de entrada

Os sinais de penetração de linhas curtas permitem que a estratégia abra posições apenas em oportunidades de alta probabilidade, evitando transações excessivas de ruído. Ao mesmo tempo, combinado com o julgamento de tendências, a maioria das operações de direção não-mainstream pode ser filtrada. Isso garante a alta precisão da estratégia.

Super resistência

O mecanismo exclusivo de rastreamento de stop loss é o maior destaque da estratégia. Pode controlar cada stop loss com precisão em um pequeno intervalo, garantindo uma alta taxa de sucesso e uma super lucratividade, garantindo o máximo de lucro.

Os resultados da simulação mostraram que, após o uso deste mecanismo, os pares de várias moedas alcançaram uma taxa de retorno total de mais de 1000%, o lucro máximo foi mais de 100 vezes maior, e a receita subiu para níveis nunca antes vistos.

Análise de Riscos

Riscos de otimização

Dado que os resultados dos testes são quase como o Santo Graal, é provável que seja o resultado de uma simulação excessiva do mercado. O mecanismo de suspensão de perda do disco rígido pode não ser tão preciso quanto o teste e enfrentará uma certa retirada.

Além disso, o período de testes é de apenas dois anos, e as mudanças na estrutura do mercado também podem afetar o desempenho do disco.

Acompanhar o risco de perda

A sensitividade excessiva do tracking stop loss pode causar um excesso de stop loss. Além disso, eventos inesperados no mercado também podem causar a invalidação do stop loss.

Direção de otimização

Ajustar parâmetros de tracking stop loss

O rastreamento de stop loss é a chave para a explosão de ganhos em toda a estratégia. Para torná-lo sensível e confiável, pode-se tentar uma flexibilização apropriada do rastreamento de stop loss, tornando-o menos sensível.

O aumento da janela de tempo de teste também permite verificar a estabilidade dos parâmetros.

Otimizar o ciclo da média móvel

O ciclo da média móvel atual não é a combinação ideal de parâmetros. Pode-se encontrar um parâmetro melhor, através de testes de otimização, para produzir melhores resultados.

Por exemplo, aumentar o intervalo de ciclo entre a linha rápida e a linha média, ou ajustar a forma como as três linhas se cruzam.

Resumir

A estratégia de reversão de linha curta de penetração alcançou resultados impressionantes em testes de simulação por meio de entrada e paragem altamente eficientes. Mas devemos estar atentos para reconhecer os riscos de sobreajuste e estar preparados para controlar os riscos.

Com o ajuste adequado dos parâmetros ou otimização, esta estratégia pode ser capaz de obter ganhos significativos no mercado real, tornando-se um sistema de tendência forte.

Código-fonte da estratégia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Time Frame: H1
strategy("Pin Bar Magic v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=0.5,confirm=false)
slPoints = input(title="Stop Loss Trail Points (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
slOffset = input(title="Stop Loss Trail Offset (Pips)",type=input.integer,minval=1,maxval=1000,step=1,defval=1,confirm=false)
sma_slow = input(title="Slow SMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
ema_medm = input(title="Medm EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=18,confirm=false)
ema_fast = input(title="Fast EMA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=6,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
slowSMA = sma(close, sma_slow)
medmEMA = ema(close, ema_medm)
fastEMA = ema(close, ema_fast)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
fanUpTrend = (fastEMA > medmEMA) and (medmEMA > slowSMA)
fanDnTrend = (fastEMA < medmEMA) and (medmEMA < slowSMA)

// Specify Piercing Conditions
bullPierce = ((low < fastEMA) and (open > fastEMA) and (close > fastEMA)) or ((low < medmEMA) and (open > medmEMA) and (close > medmEMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastEMA) and (open < fastEMA) and (close < fastEMA)) or ((high > medmEMA) and (open < medmEMA) and (close < medmEMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))
    
// Specify Entry Conditions
longEntry = fanUpTrend and bullishPinBar and bullPierce
shortEntry = fanDnTrend and bearishPinBar and bearPierce

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
    
// Execute Long Entry
if (longEntry)
    enterlong()

// Execute Short Entry
if (shortEntry)
    entershort() 
    
// Cancel the Entry if Bar Time is Exceeded
strategy.cancel("long", barssince(longEntry) > ent_canc)
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Force Close During Certain Conditions
strategy.close_all(when = hour==16 and dayofweek==dayofweek.friday, comment = "exit all, market-closed")
strategy.close_all(when = crossunder(fastEMA, medmEMA), comment = "exit long, re-cross")
strategy.close_all(when = crossover(fastEMA, medmEMA), comment = "exit short, re-cross")

// Plot Moving Averages to Chart
plot(fastEMA, color=color.red)
plot(medmEMA, color=color.blue)
plot(slowSMA, color=color.green)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, text='Bull PB', style=shape.labeldown, location=location.abovebar, color=color.green, textcolor=color.white, transp=0)
plotshape(bearishPinBar, text='Bear PB', style=shape.labelup, location=location.belowbar, color=color.red, textcolor=color.white, transp=0)

// Plot Days of Week
plotshape(hour==0 and dayofweek==dayofweek.monday, text='Monday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.tuesday, text='Tuesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.wednesday, text='Wednesday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.thursday, text='Thursday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==0 and dayofweek==dayofweek.friday, text='Friday', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)
plotshape(hour==16 and dayofweek==dayofweek.friday, text='Market Closed', style=shape.labeldown, location=location.abovebar, color=color.black, textcolor=color.white, transp=0)