Estratégia da média móvel do polígono

Autora:ChaoZhang, Data: 31 de outubro de 2023 14:53:50
Tags:

img

Resumo

A estratégia de média móvel de polígonos constrói um polígono com múltiplas médias móveis de diferentes períodos e usa a ruptura do polígono como sinais de negociação.

Estratégia lógica

A estratégia traça várias EMAs, como EMAs de 3 períodos, 7 períodos e 13 períodos, para formar um canal polígono. Quando o preço quebra acima das EMAs, um sinal longo é gerado. Quando o preço quebra abaixo das EMAs, um sinal curto é gerado. Isso ajuda a evitar muitas falhas.

O código determina os sinais de ruptura comparando o preço de fechamento às EMAs usando condições como close>ema1 e ema1>ema2 e ema2>ema3.

Vantagens

A maior vantagem desta estratégia é a sua capacidade de capturar efetivamente a direção da tendência principal usando múltiplas médias móveis como filtros para evitar ruído.

Riscos e soluções

O principal risco é que esta estratégia não consegue identificar pontos de reversão da tendência e pode levar a perdas durante reversões da tendência. Configurações inadequadas do período MA também podem resultar em sinais de excesso de negociação ou atrasos. Os riscos podem ser reduzidos otimizando combinações de MA, adicionando indicadores de reversão, ampliando o intervalo de stop loss, etc.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os períodos de MA para encontrar a melhor combinação.

  2. Adicione indicadores de reversão como RSI e MACD para sair das negociações em tempo hábil.

  3. Otimizar o intervalo de stop loss e o offset para reduzir a stop loss prematura.

  4. Otimizar parâmetros para diferentes produtos para melhorar a adaptabilidade.

Resumo

A estratégia de média móvel de polígonos é geralmente um sistema de seguimento de tendências confiável e eficaz. Sua maior força é capturar a tendência principal enquanto filtra o ruído significativamente. Mas tem algumas limitações na identificação de reversões. Podemos melhorá-la por otimização de parâmetros, adicionando indicadores auxiliares, etc. É adequado para mercados com tendências óbvias e pode gerar lucros estáveis se usado corretamente.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 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/
// © Crypto-Oli

//@version=4
strategy("BLANK Strategy + TSL", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, pyramiding=1, commission_value=0.075, 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 = 2019, 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 = 2020, 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
 
////////////////////////////////////////////////////////////////////////////////


/// YOUR INPUTS BELOW - DELET EXAPLES ///


ema1=ema(close,input(3))
ema2=ema(close,input(7))
ema3=ema(close,input(13))


/// PLOTS IF YOU NEED BELOW - DELET EXAPLES ///


plot(ema1, "EMA1", color.yellow)
plot(ema2, "EMA2", color.white)
plot(ema3, "EMA3", color.blue)


/// YOUR CONDITIONS BELOW - DELET EXAPLES ///


longCondition = close>ema1 and ema1>ema2 and ema2>ema3 and time_cond
shortCondition = close<ema1 and ema1<ema2 and ema2<ema3 and time_cond

/// EXECUTION ///


if (longCondition)
    strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick)

if (shortCondition)
    strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick)

Mais.