Estratégia de negociação de rompimento de momentum com base em padrões de velas


Data de criação: 2023-11-28 10:33:31 última modificação: 2023-11-28 10:33:31
cópia: 0 Cliques: 602
1
focar em
1617
Seguidores

Estratégia de negociação de rompimento de momentum com base em padrões de velas

Este artigo descreve uma estratégia de negociação de ruptura dinâmica baseada na forma de linha K. A estratégia determina a tendência do mercado e o momento de entrada através da identificação da forma de linha K.

Visão geral da estratégia

A estratégia de ruptura de dinâmica julga principalmente os potenciais sinais de reversão, entrando no campo por meio da identificação de formas de engolir múltiplos ou de engolir o ar. Depois de identificar o sinal, siga rapidamente a tendência e realize ganhos extras.

Princípio da estratégia

A lógica de julgamento central da estratégia de ruptura dinâmica baseia-se na identificação de formas de engolir, que são divididas em multi-cabeças e cabeças vazias.

A troca múltipla de cabeças significa que o preço de fechamento do dia é maior do que o preço de abertura e o preço de fechamento da linha K anterior é menor do que o preço de abertura da linha K anterior. Esta forma geralmente indica uma mudança no sentimento do mercado e uma reversão da psicologia de muitos espaços, portanto, é um bom momento para um acompanhamento adequado.

A absorção de cabeça vazia é exatamente o oposto da absorção de cabeça múltipla, o que significa que o preço de fechamento do dia está abaixo do preço de abertura, e o preço de fechamento da linha K anterior é superior ao preço de abertura da linha K anterior. Isso também indica uma mudança no sentimento do mercado e, portanto, é uma oportunidade para a intervenção de cabeça vazia.

Depois de identificar a forma de absorção, a estratégia de ruptura dinâmica estabelece rapidamente posições, alcança o excesso de alavancagem e rastreia a potencial tendência de reversão. Além disso, a estratégia também ajusta dinamicamente o preço de parada e o preço de parada, controlando rigorosamente o risco enquanto garante o lucro.

Vantagens estratégicas

  1. O mercado de ações está em uma fase de crescimento rápido, mas o mercado de ações está em uma fase de crescimento rápido.
  2. Risco-benefício-match, parâmetros de stop-loss razoáveis
  3. A taxa de alavancagem pode ser adaptada para diferentes preferências de risco
  4. Transações totalmente automáticas, mais eficientes

Risco estratégico

  1. A forma de engolir é apenas para referência, não é possível determinar a reversão completa
  2. Probabilidade de falha de reversão, com possibilidade de se formar uma onda estreita
  3. Levação excessiva pode provocar ruptura de posição
  4. A necessidade de fundos suficientes para sustentar uma posição adequada

Otimizar para o risco pode ser feito de várias maneiras:

  1. Combinação com outros indicadores de filtragem
  2. Ajuste adequado do risco de limitação de alavancagem
  3. Aumentar os passos para a construção de postos de produção, com um custo médio por lotes
  4. Optimizar estratégias de stop loss para garantir ganhos

Otimização de Estratégia

A estratégia de impulsionar a ruptura pode ser otimizada a partir das seguintes dimensões:

  1. Verificação multifatorial da confiabilidade do sinal Indicadores como linha média, taxa de oscilação e outros podem ser adicionados para verificar o sinal de engopamento e garantir a confiabilidade do sinal.

  2. Indicadores emocionais para avaliar a psicologia do mercado A combinação de indicadores de julgamento emocional, como o índice de pânico e o índice de ganância do mercado, pode determinar com mais precisão quando o mercado se reverteu.

  3. Otimização de estratégias de stop loss Pode-se bloquear os lucros através de stop loss móvel, stop progressiva e stop móvel, reduzindo o risco de retirada.

  4. Introdução de transações algorítmicas Os modelos de algoritmos, como o aprendizado de máquina, podem ajudar a avaliar os sinais de negociação e aumentar a automatização das estratégias.

Resumir

A estratégia de ruptura de dinâmica é, em geral, uma estratégia de reversão mais típica. Ela reverte os sinais chave da linha K, julgando rapidamente e seguindo a tendência do mercado. Embora ainda haja algum risco, ela pode ser efetivamente otimizada de várias maneiras, controlando o risco de ganho em intervalos razoáveis e adequados para investidores ativamente empreendedores.

