Estratégia de negociação cruzada de média móvel

Autora:ChaoZhang, Data: 2023-11-06 16:38:22
Tags:

img

Resumo

Esta estratégia é baseada no princípio de cruzamento de médias móveis para o comércio. Ele usa duas médias móveis, gerando sinais de compra quando a média móvel de curto prazo cruza acima da média móvel de longo prazo de baixo. Sinais de venda são gerados quando o preço quebra abaixo de outra média móvel. Esta estratégia é adequada para mercados de tendência, capaz de filtrar efetivamente alguns negócios de ruído e capturar a tendência principal.

Estratégia lógica

Esta estratégia utiliza períodos de média móvel de curto e longo prazo, período de média móvel de saída e métodos de cálculo de média móvel personalizáveis pelo utilizador.

Quando a média móvel de curto prazo cruza acima da média móvel de longo prazo de baixo, um sinal de compra é gerado.

Quando o preço de fechamento se rompe abaixo da média móvel de saída, um sinal de venda é gerado.

Por conseguinte, os sinais de negociação da estratégia provêm do cruzamento das médias móveis de curto e longo prazo e da relação entre o preço de fechamento e a média móvel de saída.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. Simples e fáceis de implementar.

  2. Parâmetros personalizáveis adequados às diferentes condições de mercado.

  3. As médias móveis filtram o ruído e capturam a tendência principal.

  4. Pode incorporar outros indicadores técnicos como tendência, suporte/resistência para otimizar ainda mais.

  5. Relação risco-recompensa controlada, tem mecanismo de stop loss.

Análise de riscos

Os riscos são:

  1. Tendência a sinais falsos em mercados de consolidação que não apresentam tendências.

  2. A configuração incorreta dos parâmetros pode causar tendências em falta ou demasiadas transações inválidas.

  3. A colocação incorreta de um stop loss pode aumentar as perdas.

  4. As fugas fracassadas podem causar perdas.

  5. Os parâmetros devem ser ajustados em tempo útil para se adequarem às alterações do mercado.

As soluções incluem a otimização de parâmetros, a incorporação de outros filtros, o ajuste de paradas, a espera da confirmação da tendência antes da negociação, etc.

Orientações de otimização

Esta estratégia pode ser melhorada:

  1. Desenvolver mecanismos de determinação de tendências e negociar apenas após a confirmação da tendência.

  2. Adicionando filtros como volume ou volatilidade aos sinais de filtragem.

  3. Optimização dinâmica dos períodos de média móvel.

  4. Otimizar o mecanismo de stop loss para usar um trailing stop.

  5. Incorporar suporte/resistência e outros indicadores para confirmar ainda mais os sinais.

  6. Ajuste dos parâmetros com base em diferentes produtos e prazos.

Conclusão

Em geral, esta estratégia de cruzamento de média móvel é um sistema simples e prático de tendência. Pode ser ajustado às condições do mercado ajustando parâmetros e capturando a direção da tendência principal nos mercados de tendência. Mas os riscos como a identificação errada da tendência devem ser observados e a otimização constante é necessária para se adaptar aos mercados em mudança.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © TwoChiefs

//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//CREATE USER-INPUT VARIABLES

periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])


src1 = close
pivot = (high + low + close) / 3

//MA CALCULATION FUNCTION
ma(smoothing, src, length) => 
    if smoothing == "RMA"
        rma(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        else 
            if smoothing == "EMA"
                ema(src, length)
            else 
                if smoothing == "WMA"
                    wma(src, length)
				else
					if smoothing == "VWMA"
						vwma(src, length)
					else
						if smoothing == "SMMA"
							na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
						
						else
							if smoothing == "HullMA"
								wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))




//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)

//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")



//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na


strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)


if (not time_cond)
    strategy.close_all()


Mais.