Estratégia de acompanhamento de tendência de média móvel de cruzamento aberto-fechado


Data de criação: 2024-01-15 14:24:27 última modificação: 2024-01-15 14:24:27
cópia: 0 Cliques: 857
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendência de média móvel de cruzamento aberto-fechado

Visão geral

A estratégia de acompanhamento de tendências de média móvel cruzada de fechamento aberto é uma estratégia de acompanhamento de tendências baseada em médias móveis. A estratégia julga a tendência atual do mercado, calculando a média móvel do preço de fechamento e a média móvel do preço de fechamento; faça mais quando a média móvel do preço de fechamento cruza a média móvel do preço de fechamento; faça um vazio quando a média móvel do preço de fechamento cruza a média móvel do preço de fechamento.

Princípio da estratégia

A lógica central da estratégia baseia-se na relação entre o preço de abertura e o preço de fechamento para julgar a tendência atual. O preço de abertura reflete a relação entre a oferta e a demanda no mercado atual e a psicologia de negociação, e o preço de fechamento reflete o resultado do dia. Em geral, se o preço de fechamento for maior do que o preço de abertura, a tendência do dia é forte e o clima é mais pesado; se o preço de fechamento for menor que o preço de abertura, a tendência do dia é fraca e o clima é mais pesado.

A estratégia usa essa lógica para determinar a direção da tendência atual, calculando a média móvel do preço de abertura e do preço de fechamento. Concretamente, suas regras de decisão são as seguintes:

  1. Quando a média móvel do preço de fechamento é coberta pela média móvel do preço de abertura, faça mais. Isso indica que o clima de multiplicação atual está aumentando e pode entrar em multiplicação.

  2. Quando a média móvel do preço de fechamento é atravessada pela média móvel do preço de abertura, a vaga é feita. Isso significa que o clima de vaga atual está aumentando e pode ser inserido na vaga.

  3. Quando ocorre um sinal de reversão, a posição original pára de perder.

A estratégia também configura um stop loss de rastreamento para bloquear os lucros. Após a entrada, o preço de entrada será calculado em tempo real para o diferencial de pontos entre o preço atual. Quando o preço é executado acima do número de pontos de stop loss definidos, a linha de stop loss irá subir para bloquear parte dos lucros.

Em geral, a estratégia julga a tendência por um período de tempo de comprimento de ciclo da média móvel; mantém posições em apenas uma direção de cada vez; a parada de posição original é uma abordagem reversa direta e não tem configurações semelhantes à parada de ATR; há uma configuração de rastreamento de parada para bloquear o lucro.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Regras de decisão claras e simples│ para avaliar as tendências com base nas relações de abertura e fechamento, de fácil compreensão e de fácil otimização dos parâmetros│

  2. Flexível para escolher a variedade de média móvelHá uma dúzia de médias móveis para escolher, com combinações flexíveis para encontrar os melhores parâmetros.

  3. Resolução de uso flexívelPara que o sinal seja mais sensível e oportuno, a resolução da estratégia pode ser definida em 3 a 4 vezes a do gráfico.

  4. Mecanismos de amortizaçãoA estratégia inclui um stop loss de rastreamento, que permite controlar efetivamente a perda individual e a retração.

  5. Alteração de duração da posiçãoA volatilidade e o período de detenção podem ser controlados por meio de ajustes nos parâmetros das médias móveis.

  6. Flexível ajuste de risco-benefícioO risco pode ser controlado por meio de ajustes nos pontos de parada e desvio.

Análise de Riscos

A estratégia também apresenta alguns riscos, que se concentram nos seguintes aspectos:

  1. Perda de um ponto de viragem❚ O sinal de saída da estratégia pode ser um pouco mais tarde do que a reversão de preço, resultando em um corte de cauda. Pode ser mitigado por uma redução apropriada do ciclo da média móvel.

  2. Não é adequado para uma cidade em tremor.Em situações de forte turbulência, a estratégia pode frequentemente abrir posições em equilíbrio, o que pode ser um fardo para os custos de processamento. Neste caso, o ponto de parada pode ser relaxado adequadamente ou o ciclo da média móvel pode ser prolongado.

  3. Um único indicador de julgamentoA estratégia baseia-se apenas em um conjunto de indicadores e é suscetível a falhas. Pode-se considerar a introdução de outros indicadores, como o MACD, que enriquecem a lógica da estratégia.

  4. Parâmetros de fácil otimizaçãoOs parâmetros de média móvel e parâmetros de stop loss são suscetíveis a otimização excessiva e o desempenho real pode ser mais fraco do que o feedback. A escolha dos parâmetros deve ser cuidadosamente considerada.

Direção de otimização

A estratégia pode ser otimizada nas seguintes direções:

  1. Combinação de outros indicadores◯ Pode-se tentar introduzir indicadores de incremento, indicadores de volatilidade, etc., para enriquecer a lógica da estratégia e melhorar a estabilidade.

  2. Ajuste de parâmetros com periodicidade│ pode ser combinado com o tipo de mercado, ajustar dinamicamente os parâmetros da média móvel, prolongar o ciclo em situações de tendência e encurtar o ciclo em situações de turbulência │

  3. Alterações dinâmicas nas medidas de risco│ pode ser dinamicamente ajustado o número de pontos de parada e desvio baseado na situação real de flutuação no período mais recente.│

  4. Aumentar a lógica de stop loss│ │ │ │ │ │ │ │ │ │ │ │ │ │

Resumir

A estratégia de acompanhamento de tendências de média móvel cruzada de fechamento aberto é uma estratégia mais típica para determinar a direção da tendência com base na relação de fechamento aberto. Ela tem vantagens como regras de decisão simples e claras, flexíveis e ajustáveis, riscos controláveis, além de problemas como erros de reversão e inadequação de tremores violentos. A estratégia pode ser otimizada em termos de base rica em indicadores, ajuste de parâmetros dinâmicos e aumento da lógica de stop loss, o que permite capturar melhor as oportunidades de tendência e responder às mudanças no mercado.

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

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===