Estratégia de velas fechadas com filtro EMA e prazos de sessão

Autora:ChaoZhang, Data: 2023-12-27 14:38:28
Tags:

img

1. Visão geral da estratégia

Esta estratégia é chamada de Up versus Down Close Candles Strategy com filtro EMA e Timeframes de Sessão. Conta o número de velas de fechamento em um determinado período de retrospectiva para determinar o sentimento do mercado, combinado com o filtro EMA e negociação em sessões específicas, para identificar sinais longos e curtos.

2. Estratégia lógica

A lógica central é contar o número de velas de up close (upCloseCount) e down close (downCloseCount) no período de retrospectiva recente. Se o upCloseCount for maior, ele indica um mercado de alta. Se o downCloseCount for maior, ele indica um mercado de baixa. O indicador EMA é usado como um filtro, considerando apenas longo quando o preço > EMA e curto quando o preço < EMA. Ele também define a sessão1 e a sessão2 como sessões de negociação.

Lógica detalhada:

O sinal longo é acionado quando: inSession é true (em sessões de negociação) e upCloseCount > downCloseCount (mais up close candles) e close > ema (preço de fechamento superior à EMA) e currentSignal não é long (nenhuma posição existente).

O sinal de curto prazo é acionado quando: inSession é true e downCloseCount > upCloseCount (mais down close candles) e close < ema (preço de fechamento inferior à EMA) e currentSignal não é short (nenhuma posição existente).

3. Análise de vantagens

  1. Captura o sentimento e a tendência do mercado através da comparação do histórico de fechamento/fechamento de velas
  2. Utilize o filtro EMA para evitar a negociação em mercados variados
  3. Evitar o ruído nas horas de negociação não importantes, definindo sessões
  4. Equilíbrio entre o seguimento da tendência e a frequência de negociação

4. Análise de riscos

  1. Pode ser induzido em erro nos mercados laterais
  2. Parâmetro EMA inadequado pode causar um filtro ineficaz
  3. Oportunidades perdidas se a sessão for configurada inadequadamente
  4. Incapaz de capturar a lacuna causada por eventos

Soluções:

  1. Otimizar o parâmetro EMA
  2. Otimizar as sessões de negociação
  3. Adicionar stop loss com base no ATR
  4. Identificar eventos, evitar lacunas

5. Orientações de otimização

  1. Otimizar as sessões de negociação
  2. Optimização dos parâmetros da EMA
  3. Adicionar stop loss baseado em ATR
  4. Identificar eventos, evitar lacunas
  5. Combinação com outros indicadores para um melhor filtro
  6. Teste e ajuste entre produtos

6. Resumo

Esta estratégia identifica os sinais de tendência comparando velas fechadas e fechadas e usando o filtro EMA, dentro de sessões de negociação pré-definidas. Tem algum efeito de tendência, mas também riscos de falsos sinais. Melhore otimizando parâmetros, adicionando stop loss, melhorando filtros etc. Avalie completamente no backtest.


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

//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)

// User input to define the lookback period, EMA period, and session strings for time frames
int lookback = input(20, title="Lookback Period")
int emaPeriod = input(50, title="EMA Period")
string session1 = input("0900-1200", title="Time Frame 1 Session")
string session2 = input("1300-1600", title="Time Frame 2 Session")

// Calculate the EMA
float ema = ta.ema(close, emaPeriod)

// State variable to track the current signal
var string currentSignal = na

// Counting up-close and down-close candles within the lookback period
int upCloseCount = 0
int downCloseCount = 0

if barstate.isnew
    upCloseCount := 0
    downCloseCount := 0
    for i = 0 to lookback - 1
        if close[i] > close[i + 1]
            upCloseCount += 1
        else if close[i] < close[i + 1]
            downCloseCount += 1

// Define the long (buy) and short (sell) conditions with EMA filter and session time frame
bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2)
bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long"
bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short"

// Enter or exit the market based on conditions
if longCondition
    currentSignal := "long"
    strategy.entry("Buy", strategy.long)

if shortCondition
    currentSignal := "short"
    strategy.entry("Sell", strategy.short)

// Exit logic for long and short positions
if currentSignal == "long" and strategy.position_size <= 0
    strategy.close("Sell")

if currentSignal == "short" and strategy.position_size >= 0
    strategy.close("Buy")

plot(ema, color=color.blue, title="EMA")


Mais.