Código-fonte da estratégia
/*backtest
start: 2022-11-27 00:00:00
end: 2023-11-09 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title = "MomGulfing", shorttitle = "MomGulfing", overlay = true, initial_capital=10000, pyramiding=3, calc_on_order_fills=false, calc_on_every_tick=false, currency="USD", default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.percent, commission_value=0.04)

syear = input(2021)
smonth = input(1)
sday = input(1)
fyear = input(2022)
fmonth = input(12)
fday = input(31)
start = timestamp(syear, smonth, sday, 01, 00)
finish = timestamp(fyear, fmonth, fday, 23, 59)
date = time >= start and time <= finish ? true : false

longs = input(true)
shorts = input(true)
rr = input(2.5)
position_risk_percent = input(1)/100
signal_bar_check = input.string(defval="3", options=["1", "2", "3"])
margin_req = input(80)
sl_increase_factor = input(0.2)
tp_decrease_factor = input(0.0)
check_for_volume = input(true)
var long_sl = 0.0
var long_tp = 0.0
var short_sl = 0.0
var short_tp = 0.0
var long_lev = 0.0
var short_lev = 0.0

initial_capital = strategy.equity
position_risk = initial_capital * position_risk_percent

bullishEngulfing_st = close[1] < open[1] and close > open and high[1] < close and (check_for_volume ? volume[1]<volume : true)
bullishEngulfing_nd = close[2] < open[2] and close[1] > open[1] and close > open and high[2] > close[1] and high[2] < close and (check_for_volume ? volume[2]<volume : true)
bullishEngulfing_rd = close[3] < open[3] and close[2] > open[2] and close[1] > open[1] and close > open and high[3] > close[2] and high[3] > close[1] and high[3] < close and (check_for_volume ? volume[3]<volume : true)
bullishEngulfing = signal_bar_check == "1" ? bullishEngulfing_st : signal_bar_check == "2" ? bullishEngulfing_st or bullishEngulfing_nd : bullishEngulfing_st or bullishEngulfing_nd or bullishEngulfing_rd
long_stop_level = bullishEngulfing_st ? math.min(low[1], low) : bullishEngulfing_nd ? math.min(low[2], low[1], low) : bullishEngulfing_rd ? math.min(low[3], low[2], low[1], low) : na
rr_amount_long = close-long_stop_level
long_exit_level = close + rr*rr_amount_long
long_leverage = math.floor(margin_req/math.floor((rr_amount_long/close)*100))

bearishEngulfing_st = close[1] > open[1] and close < open and low[1] > close and (check_for_volume ? volume[1]<volume : true)
bearishEngulfing_nd = close[2] > open[2] and close[1] < open[1] and close < open and low[2] < close[1] and low[2] > close and (check_for_volume ? volume[2]<volume : true)
bearishEngulfing_rd = close[3] > open[3] and close[2] < open[2] and close[1] < open[1] and close < open and low[3] < close[2] and low[3] < close[1] and low[3] > close and (check_for_volume ? volume[3]<volume : true)
bearishEngulfing = signal_bar_check == "1" ? bearishEngulfing_st : signal_bar_check == "2" ? bearishEngulfing_st or bearishEngulfing_nd : bearishEngulfing_st or bearishEngulfing_nd or bearishEngulfing_rd
short_stop_level = bearishEngulfing_st ? math.max(high[1], high) : bearishEngulfing_nd ? math.max(high[2], high[1], high) : bearishEngulfing_rd ? math.max(high[3], high[2], high[1], high) : na
rr_amount_short = short_stop_level-close
short_exit_level = close - rr*rr_amount_short
short_leverage = math.floor(margin_req/math.floor((rr_amount_short/short_stop_level)*100))

long = longs and date and bullishEngulfing
short = shorts and date and bearishEngulfing
bgcolor(long[1] ? color.new(color.teal, 80) : (short[1] ? color.new(color.purple, 80) : na))

if long and strategy.position_size <= 0
    long_lev := long_leverage

if short and strategy.position_size >= 0
    short_lev := short_leverage

long_pos_size = long_lev * position_risk
long_pos_qty = long_pos_size/close
short_pos_size = short_lev * position_risk
short_pos_qty = short_pos_size/close

if long
    if strategy.position_size <= 0
        long_sl := long_stop_level
        long_tp := long_exit_level

    else if strategy.position_size > 0
        long_sl := long_stop_level + sl_increase_factor*rr_amount_long
        long_tp := long_exit_level - tp_decrease_factor*rr_amount_long

    strategy.entry("L"+str.tostring(long_lev)+"X", strategy.long, qty=long_pos_qty)
    label_text = str.tostring(long_lev)+"X\nSL:"+str.tostring(long_sl)+"\nTP:"+str.tostring(long_tp)
    label.new(bar_index+1, na, text=label_text, color=color.green, style=label.style_label_up, xloc=xloc.bar_index, yloc=yloc.belowbar)

else if short
    if strategy.position_size >= 0
        short_sl := short_stop_level
        short_tp := short_exit_level

    else if strategy.position_size < 0
        short_sl := short_stop_level - sl_increase_factor*rr_amount_short
        short_tp := short_exit_level + tp_decrease_factor*rr_amount_short

    strategy.entry("S"+str.tostring(short_lev)+"X", strategy.short, qty=short_pos_qty)
    label_text = str.tostring(short_lev)+"X\nSL:"+str.tostring(short_sl)+"\nTP:"+str.tostring(short_tp)
    label.new(bar_index+1, na, text=label_text, color=color.red, style=label.style_label_down, xloc=xloc.bar_index, yloc=yloc.abovebar)

if (strategy.position_size > 0)
    strategy.exit(id="L TP/SL", stop=long_sl, limit=long_tp)

if (strategy.position_size < 0)
    strategy.exit(id="S TP/SL", stop=short_sl, limit=short_tp)

sl_level = strategy.position_size > 0 ? long_sl : strategy.position_size < 0 ? short_sl : na
plot(sl_level, color=color.red, style=plot.style_linebr)

tp_level = strategy.position_size > 0 ? long_tp : strategy.position_size < 0 ? short_tp : na
plot(tp_level, color=color.green, style=plot.style_linebr)