Estratégia de Crossover de Média Móvel Exponencial Multiperíodo Dinâmico e Sistema de Otimização de Drawdown

EMA MA SMA RSI
Data de criação: 2024-12-27 15:29:38 última modificação: 2024-12-27 15:29:38
cópia: 1 Cliques: 415
1
focar em
1617
Seguidores

Estratégia de Crossover de Média Móvel Exponencial Multiperíodo Dinâmico e Sistema de Otimização de Drawdown

Visão geral

A estratégia é um sistema de negociação quantitativa baseado em múltiplos cruzamentos de média móvel exponencial (EMA) e otimização de retração. Ele usa cinco médias móveis, EMA5, EMA8, EMA13, EMA21 e EMA50, e realiza a abertura em lote e o fechamento dinâmico de posições observando a relação cruzada entre médias móveis de diferentes períodos e a relação posicional entre preços e médias móveis. A estratégia adota um sistema de gestão de dinheiro, dividindo posições em diferentes proporções, como 20%, 40%, etc., e aumentando ou reduzindo gradualmente as posições de acordo com diferentes sinais de mercado.

Princípio da estratégia

A lógica central da estratégia inclui três condições principais de entrada e duas condições de saída:

  1. Os sinais para abrir uma posição incluem: abrir uma posição de 20% quando EMA5 cruza EMA8; adicionar uma posição de 20% quando EMA5 cruza EMA13; adicionar uma posição de 40% quando EMA8 cruza EMA21
  2. Sistema de otimização de retração: abra uma posição de 20% quando o preço atingir a EMA50; adicione 20% quando o preço romper a EMA50 novamente
  3. Sinal de fechamento: Quando EMA5 cruzar abaixo de EMA13, feche 50% da posição; quando EMA8 cruzar abaixo de EMA21, feche todas as posições
  4. Controle de risco: Quando o preço, EMA5 e EMA8 estiverem abaixo de EMA50 ao mesmo tempo, limpe imediatamente todas as posições

Vantagens estratégicas

  1. Mecanismo de confirmação múltipla: fornece sinais de negociação mais confiáveis ​​por meio de vários cruzamentos de médias móveis
  2. Gerenciamento dinâmico de posição: use diferentes relações de posição de acordo com diferentes intensidades de sinal para controlar riscos de forma eficaz
  3. Design de otimização de retração: use EMA50 como nível de suporte para compra de retração para melhorar a precisão da entrada
  4. Mecanismo de liquidação flexível: adote uma estratégia de liquidação passo a passo para controlar o retrocesso, mantendo os lucros
  5. Controle de risco perfeito: defina condições claras de stop loss para evitar perdas causadas por quedas bruscas

Risco estratégico

  1. Histerese da média móvel: a própria média móvel tem histerese, o que pode causar atraso no sinal
  2. Risco de mercado volátil: Podem ocorrer frequentes rompimentos falsos em um mercado lateral e volátil
  3. Risco de negociação excessiva: múltiplas condições de abertura podem levar a negociações excessivas
  4. Custos de execução: Negociações frequentes podem resultar em taxas de transação mais altas
  5. Risco sistêmico: pode ser tarde demais para fechar posições em um mercado volátil

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

  1. Apresentando filtros de tendência: você pode adicionar indicadores de tendência, como ADX, para executar transações somente quando houver uma tendência forte
  2. Otimize o gerenciamento de posição: ajuste dinamicamente o tamanho da posição com base na volatilidade
  3. Adicionar reconhecimento de padrões de preços: combine padrões K-line para melhorar a precisão da entrada
  4. Melhore o mecanismo de stop-profit: você pode definir uma linha de stop-profit dinâmica para melhor bloquear os lucros
  5. Adicione indicadores de sentimento de mercado: introduza RSI e outros indicadores para filtrar o status do mercado

Resumir

Essa estratégia cria um sistema de negociação relativamente completo por meio de múltiplos cruzamentos de médias móveis e sistemas de otimização de retração. Suas vantagens estão em seus múltiplos mecanismos de confirmação e gerenciamento flexível de posição, mas também tem defeitos inerentes, como atraso na média móvel. Ao introduzir métodos de otimização, como filtros de tendências, a estabilidade e a lucratividade da estratégia podem ser ainda mais melhoradas. Essa estratégia é adequada para uso em mercados com tendências óbvias, e os traders precisam otimizar os parâmetros com base nas condições reais do mercado.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Strategy with Price & EMA5 & EMA8 < EMA50 Condition", overlay=true, margin_long=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// ==============================
// INPUTS
// ==============================
lengthEMA5 = input.int(5, "EMA5 Length")
lengthEMA8 = input.int(8, "EMA8 Length")
lengthEMA13 = input.int(13, "EMA13 Length")
lengthEMA21 = input.int(21, "EMA21 Length")
lengthEMA50 = input.int(50, "EMA50 Length")

