Estratégia 5EMA de reversão de avanços transfronteiriços a curto prazo

Autora:ChaoZhang, Data: 2024-01-30 15:30:19
Tags:

img

Este artigo irá introduzir uma estratégia de negociação de reversão de curto prazo baseada no indicador 5EMA.

Estratégia geral

Esta é uma estratégia quantitativa de curto prazo, usada principalmente para negociação de alta frequência. A estratégia julgará simultaneamente os sinais de alta e baixa e pode negociar em ambas as direções. Os sinais de negociação são gerados quando os preços atravessam o indicador 5EMA e as posições longas ou curtas são inseridas de acordo com a direção da ruptura.

A vantagem da estratégia é capturar oportunidades de reversão de preços de curto prazo e entrar rapidamente no mercado. O principal risco vem de perdas causadas por falsas rupturas. O risco pode ser reduzido pela otimização de parâmetros.

Princípio da estratégia

  1. Usar o indicador EMA de 5 períodos para determinar a tendência de preços a curto prazo

  2. Julgar se o preço atravessa o indicador EMA

  3. Quando o preço atravessa a EMA de cima para baixo, um sinal de venda é gerado.

  4. Quando o preço atravessa a EMA de baixo para cima, um sinal de compra é gerado.

  5. Configurar stop loss e take profit para limitar perdas únicas

Como o indicador EMA pode determinar efetivamente tendências de curto prazo, ele pode capturar rapidamente oportunidades de negociação quando os preços mostram reversões significativas.

Vantagens da estratégia

  • Resposta rápida, adequada para a captura de oportunidades de negociação de curto prazo com alta frequência
  • Negociação bidirecional, pode ser longa e curta ao mesmo tempo
  • O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.
  • Configurações de parâmetros simples, estratégias fáceis de otimizar

Riscos e soluções das estratégias

  • Perdas desnecessárias causadas por riscos falsos de ruptura
    • Otimizar os parâmetros do ciclo EMA para garantir a estabilidade do indicador
  • Frequência excessiva de negociação pode facilmente perseguir altas e matar baixas
    • Limitar o número máximo de operações por dia

Optimização Direção das Estratégias

  • Otimizar os parâmetros do indicador EMA para encontrar a melhor carteira de ciclos
  • Aumentar o filtro para reduzir a probabilidade de falha
  • Limitar o número máximo de operações por dia
  • Combinar outros indicadores para determinar a direcção da tendência

Resumo

Em geral, esta é uma estratégia de ruptura de curto prazo muito prática. Usar indicadores EMA para determinar reversões de preços é muito simples e eficaz, e uma ferramenta importante para negociação quantitativa. Através da otimização de parâmetros e configurações de controle de risco, a taxa de vitória das estratégias pode ser muito melhorada, o que é altamente recomendável.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © samscripter

//@version=5
strategy("5 ema strategy",overlay = true,process_orders_on_close = true)

// Choose trade direction

t_dir = input.string("Both", title="Trade Direction",options=["Long", "Short", "Both"],group = 'Trade Direction Set')

long_side  = t_dir == "Long" or t_dir == "Both"
short_side = t_dir == "Short" or t_dir == "Both"

// number of trade
mx_num =input.int(4,title = 'number Of trade',group = 'Maximum Number Of Trade')
var hi =0.0
var lo =0.0

var group_ma1="Ema Set"

//Ema 1
on_ma=input.bool(true,"Enable EMa 1 Plot On/Off"  ,group =group_ma1)
ma_len= input.int(5, minval=1, title="Ema Length",group =group_ma1)
ma_src = input.source(close, title="Ema Source"   ,group = group_ma1)
ma_out = ta.ema(ma_src, ma_len)

// buy and sell ema condition  
plot(on_ma?ma_out:na, color=color.white, title="MA")


if close>ma_out and open>ma_out and low>ma_out and high>ma_out
    lo:=low

if close<ma_out and open<ma_out and low<ma_out and high<ma_out
    hi:=high
    
// condition when price is crossunder lo take sell and when price crossoing hi take buy 
var buyp_sl =float(na)
var sellp_sl =float(na)

//count number trade since day stra
var count_buysell=0

if  close>hi[1] 
    if strategy.position_size==0 and count_buysell<mx_num and long_side
        strategy.entry('El',strategy.long,comment = 'Long')
        count_buysell:=count_buysell+1
        buyp_sl:=math.min(low,low[1])
    hi:=na
if  close<lo[1]
    if strategy.position_size==0 and count_buysell<mx_num and short_side
        strategy.entry('Es',strategy.short,comment = 'short')
        count_buysell:=count_buysell+1
        sellp_sl:=math.max(high,high[1])
    lo:=na

//take profit multiply 

tpnew = input.float(title="take profit", step=0.1, defval=1.5, group='Tp/SL')


//stop loss previous candle high and previous candle low
buy_sl = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,buyp_sl , 0)
sell_sl= ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,sellp_sl, 0)

//take profit
takeProfit_buy = strategy.position_avg_price - ((buy_sl - strategy.position_avg_price) *tpnew)
takeProfit_sell = strategy.position_avg_price - ((sell_sl - strategy.position_avg_price) *tpnew)


//  Submit exit orders
if strategy.position_size > 0
    strategy.exit(id='XL', stop=buy_sl,limit=takeProfit_buy,comment_loss = 'Long Sl',comment_profit = 'Long Tp')

if strategy.position_size < 0
    strategy.exit(id='XS', stop=sell_sl,limit=takeProfit_sell,comment_loss = 'Short Sl',comment_profit = 'Short Tp')
    
//plot data
plot(series=strategy.position_size < 0 ?sell_sl : na, style=plot.style_circles, color=color.red, linewidth=2, title="St red Stop")
plot(series=strategy.position_size > 0 ?buy_sl  : na, style=plot.style_circles, color=color.green, linewidth=2, title="St green Stop")


// plot take profit
plot(series=strategy.position_size < 0 ? takeProfit_sell : na, style=plot.style_circles, color=color.orange, linewidth=2, title="take profit sell")
plot(series=strategy.position_size > 0 ? takeProfit_buy: na, style=plot.style_circles, color=color.blue, linewidth=2, title="take profit buy")

if ta.change(time('D'))
    count_buysell:=0

Mais.