Estratégia de negociação de inversão do momento da oferta e da procura

Autora:ChaoZhang, Data: 2024-01-22 17:34:05
Tags:

img

Resumo

Esta estratégia combina indicadores de impulso e médias móveis para identificar tendências de mercado e pontos de reversão para negociação quando a tendência muda de direção.

Estratégia lógica

1. Identificação da oferta e da procura

Distinguir a relação de oferta e demanda com base na faixa alta e baixa de Kline. Áreas vermelhas indicam que a oferta excede as zonas de oferta de demanda. Áreas verdes indicam que a demanda excede as zonas de oferta de demanda.

2. Julgamento da tendência da EMA

Traçar a EMA do período 200 e determinar a tendência ascendente e descendente comparando o preço com a EMA.

3. Marcação de zonas compridas e curtas

Determine as zonas de inversão com base nos últimos dois pontos altos e baixos da vela:

  • HH Zone (Higher High Zone) - 2 máximos consecutivos de velas fazem mais alto
  • LL Zone (Lower Low Zone) - 2 baixas consecutivas de velas fazem baixas baixas
  • LH Zone (Lower High Zone) - Reversão recente de alta alta para baixa alta
  • Zona HL (Zona de Baixa Superior) - Reversão recente de baixa inferior para baixa superior

4. ATR Trailing Stop Loss

Calcular o valor ATR do período 14 que será multiplicado por um fator de 2 para derivar o nível de stop loss.

5. Entrada e saída de stop loss

Monitorar a relação de preço com os pontos altos/baixos das velas anteriores. O sinal longo é acionado quando o preço ultrapassa o nível mais alto anterior. O sinal curto é acionado quando o preço ultrapassa o nível mais baixo anterior. Adiar a confirmação do sinal de entrada até a 3a vela para evitar sinais falsos. Sair com stop loss quando o preço retorna além do nível de stop loss ATR.

Análise das vantagens

  1. Utilizar múltiplos indicadores para identificar tendências e principais áreas de reversão para melhorar a taxa de rentabilidade.
  2. O ATR pode limitar efetivamente o risco de perda por transação.
  3. A confirmação do sinal de entrada atrasada minimiza a troca falsa.

Análise de riscos

  1. Confiar apenas em indicadores técnicos sem considerar informações fundamentais pode levar a falhas de negociação devido à falta de dados-chave.
  2. O ATR stop loss pode ser ultrapassado durante uma enorme volatilidade, resultando em perdas.
  3. Os sinais frequentes de reversão da EMA durante os mercados variáveis podem conduzir a uma troca excessiva.

Soluções de riscos:

  1. Complementar os dados económicos e os julgamentos políticos.
  2. Permitir um amortecedor mais amplo para o coeficiente multiplicador ATR.
  3. Ajustar o parâmetro do período ATR para evitar sensibilidade durante os intervalos.

Oportunidades de melhoria

  1. Complementar com indicadores técnicos como MACD, RSI etc. para melhorar o tempo.
  2. Testar de volta diferentes combinações de parâmetros de período e multiplicador para otimização.
  3. Considere a adição de um filtro de reabastecimento para evitar falhas no sinal.
  4. Empregar machine learning etc. para otimizar dinamicamente parâmetros.

Conclusão

Esta estratégia combina análise de oferta/demanda, determinação de tendências, identificação de reversão e módulos de gerenciamento de riscos de forma eficaz para detectar oportunidades de reversão do mercado em áreas-chave.


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

//@version=5
strategy("Supply and Demand Zones with EMA and Trailing Stop", shorttitle="SD Zones", overlay=true)

showBuySignals = input(true, title="Show Buy Signals", group="Signals")
showSellSignals = input(true, title="Show Sell Signals", group="Signals")
showHLZone = input(true, title="Show HL Zone", group="Zones")
showLHZone = input(true, title="Show LH Zone", group="Zones")
showHHZone = input(true, title="Show HH Zone", group="Zones")
showLLZone = input(true, title="Show LL Zone", group="Zones")

emaLength = input(200, title="EMA Length", group="EMA Settings")
atrLength = input(14, title="ATR Length", group="Trailing Stop")
atrMultiplier = input(2, title="ATR Multiplier", group="Trailing Stop")

// Function to identify supply and demand zones
getZones(src, len, mult) =>
    base = request.security(syminfo.tickerid, "D", close)
    upper = request.security(syminfo.tickerid, "D", high)
    lower = request.security(syminfo.tickerid, "D", low)
    multiplier = request.security(syminfo.tickerid, "D", mult)
    zonetype = base + multiplier * len
    zone = src >= zonetype
    [zone, upper, lower]

// Identify supply and demand zones
[supplyZone, _, _] = getZones(close, high[1] - low[1], 1)
[demandZone, _, _] = getZones(close, high[1] - low[1], -1)

// Plot supply and demand zones
bgcolor(supplyZone ? color.new(color.red, 80) : na)
bgcolor(demandZone ? color.new(color.green, 80) : na)

// EMA with Linear Weighted method
ema = ta.ema(close, emaLength)

// Color code EMA based on its relation to candles
emaColor = close > ema ? color.new(color.green, 0) : close < ema ? color.new(color.red, 0) : color.new(color.yellow, 0)

// Plot EMA
plot(ema, color=emaColor, title="EMA")

// Entry Signal Conditions after the third candle
longCondition = ta.crossover(close, high[1]) and (bar_index >= 2)
shortCondition = ta.crossunder(close, low[1]) and (bar_index >= 2)

// Trailing Stop using ATR
atrValue = ta.atr(atrLength)
trailStop = close - atrMultiplier * atrValue

// Strategy Entry and Exit
if (longCondition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("TrailStop", from_entry="Buy", loss=trailStop)

if (shortCondition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("TrailStop", from_entry="Sell", loss=trailStop)

// Plot Entry Signals
plotshape(series=showBuySignals ? longCondition : na, title="Buy Signal", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar)
plotshape(series=showSellSignals ? shortCondition : na, title="Sell Signal", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar)

// Plot Trailing Stop
plot(trailStop, color=color.new(color.red, 0), title="Trailing Stop")

// Plot HH, LL, LH, and HL zones
plotshape(series=showHHZone and ta.highest(high, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HH Zone", color=color.new(color.blue, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showLLZone and ta.lowest(low, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LL Zone", color=color.new(color.blue, 80), style=shape.triangledown, location=location.belowbar)
plotshape(series=showLHZone and ta.highest(high, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LH Zone", color=color.new(color.orange, 80), style=shape.triangleup, location=location.abovebar)
plotshape(series=showHLZone and ta.lowest(low, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HL Zone", color=color.new(color.orange, 80), style=shape.triangledown, location=location.belowbar)


Mais.