O recurso está a ser carregado... Carregamento...

Estratégia de negociação de ruptura aberta alta fechada baixa

Autora:ChaoZhang, Data: 2024-02-02 12:03:45
Tags:

img

Resumo

A estratégia de negociação de breakout baixa é uma estratégia de tendência. Ela identifica a direção da tendência de curto prazo verificando a relação entre os preços de abertura e fechamento nos gráficos de velas. Quando uma tendência começa, entra em posições longas ou curtas para pegar o impulso rapidamente.

Estratégia lógica

A lógica central é verificar se o preço aberto é igual ao preço mais baixo ou mais alto do candelabro. Um sinal longo é desencadeado quando o preço aberto é igual ao baixo. Um sinal curto é desencadeado quando o preço aberto é igual ao alto.

Uma vez que um sinal é acionado, uma posição de tamanho fixo será aberta imediatamente. O stop loss é definido com base no indicador ATR para rastrear a volatilidade do mercado. O nível de take profit é um múltiplo RR fixo da distância de stop loss do preço de entrada. Quando o preço atinge o stop loss ou take profit, a posição será fechada em conformidade.

A estratégia também aplanou todas as posições em uma hora de corte diária definida pelo usuário, como 30 minutos antes do fechamento do mercado dos EUA.

Análise das vantagens

As principais vantagens são:

  1. Usando preços de abertura/fechamento para identificar sinais de ruptura rapidamente.

  2. Sinais de entrada claros e fáceis de implementar.

  3. Parar perdas e tirar lucros em tempo hábil para bloquear lucros e limitar perdas.

  4. Posições planas no limite diário para evitar o risco de falha durante a noite.

  5. Neutral para o mercado, aplica-se ao forex, ações, criptomoedas, etc.

Análise de riscos

Alguns riscos a considerar:

  1. Frequente stop loss com ATR em mercados agitados.

  2. Superajuste para instrumentos específicos e sessões sem filtros adicionais.

  3. O nível de lucro fixo pode ser inferior em tendências fortes.

  4. O mau timing nas posições de aplanamento pode perder tendências ou causar perdas desnecessárias.

Áreas de melhoria

Algumas maneiras de otimizá-lo ainda mais:

  1. Experimentar com várias técnicas de stop loss para diferentes condições de mercado.

  2. Adicionar filtros utilizando indicadores de momento, etc., para evitar falsos sinais.

  3. Ajustar dinamicamente os níveis de lucro com base na volatilidade do mercado.

  4. Otimizar o tempo de corte diário para vários instrumentos e sessões de negociação.

Conclusão

A estratégia de breakout Open High Close Low oferece uma maneira simples de impulsionar o comércio. Regras claras de entrada e saída tornam mais fácil de implementar e gerenciar. Mas melhorias adicionais em parâmetros como stop loss, take profit, filtros melhorariam sua robustez em mais condições de mercado.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true)

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")



Mais.