Estratégia de tendência de cruz dourada de dupla EMA e cruz mortal


Data de criação: 2023-12-29 15:46:15 última modificação: 2023-12-29 15:46:15
cópia: 1 Cliques: 701
1
focar em
1621
Seguidores

Estratégia de tendência de cruz dourada de dupla EMA e cruz mortal

Visão geral

A estratégia utiliza um binário de EMA para determinar a direção da tendência atual e, em combinação com o RSI, evita a perda de oportunidades de compra e venda, uma estratégia típica de acompanhamento de tendências.

Princípio da estratégia

  1. Calcula a média do EMA nos períodos 10 e 20, denominados ma00 e ma01 respectivamente
  2. Quando ma00 usa ma01 gera um sinal de compra
  3. Quando ma00 passa por ma01 gera um sinal de venda
  4. Ao mesmo tempo, quando o preço sobe para ma00, um sinal de compra também é gerado se a ma00 estiver acima da ma01
  5. Similarmente, quando o preço está abaixo de ma00, se a ma00 estiver abaixo de ma01 também irá gerar um sinal de venda
  6. Com esse julgamento duplo, você pode evitar perder partes de um negócio.
  7. Configurar preços de stop loss e stop loss para controlar o risco

Análise de vantagens

  1. O uso de julgamentos duplos de EMA pode filtrar de forma eficaz as brechas falsas
  2. Evite a dupla condicionalidade
  3. A configuração do Stop Loss Stop é favorável ao controle de risco

Análise de Riscos

  1. A estratégia de dupla linha de equilíbrio da EMA é uma estratégia de acompanhamento de tendências, com compras e vendas frequentes em situações de turbulência, com perda fácil
  2. Não é possível determinar com precisão o ponto de reversão da tendência, o que pode causar prejuízos
  3. A configuração inadequada do ponto de parada pode aumentar os prejuízos

Direção de otimização

  1. Pode ser apropriadamente otimizado o ciclo EMA, procurando a melhor combinação de parâmetros
  2. Pode ser adicionado a outros indicadores para melhorar a estabilidade da estratégia
  3. Pode-se definir um stop loss dinâmico, ajustando o ponto de parada em tempo real de acordo com as flutuações do mercado
Código-fonte da estratégia
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='[STRATEGY][RS]MicuRobert EMA cross V1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000)
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?color.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=11.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=10)
ma_length01 = input(title='DEMA length:',  defval=20)
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 ? false : 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 ? false : 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)

//What i add .!
pos = iff(ma01 < ma00 , 1,
	    iff(ma01 > ma00 , -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
plot(ma00, color=red, title="MA")
plot(ma01, color=blue, title="EMA")