Canal de regressão linear dinâmica e estratégia de negociação de otimização de saída Heinz

LR HA TP/SL VOL STD
Data de criação: 2025-02-18 15:18:08 última modificação: 2025-02-18 15:18:08
cópia: 2 Cliques: 374
1
focar em
1617
Seguidores

Canal de regressão linear dinâmica e estratégia de negociação de otimização de saída Heinz

A estratégia é um sistema de negociação quantitativa baseado em um canal de regressão linear e um gráfico de Heinrich Ansch, combinado com um mecanismo de stop-loss dinâmico, especialmente para aproveitar oportunidades de rápida flutuação no mercado.

Visão geral da estratégia

A estratégia usa o canal de regressão linear como sua principal estrutura de negociação, identificando potenciais oportunidades de negociação monitorando o movimento dos preços dentro do canal. Quando os preços atravessam o canal de descida e apresentam uma alta superior a 1,8%, o sistema emite um sinal de multiplicação; quando os preços atravessam o canal de ascensão e apresentam uma queda superior a 0,2%, o sistema emite um vazio. A estratégia de sinalização também integra um sistema de saída dinâmica baseado no gráfico de Einstein, bem como um mecanismo de gerenciamento de risco de parada de 10% e perda de 5%.

Princípio da estratégia

O núcleo da estratégia é baseado em um cálculo de regressão linear de 30 ciclos, definindo a largura do canal por 2 vezes o diferencial padrão. O sinal de entrada é baseado nas seguintes condições:

  1. A entrada de muitos requere que o preço suba mais de 1,8% após a ruptura do declínio e não mais de 5% em 2 horas.
  2. A entrada em aberto requer uma queda de mais de 0,2% após a ruptura do preço.
  3. Mapa de Heinrich para determinar o tempo de partida usando o período de 3 minutos
  4. 10% de stop loss e 5% de stop loss para controlar o risco

Vantagens estratégicas

  1. A combinação das características de tendência e inversão permite capturar oportunidades de mercado rápidas.
  2. O uso do gráfico de Heinrich Ansch como indicador de saída, fornece um mecanismo de saída mais robusto
  3. Controles de risco definidos, incluindo configurações de stop-loss
  4. Filtração de ruído de mercado através de um canal de regressão linear para melhorar a qualidade do sinal
  5. O preço do petróleo está em alta, mas o preço do petróleo está em alta, e o preço do petróleo está em alta.

Risco estratégico

  1. Pode ser frequente a ação de stop loss em mercados de alta volatilidade
  2. A reação do mercado pode ser lenta para uma rápida reversão
  3. A proporção fixa de stop loss pode não ser adequada para todos os cenários de mercado
  4. Os mercados horizontais podem gerar muitos sinais falsos
  5. Necessidade de computação de dados em tempo real, com uma certa exigência de velocidade de execução

Direção de otimização da estratégia

  1. Recomenda-se ajustar a proporção de stop loss de acordo com a dinâmica da volatilidade do mercado
  2. Pode ser adicionado um indicador de volume de transação como sinal de confirmação
  3. Considerar a introdução de um ciclo de regressão linear adaptativo
  4. Otimização das condições de jogo de Hynes, que pode exigir a adição de indicadores de confirmação adicionais
  5. Recomenda-se a inclusão de filtros de tempo de negociação para evitar negociações em períodos de baixa liquidez.

Resumir

A estratégia oferece aos traders um sistema de negociação relativamente completo, através da combinação de um canal de regressão linear e uma ruptura de preço. Sua vantagem é a combinação de vários indicadores técnicos e medidas de controle de risco, mas ainda precisa ser otimizada e ajustada de acordo com as condições reais do mercado.

Código-fonte da estratégia
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy('STRATEGY WITH SL', overlay=true)

// Parameters for Linear Regression
length = input.int(30, title='Linear Regression Length')  
mult = input.float(2.0, title='Channel Multiplier', step=0.1)  

// Calculate Linear Regression
regression_line = ta.linreg(close, length, 0)

// Calculate Standard Deviation
stddev = ta.stdev(close, length)

// Upper and Lower Channel Boundaries
upper_channel = regression_line + mult * stddev
lower_channel = regression_line - mult * stddev

// Plot the Linear Regression and Channel
plot(regression_line, color=color.blue, linewidth=2, title='Linear Regression Line')
plot(upper_channel, color=color.green, linewidth=1, title='Upper Channel')
plot(lower_channel, color=color.red, linewidth=1, title='Lower Channel')

// Parameters for Price Move Check (Indicator 1: 1.8% Move)
threshold_move = 1.8 
large_threshold_move = 5.0  
timeframe_for_large_move = 120  

// Calculate the percentage change over the last 3 minutes
priceChange = (close - close[3]) / close[3] * 100

// Calculate the percentage change over the last 2 hours (120 minutes)
priceChange2Hour = (close - close[120]) / close[120] * 100

// Condition for a price move greater than 1.8%
isPriceUp = priceChange > threshold_move

// Condition for price move greater than 5% in 2 hours (no alert if true)
isLargePriceMove = priceChange2Hour > large_threshold_move

