Estratégia de negociação baseada em EMA


Data de criação: 2023-11-24 15:46:48 última modificação: 2023-11-24 15:46:48
cópia: 0 Cliques: 1288
1
focar em
1617
Seguidores

Estratégia de negociação baseada em EMA

Visão geral

A estratégia utiliza 4 EMAs de diferentes períodos, formando sinais de negociação de acordo com a ordem em que são colocados, semelhantes aos sinais de trânsito de três luzes vermelhas, amarelas e verdes, daí o nome de estratégia de negociação de sinais de trânsito de trânsito. Ela julga o mercado de forma integrada de tendência e reversão, com o objetivo de melhorar a precisão das decisões de negociação.

Princípio da estratégia

  1. Configure 3 linhas médias de EMA de linha rápida (8 ciclos), média (14 ciclos) e lenta (16 ciclos) e adicione uma linha média de EMA de ciclo longo (100 ciclos) como filtro.

  2. Determine a ordem de alinhamento da linha média rápida e lenta 3 e a interseção com o filtro, determinando o momento de fazer mais e fazer menos:

  • Quando a linha rápida atravessa a linha média ou a linha média atravessa a linha lenta, julga-se que faz mais sinais

  • Quando atravessamos a linha rápida abaixo da linha central, julgamos que é um sinal de Pinto

  • Quando a linha rápida atravessa a linha média ou a linha média atravessa a linha lenta, é considerado um sinal de vazio

  • Quando atravessa a linha rápida na linha central, julga-se um sinal de vazio

  1. Determine a direção e a intensidade da tendência através de uma sequência de linhas médias rápidas e lentas, combinando linhas médias e filtros para determinar pontos de inversão cruzados, permitindo a combinação orgânica de rastreamento de tendências e captura de inversão.

Análise de vantagens

A estratégia integra os benefícios de acompanhar tendências e inverter negociações para aproveitar melhor as oportunidades de mercado. As principais vantagens são:

  1. Utilização de múltiplos EMAs, melhor discernimento e menor falha
  2. Flexibilizar a configuração para evitar a perda de oportunidades de negociação
  3. Utilização de um triângulo com uma linha média de curto e longo períodos e um bom senso.
  4. Condições de parada de parada personalizáveis, controle de risco no local

A estratégia pode ser adaptada a mais variedades com otimização de parâmetros, mostrando maior lucratividade e estabilidade em retrospectivas.

Análise de Riscos

Os principais riscos desta estratégia são:

  1. A confusão na ordem de alinhamento de múltiplos EMAs aumenta a dificuldade de julgamento e gera hesitação nas negociações
  2. Falsos sinais de flutuação anormal do mercado que não podem ser filtrados de forma eficaz, causando prejuízos em caso de grandes turbulências
  3. Os parâmetros não são ajustados em tempo hábil, e as condições de stop-loss podem ser muito amenas ou rigorosas, resultando em lucros perdidos ou perdas excessivas

Recomenda-se que a estabilidade da estratégia seja melhorada e os riscos controlados, por meio da otimização dos parâmetros, do estabelecimento de níveis de stop loss e da operação cautelosa.

Direção de otimização

As principais melhorias da estratégia são:

  1. Ajustar os parâmetros do ciclo da linha média da EMA para mais variedades
  2. Adição de filtros para outros indicadores, como MACD, Brinks e outros, para melhorar a precisão de julgamento
  3. Optimizar a Stop Loss Ratio para atingir o melhor equilíbrio entre riscos e ganhos
  4. Adição de mecanismos de parada de perda adaptativos, como a parada ATR, para controlar ainda mais o risco de queda

A estabilidade e a lucratividade da estratégia podem ser continuamente melhoradas através de ajustes de parâmetros multifacetados e da introdução de meios de controle de risco.

Resumir

