Com base na estratégia de negociação de cruzamento de média móvel dupla


Data de criação: 2023-12-27 16:07:49 última modificação: 2023-12-27 16:07:49
cópia: 2 Cliques: 681
1
focar em
1623
Seguidores

Com base na estratégia de negociação de cruzamento de média móvel dupla

Visão geral

Esta estratégia é baseada no cruzamento de ouro e cruzamento de morte de uma média móvel para gerar sinais de compra e venda. Concretamente, a estratégia usa simultaneamente a média móvel de 5 dias (EMA) e a média móvel de 34 dias (DEMA). Um sinal de compra é gerado quando uma EMA de 5 dias de curto prazo atravessa a DEMA de 34 dias de longo prazo de baixo; e um sinal de venda é gerado quando uma EMA de 5 dias de curto prazo atravessa a DEMA de 34 dias de longo prazo de cima para baixo.

Princípio da estratégia

  1. Calcular o 5o EMA e o 34o DEMA
  2. Quando a curta EMA de 5 dias cruza a DEMA de 34 dias de cima para baixo, gera um sinal de compra
  3. Quando a curta EMA de 5 dias atravessa a longa DEMA de 34 dias de cima para baixo, gera um sinal de venda
  4. Opção de negociar apenas em períodos de tempo específicos
  5. Pode optar por usar tracking stop loss

Esta estratégia combina o acompanhamento de tendências e o cruzamento de linhas médias, com um efeito estável. A média móvel, como um indicador de acompanhamento de tendências, identifica eficazmente as tendências do mercado. O uso combinado da EMA e da DEMA permite a suavização eficaz dos dados de preços para gerar sinais de negociação.

Análise de vantagens

  1. A estratégia é simples, clara e fácil de entender.
  2. A combinação de médias móveis é usada tanto para julgar tendências quanto para processar dados de preços de forma suave.
  3. A intersecção de curto e longo prazo de medias permite um sinal de negociação antecipado em grandes pontos de viragem do mercado
  4. Pode ser optimizado com parâmetros para ajustar o comprimento da linha média para diferentes variedades e períodos
  5. A integração de dois fatores pode aumentar a estabilidade da estratégia

Análise de Riscos

  1. Em situações de tremores, pode haver mais sinais errados
  2. O comprimento médio inadequado pode causar atraso no sinal
  3. Inadequadas configurações de tempo de negociação e de stop loss podem afetar os lucros estratégicos

Estes riscos podem ser reduzidos através da adaptação do comprimento da linha média, da optimização do tempo de negociação e da configuração de um stop loss razoável.

Direção de otimização

  1. Ajustar os parâmetros de comprimento da linha média para diferentes variedades e períodos de negociação
  2. Parâmetros de tempo de negociação de otimização, negociação no período de tempo ativo principal
  3. Comparar os prós e os contras de Stop Fixed e Trace Stop
  4. Teste do impacto de diferentes métodos de cobrança na estratégia

Resumir

Esta estratégia gera sinais de negociação através de dupla linha de equilíbrio de cruzamento, ao mesmo tempo em combinação com o acompanhamento de tendências e processamento de dados suave, é uma estratégia de acompanhamento de tendências simples e prático. Através de ajuste de parâmetros e otimização de regras, pode ser adaptado a diferentes variedades e períodos de negociação, dar sinais de negociação antecipadamente em grandes mudanças de tendência, para evitar sinais errados.

Código-fonte da estratégia
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",false]]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true)
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:', defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
    _ema1=ema(_src, _length)
    _ema2=ema(_ema1, _length)
    _d=_ema1-_ema2
    _zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)