// Tam pozisyon boyutu (örnek: 100 birim)
full_position = 100.0 
qty20 = full_position * 0.2
qty40 = full_position * 0.4

// ==============================
// EMA HESAPLAMALARI
// ==============================
ema5 = ta.ema(close, lengthEMA5)
ema8 = ta.ema(close, lengthEMA8)
ema13 = ta.ema(close, lengthEMA13)
ema21 = ta.ema(close, lengthEMA21)
ema50 = ta.ema(close, lengthEMA50)

// ==============================
// KESİŞİMLERİ TESPİT FONKSİYONLARI
// ==============================
crossUp(src1, src2) => ta.crossover(src1, src2)
crossDown(src1, src2) => ta.crossunder(src1, src2)

// ==============================
// STRATEJİ KOŞULLARI
// ==============================

// Adım 1: EMA5, EMA8’i yukarı keserse %20’lik alım
step1_condition = crossUp(ema5, ema8)

// Adım 2: EMA5, EMA8’i yukarı kestikten sonra EMA5, EMA13’ü de yukarı keserse %20 daha alım
step2_condition = crossUp(ema5, ema13)

// Adım 3: EMA8, EMA21’i yukarı keserse %40 alım
step3_condition = crossUp(ema8, ema21)

// Çıkış koşulları:
// EMA5, EMA13’ü aşağı keserse pozisyonun %50’sini kapat.
// EMA8, EMA21’i aşağı keserse tüm pozisyonu kapat.
half_close_condition = crossDown(ema5, ema13)
full_close_condition = crossDown(ema8, ema21)

// Düşüşlerde EMA50'ye dokunma -> %20 alım
pullback_condition = low <= ema50 or close <= ema50

// Fiyat tekrar EMA50'nin üzerine çıkarsa -> %20 alım
above_ema50_condition = crossUp(close, ema50)

// Yeni ek koşul:  
// Fiyat, EMA5 ve EMA8’in herbiri EMA50’nin altındaysa tüm pozisyon kapat.
// Bu durum tam bir düşüş senaryosunu işaret eder.
all_below_condition = (close < ema50) and (ema5 < ema50) and (ema8 < ema50)

// Mevcut pozisyon büyüklüğü
pos_size = strategy.position_size

// ==============================
// POZİSYON GİRİŞLERİ
// ==============================
if (step1_condition and pos_size == 0)
    strategy.entry("Step1", strategy.long, qty=qty20)

if (step2_condition and strategy.opentrades < 2)
    strategy.entry("Step2", strategy.long, qty=qty20)

if (step3_condition and strategy.opentrades < 3)
    strategy.entry("Step3", strategy.long, qty=qty40)

// Pullback: Fiyat EMA50'ye temas ederse ve pozisyon yoksa %20 alım
if (pullback_condition and strategy.opentrades == 0)
    strategy.entry("Pullback", strategy.long, qty=qty20)

// Fiyat EMA50’nin üzerine çıkarsa ve pozisyon %100'e ulaşmamışsa %20 alım
if (above_ema50_condition and strategy.opentrades < 4)
    strategy.entry("Above50", strategy.long, qty=qty20)

// ==============================
// POZİSYON YÖNETİMİ (ÇIKIŞLAR)
// ==============================
if (all_below_condition and strategy.opentrades > 0)
    // Tüm pozisyonu kapat çünkü sert düşüş senaryosuna girildi
    strategy.close("Step3")
    strategy.close("Step2")
    strategy.close("Step1")
    strategy.close("Pullback")
    strategy.close("Above50")
else
    // Yarı kapatma (EMA5, EMA13 aşağı kesişimi)
    if (half_close_condition)
        totalTrades = strategy.opentrades
        // Öncelikle en son açılan en büyük pozisyonu kapatarak kademeli küçültme
        if (totalTrades >= 3)
            strategy.close("Step3")     // Bu 40% kapatır
        else if (totalTrades == 2)
            strategy.close("Step2")     // Bu 20% kapatır
        else if (totalTrades == 1)
            strategy.close("Step1")     // Bu da 20% kapatır (tamamen çıkar, ama basitlik için böyle)

    // Tam kapatma (EMA8, EMA21 aşağı kesişimi)
    if (full_close_condition)
        // Açık olan tüm pozisyonları kapat
        strategy.close("Step3")
        strategy.close("Step2")
        strategy.close("Step1")
        strategy.close("Pullback")
        strategy.close("Above50")

// ==============================
// GÖRSELLEŞTİRME
// ==============================
plot(ema5, "EMA5", color=color.new(color.yellow, 0))
plot(ema8, "EMA8", color=color.new(color.blue, 0))
plot(ema13, "EMA13", color=color.new(color.green, 0))
plot(ema21, "EMA21", color=color.new(color.red, 0))
plot(ema50, "EMA50", color=color.new(color.purple, 0))