A estratégia de negociação de semáforos integra o rastreamento de tendências e o julgamento de reversão, usando 4 grupos de EMA para formar sinais de negociação em linha reta, adaptando-se a mais variedades por meio de otimização de parâmetros, mostrando uma forte capacidade de lucro em retrospectivas. A seguir, com o controle de risco adicional e a introdução de indicadores diversificados, espera-se ser uma estratégia de negociação quantitativa estável e eficiente.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © maxits

// 4HS Crypto Market Strategy
// This strategy uses 4 ema to get Long or Short Signals
// Length are: 8, 14, 16, 100
// We take long positions when the order of the emas is the following:
// green > yellow > red (As the color of Traffic Lights) and they are above white ema (Used as a filter for long positions)
  
// We take short positions when the order of the emas is the following:
// green < yellow < red (As the color of inverse Traffic Lights) and they are below white ema (Used as a filter for short positions)

//@version=4
strategy(title="Trafic Lights Strategy",
         shorttitle="TLS",
         overlay=true,
         initial_capital=1000,
         default_qty_value=20,
         default_qty_type=strategy.percent_of_equity,
         commission_value=0.1,
         pyramiding=0
         )

// User Inputs
// i_time         = input(defval = timestamp("28 May 2017 13:30 +0000"), title = "Start Time", type = input.time) //Starting time for Backtesting

sep1           = input(title="============ System Conditions ============", type=input.bool, defval=false)

enable_Long    = input(true, title="Enable Long Positions")   // Enable long  Positions
enable_Short   = input(true, title="Enable Short Positions") // Enable short Positions

sep2           = input(title="============ Indicator Parameters ============", type=input.bool, defval=false)

f_length       = input(title="Fast EMA Length",   type=input.integer, defval=8,   minval=1) 
m_length       = input(title="Medium EMA Length", type=input.integer, defval=14,   minval=1) 
s_length       = input(title="Slow EMA Length",   type=input.integer, defval=16,  minval=1) 
filter_L       = input(title="EMA Filter",        type=input.integer, defval=100, minval=1) 
filterRes      = input(title="Filter Resolution", type=input.resolution, defval="D")        // ema Filter Time Frame

sep3           = input(title="============LONG Profit-Loss Parameters============", type=input.bool, defval=false)

e_Long_TP      = input(true, title="Enable a Profit Level?")
e_Long_SL      = input(false, title="Enable a S.Loss Level?")
e_Long_TS      = input(true, title="Enable a Trailing Stop?")           
long_TP_Input  = input(40.0,   title='Take Profit %',   type=input.float,   minval=0)/100
long_SL_Input  = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100 
atrLongMultip  = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)   // Parameters to calculate Trailing Stop Loss
atrLongLength  = input(14,    title='ATR Length',      type=input.integer, minval=1)

sep4           = input(title="============SHORT Profit-Loss Parameters============", type=input.bool, defval=false)

e_Short_TP     = input(true, title="Enable a Profit Level?")
e_Short_SL     = input(false, title="Enable a S.Loss Level?")
e_Short_TS     = input(true, title="Enable a Trailing Stop?")
short_TP_Input = input(30.0,   title='Take Profit %',   type=input.float,   minval=0)/100
short_SL_Input = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100
atrShortMultip = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)
atrShortLength = input(14,    title='ATR Length',      type=input.integer, minval=1)

// Indicators

fema   = ema(close, f_length)
mema   = ema(close, m_length)
sema   = ema(close, s_length)
filter = security(syminfo.tickerid, filterRes, ema(close, filter_L))

plot(fema,   title="Fast EMA",   color=color.new(color.green,  0))
plot(mema,   title="Medi EMA",   color=color.new(color.yellow, 0))
plot(sema,   title="Slow EMA",   color=color.new(color.red,    0))
plot(filter, title="EMA Filter", color=color.new(color.white,  0))

// Entry Conditions

longTrade  = strategy.position_size >  0
shortTrade = strategy.position_size <  0
notInTrade = strategy.position_size == 0
inTrade    = strategy.position_size != 0
priceEntry = strategy.position_avg_price