// Parameters for Price Drop Check (Indicator 2: 0.2% Drop)
threshold_drop = 0.2 / 100  // 0.2% threshold

// Get the price 3 minutes ago
price_3min_ago = request.security(syminfo.tickerid, '3', close[1])

// Calculate the percentage drop over the last 3 minutes
price_drop = (close - price_3min_ago) / price_3min_ago

// Condition for a 0.2% drop
drop_condition = price_drop <= -threshold_drop

// Track whether the price has crossed the upper or lower Linear Regression channel
var bool lower_crossed = false
var bool upper_crossed = false
var bool move_after_cross = false  
var bool alert_sent = false

// Reset flags when price crosses channels
if (close < lower_channel)
    lower_crossed := true
    move_after_cross := false

if (close > upper_channel)
    upper_crossed := true
    alert_sent := false  

// Combine both conditions for price crossing lower and upper channels and move/drop conditions
final_condition_long = lower_crossed and isPriceUp and not move_after_cross and not isLargePriceMove
final_condition_short = upper_crossed and drop_condition and not alert_sent

// Set flags when conditions are met
if (final_condition_long)
    move_after_cross := true

if (final_condition_short)
    alert_sent := true

// Heikin-Ashi calculation for dynamic timeframe (3-minute)
heikin_open = (open + close) / 2
heikin_close = (open + high + low + close) / 4
heikin_high = math.max(high, math.max(heikin_open, heikin_close))
heikin_low = math.min(low, math.min(heikin_open, heikin_close))

// Conditions for EXIT signals based on Heikin-Ashi candle body
exit_long_condition = (heikin_open > lower_channel and heikin_close < lower_channel) or (heikin_open < lower_channel and heikin_close > lower_channel)
exit_short_condition = heikin_open < upper_channel and heikin_close > upper_channel

// Strategy logic: Enter long or short based on the combined conditions

// Long Entry Condition
if (final_condition_long)
    strategy.entry('Long', strategy.long)

// Short Entry Condition
if (final_condition_short)
    strategy.entry('Short', strategy.short)

// Exit Conditions (EXIT-LONG and EXIT-SHORT)
if (exit_long_condition)
    strategy.close('Long')

if (exit_short_condition)
    strategy.close('Short')

// Take Profit and Stop Loss
take_profit = 10 / 100  // 10% Take Profit
stop_loss = 5 / 100    // 5% Stop Loss

// Calculate Take Profit and Stop Loss levels based on entry price
long_take_profit = strategy.position_avg_price * (1 + take_profit)
long_stop_loss = strategy.position_avg_price * (1 - stop_loss)

short_take_profit = strategy.position_avg_price * (1 - take_profit)
short_stop_loss = strategy.position_avg_price * (1 + stop_loss)

// Apply Take Profit and Stop Loss for Long and Short positions
strategy.exit('Take Profit/Stop Loss Long', from_entry='Long', limit=long_take_profit, stop=long_stop_loss)
strategy.exit('Take Profit/Stop Loss Short', from_entry='Short', limit=short_take_profit, stop=short_stop_loss)

// Plot background color when the conditions are met (for visual aid)
bgcolor(final_condition_long ? color.new(color.green, 90) : na, title='Price Move Alert After Lower Channel Crossed')
bgcolor(final_condition_short ? color.new(color.red, 90) : na, title='Price Drop Alert After Upper Channel Crossed')
bgcolor(exit_long_condition ? color.new(color.blue, 90) : na, title='EXIT-LONG Alert')
bgcolor(exit_short_condition ? color.new(color.orange, 90) : na, title='EXIT-SHORT Alert')

// Plot shapes when conditions are met
plotshape(final_condition_long, style=shape.labelup, location=location.belowbar, color=color.green, text='1.8% Move', textcolor=color.white, size=size.small)
plotshape(final_condition_short, style=shape.labeldown, location=location.abovebar, color=color.red, text='0.2% Drop', textcolor=color.white, size=size.small)
plotshape(exit_long_condition, style=shape.labeldown, location=location.abovebar, color=color.purple, text='EXIT-LONG', textcolor=color.white, size=size.small)
plotshape(exit_short_condition, style=shape.labelup, location=location.belowbar, color=color.orange, text='EXIT-SHORT', textcolor=color.white, size=size.small)

// Alert conditions for price moves and exits
alertcondition(final_condition_long, title="Price Move > 1.8% After Lower LR Channel Cross", message="Price crossed the lower Linear Regression Channel and moved more than 1.8% in the last 3 minutes!")
alertcondition(final_condition_short, title="Price Drop > 0.2% After Upper LR Channel Cross", message="Price crossed the upper Linear Regression Channel and dropped more than 0.2% in the last 3 minutes!")
alertcondition(exit_long_condition, title="EXIT-LONG: Heikin-Ashi Candle Body Crossing Lower LR Channel", message="The body of a 3-minute Heikin-Ashi candle is crossing outside the lower Linear Regression Channel.")
alertcondition(exit_short_condition, title="EXIT-SHORT: Heikin-Ashi Candle Body Crossing Upper LR Channel", message="The body of a 3-minute Heikin-Ashi candle is crossing outside the upper Linear Regression Channel.")