Estratégia de baixa de curto prazo baseada nos indicadores de crossover da EMA e da força de baixa

Autora:ChaoZhang, Data: 2023-10-17 14:00:41
Tags:

img

Resumo

Esta estratégia combina o indicador crossover da EMA e o indicador bear power para gerar sinais de baixa de curto prazo.

Estratégia lógica

  1. EMA Crossover: Calcula a média móvel exponencial do período 2/20 (EMA) e gera sinais de venda quando o preço está abaixo da EMA.

  2. Bear Power: Calcula a diferença entre o preço de fechamento e o preço de abertura do dia como o valor de potência. Valor de potência maior que o limiar de venda dá sinal de baixa (-1 para curto); valor de potência menor que o limiar de compra dá sinal de alta (1 para longo); caso contrário, 0 para neutro.

  3. Combinando os dois indicadores, é gerado um sinal curto quando o cruzamento da EMA <0 e a potência de suporte <-1.

  4. A estratégia abre curto com base no sinal de venda e fecha a posição com base no sinal de saída.

Vantagens

  1. O crossover da EMA pode prever pontos de reversão de tendência com antecedência.

  2. A força de baixa capta oportunidades de venda a descoberto durante fortes quedas intradiárias.

  3. A combinação de dois indicadores ajuda a filtrar falhas e a identificar um ímpeto de baixa mais forte.

  4. Parâmetros flexíveis adequados a diferentes produtos e ambientes de mercado.

  5. A função de reversão adapta-se aos mercados bidirecionais.

Riscos

  1. O cruzamento da EMA pode ficar para trás dos pontos de virada ideais.

  2. A força de baixa pode gerar falsos sinais durante as consolidações de gama.

  3. Não consegue determinar as tendências a médio e longo prazo, com o risco de ficar preso.

  4. O ajuste dos parâmetros exigido como configurações inadequadas, como um período EMA demasiado curto ou um limiar de venda demasiado elevado, podem aumentar os falsos sinais.

  5. Preste atenção aos principais eventos econômicos para evitar sessões comerciais planejadas.

Reforço

  1. Considere adicionar stop loss ao limite por perda de negociação.

  2. Adicionar filtros como indicadores de impulso para evitar sinais de baixa fraca.

  3. Adicionar EMAs de período mais longo para determinar a direcção da tendência principal e evitar transacções contrárias à tendência.

  4. Otimizar parâmetros como período de EMA adaptativo e limiar de venda dinâmico.

  5. Considerar a combinação de vários prazos para incorporar indicadores de curto, médio e longo prazo.

Conclusão

Esta estratégia usa primeiro o crossover EMA para determinar os principais pontos de tendência e reversão, em seguida, captura fortes oportunidades de venda intradiária usando o indicador de poder de baixa, formando uma estratégia de baixa robusta de curto prazo. As vantagens estão em sua simplicidade, flexibilidade para se adaptar a diferentes ambientes de mercado e capacidade de reverter direções longas / curtas. No entanto, riscos como pontos ótimos em falta e gerar falsos sinais permanecem.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 19/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//  Bear Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BP(SellLevel,BuyLevel) =>
    pos = 0.0
    value =  close < open  ?  
                 close[1] > open ?  math.max(close - open, high - low): high - low: 
                     close > open ? 
                         close[1] > open ? math.max(close[1] - low, high - close): math.max(open - low, high - close): 
                             high - close > close - low ? 
                                 close[1] > open ? math.max(close[1] - open, high - low) : high - low : 
                                  high - close < close - low ? 
                                   close > open ? math.max(close - low, high - close) : open - low : 
                                      close > open ? math.max(close[1] - open, high - close) :
                                       close[1] < open ? math.max(open - low, high - close) : high - low
    pos := value > SellLevel ? -1 :
    	     value <= BuyLevel ? 1 :nz(pos[1], 0) 

    pos

strategy(title='Combo 2/20 EMA & Bear Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bear Power ═════●'
SellLevel = input.float(10, step=0.01, group=I2)
BuyLevel = input.float(1, step=0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBP = BP(SellLevel,BuyLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Mais.