goLong  = fema > mema and mema > sema and fema > filter and  enable_Long  and (crossover (fema, mema) or crossover (mema, sema) or crossover (sema, filter))
goShort = fema < mema and mema < sema and fema < filter and  enable_Short and (crossunder (fema, mema) or crossunder (mema, sema) or crossunder (sema, filter))

close_L = crossunder(fema, mema)
close_S = crossover (fema, mema)

// Profit and Loss conditions

// Long
 
long_TP = priceEntry * (1 + long_TP_Input)  // Long Position Take Profit Calculation
long_SL = priceEntry * (1 - long_SL_Input)  // Long Position Stop Loss Calculation
atrLong = atr(atrLongLength)                // Long Position ATR Calculation
long_TS = low - atrLong * atrLongMultip

long_T_stop  = 0.0                          // Code for calculating Long Positions Trailing Stop Loss/
long_T_stop := if (longTrade)
    longStop = long_TS
    max(long_T_stop[1], longStop)
else 
    0
    
//Short

short_TP = priceEntry * (1 - short_TP_Input) // Long  Position Take Profit Calculation
short_SL = priceEntry * (1 + short_SL_Input) // Short Position Stop Loss Calculation
atrShort = atr(atrShortLength)               // Short Position ATR Calculation
short_TS = high + atrShort * atrShortMultip

short_T_stop   = 0.0                // Code for calculating Short Positions Trailing Stop Loss/
short_T_stop  := if shortTrade
    shortStop  = short_TS
    min(short_T_stop[1], shortStop)
else 
    9999999

// Strategy Long Entry

if goLong and notInTrade 
    strategy.entry("Go Long", long=strategy.long, comment="Go Long", alert_message="Open Long Position")

if longTrade and close_L
    strategy.close("Go Long", when=close_L, comment="Close Long", alert_message="Close Long Position")
    
if e_Long_TP    // Algorithm for Enabled Long Position Profit Loss Parameters
    if (e_Long_TS and not e_Long_SL)
        strategy.exit("Long TP & TS", "Go Long", limit = long_TP, stop = long_T_stop)
    else
        if (e_Long_SL and not e_Long_TS)
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP, stop = long_SL)
        else 
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP)
else
    if not e_Long_TP 
        if (e_Long_TS and not e_Long_SL)
            strategy.exit("Long TP & TS", "Go Long", stop = long_T_stop)
        else
            if (e_Long_SL and not e_Long_TS)
                strategy.exit("Long TP & TS", "Go Long",stop = long_SL)
    

// Strategy Short Entry

if goShort and notInTrade 
    strategy.entry("Go Short", long=strategy.short, comment="Go Short", alert_message="Open Short Position")

if shortTrade and close_S
    strategy.close("Go Short", comment="Close Short", alert_message="Close Short Position")

if e_Short_TP   // Algorithm for Enabled Short Position Profit Loss Parameters
    if (e_Short_TS and not e_Short_SL)
        strategy.exit("Short TP & TS", "Go Short", limit = short_TP, stop = short_T_stop)
    else
        if (e_Short_SL and not e_Short_TS)
            strategy.exit("Short TP & SL", "Go Short",limit = short_TP, stop = short_SL)
        else 
            strategy.exit("Short TP & TS", "Go Short",limit = short_TP)
else
    if not e_Short_TP 
        if (e_Short_TS and not e_Short_SL)
            strategy.exit("Short TS", "Go Short", stop = short_T_stop)
        else
            if (e_Short_SL and not e_Short_TS)
                strategy.exit("Short SL", "Go Short",stop = short_SL)

// Long  Position Profit and Loss Plotting

plot(longTrade and e_Long_TP  and long_TP                          ? long_TP      : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_SL  and long_SL and not e_Long_TS        ? long_SL      : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_TS  and long_T_stop and not e_Long_SL    ? long_T_stop  : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)

// Short Position Profit and Loss Plotting

plot(shortTrade and e_Short_TP and short_TP                        ? short_TP     : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_SL and short_SL and not e_Short_TS     ? short_SL     : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_TS and short_T_stop and not e_Short_SL ? short_T_stop : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)