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.
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.
As vantagens desta estratégia são as seguintes:
Simples e fáceis de implementar.
Parâmetros personalizáveis adequados às diferentes condições de mercado.
As médias móveis filtram o ruído e capturam a tendência principal.
Pode incorporar outros indicadores técnicos como tendência, suporte/resistência para otimizar ainda mais.
Relação risco-recompensa controlada, tem mecanismo de stop loss.
Os riscos são:
Tendência a sinais falsos em mercados de consolidação que não apresentam tendências.
A configuração incorreta dos parâmetros pode causar tendências em falta ou demasiadas transações inválidas.
A colocação incorreta de um stop loss pode aumentar as perdas.
As fugas fracassadas podem causar perdas.
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.
Esta estratégia pode ser melhorada:
Desenvolver mecanismos de determinação de tendências e negociar apenas após a confirmação da tendência.
Adicionando filtros como volume ou volatilidade aos sinais de filtragem.
Optimização dinâmica dos períodos de média móvel.
Otimizar o mecanismo de stop loss para usar um trailing stop.
Incorporar suporte/resistência e outros indicadores para confirmar ainda mais os sinais.
Ajuste dos parâmetros com base em diferentes produtos e prazos.
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()