A tendência cruzada da média móvel de Zhukov seguindo a estratégia

Autora:ChaoZhang, Data: 2023-12-12 12:24:11
Tags:

img

Resumo

Esta estratégia usa cruzamento de média móvel e o indicador ATR para implementar a tendência automatizada após a negociação. Ele vai longo quando a EMA rápida cruza acima da EMA lenta e fica curto quando a EMA rápida cruza abaixo da EMA lenta. Ao mesmo tempo, ele usa o indicador ATR para julgar a direção da tendência e só envia sinais de negociação quando a ATR indica que uma tendência está presente.

Estratégia lógica

A estratégia baseia-se principalmente em dois indicadores técnicos:

  1. Linhas EMA: usa duas linhas EMA com parâmetros diferentes, rápida e lenta. Quando a EMA rápida cruza acima da EMA lenta, é considerada um sinal longo. Quando a EMA rápida cruza abaixo da EMA lenta, é considerada um sinal curto.

  2. Indicador ATR: O indicador ATR mede a magnitude e a força das flutuações de preços para julgar a tendência do movimento atual.

Ao combinar os crossovers da EMA para identificar oportunidades de negociação e o filtro ATR para evitar regimes de baixa tendência, a estratégia visa evitar ser esmagada durante a agitação do mercado.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. O ATR é utilizado para determinar a posição do mercado e para determinar a posição do mercado.

  2. Usando uma lógica de cruzamento rápida versus lenta da EMA para identificar sinais de negociação.

  3. A sensibilidade e a suavidade da EMA são personalizáveis através de ajustes de parâmetros.

  4. Completo sistema de negociação automatizado construído com apenas dois indicadores simples, facilmente implementado no editor Pine.

  5. Necessidade mínima de ajuste contínuo dos parâmetros, abordagem "set and forget".

Análise de riscos

Alguns riscos a ter em conta incluem:

  1. Os crossovers da EMA podem gerar sinais falsos, levando a perdas desnecessárias.

  2. O julgamento da tendência do ATR também pode ser propenso a erros, perdendo oportunidades de negociação.

  3. Os principais acontecimentos noticiosos podem desencadear reversões que os crossovers rápidos da EMA podem perder, exigindo intervenção manual.

Estes riscos podem ser reduzidos através de otimizações.

Orientações de otimização

As principais direcções de otimização incluem:

  1. Adicionar outros indicadores para criar um sistema combinado e melhorar a precisão do sinal.

  2. Seleção dos parâmetros EMA e ATR mais adequados ao mercado em particular com base no símbolo e no prazo negociados.

  3. Implementação de otimização de parâmetros dinâmicos através do aprendizado de máquina para ajustar indicadores com base nas condições atuais do mercado em vez de utilizar valores estáticos fixos.

Conclusão

Em geral, esta é uma tendência muito prática de seguir estratégia. Com apenas uma combinação simples de dois indicadores, ele constrói um sistema de negociação relativamente completo. Através de ajustes de parâmetros, ele pode ser adaptado para os traders com diferentes preferências e estilos. Ao mesmo tempo, a expansão e otimização adicionais podem tornar o desempenho da estratégia ainda melhor. A lógica de negociação simples, mas eficaz, juntamente com forte potencial de otimização, torna esta uma estratégia quantitativa que vale a pena pesquisar e aplicar a longo prazo.


/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This strategy has been created for GMT trade 4h by Zhukov


//@version=5
strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD)

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999)
emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both')

// Options that configure the backtest date range
startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00'))
endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59'))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
emapos = ta.ema(close,200)

// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2)
plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2)
plot(series=emapos, color=color.new(color.red, 0), linewidth=2)


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'

// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA) 
shortCondition = ta.crossunder(fastEMA, slowEMA) 
// ORDERS:
// Set take profit and stop loss percentages
take_profit_percent = input(0, title="Take Profit Percent")
stop_loss_percent = input(0, title="Stop Loss Percent")
// Submit entry (or reverse) orders


atrPeriod = input(12, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if longCondition and inDateRange 
    if longOK and direction<0

        strategy.entry(id='long', direction=strategy.long, alert_message = "LONG")
if shortCondition and inDateRange 
    if shortOK and direction>0
        strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT")

// Submit exit orders in the cases where we trade only long or only short

if strategy.position_size > 0 and take_profit_percent
    strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent)
if strategy.position_size > 0 and stop_loss_percent
    strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent)

if strategy.position_size < 0 and stop_loss_percent
    strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent)
if strategy.position_size < 0 and take_profit_percent
    strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)


Mais.