Estratégia de cruzamento de preço de fechamento mensal e média móvel


Data de criação: 2023-11-23 17:09:01 última modificação: 2023-11-23 17:09:01
cópia: 0 Cliques: 570
1
focar em
1617
Seguidores

Estratégia de cruzamento de preço de fechamento mensal e média móvel

Visão geral

Esta estratégia usa o cruzamento do preço de fechamento da linha lunar com a média móvel para gerar um sinal de negociação. Quando a linha lunar cruza a média móvel acima do preço de fechamento, faça mais; Quando a linha lunar cruza a média móvel abaixo do preço de fechamento, leve a posição.

Princípio da estratégia

A lógica central da estratégia é:

  1. Inserir os parâmetros de período da média móvel, pode escolher entre SMA ou EMA
  2. Pode optar por mostrar a média móvel
  3. Pode escolher outro preço de fechamento como sinal
  4. Sinais de negociação de acordo com a relação entre o fechamento da linha lunar e a média móvel
    • O preço de fechamento é a média móvel e o preço de fechamento é a média móvel e a média móvel.
    • Movimento médio abaixo do preço de fechamento, equilíbrio

A estratégia utiliza a propriedade de suavização da linha média móvel, filtrando parte do ruído dos preços, para capturar a reversão da tendência de médio prazo das ações. Quando as ações cruzam a linha média acima, indica que as ações estão se formando em uma tendência de mercado búlvio; quando as ações cruzam a linha média abaixo, indica que a tendência de preços está se transformando em um mercado de baixa.

Vantagens estratégicas

As principais vantagens desta estratégia são:

  1. Utilizando dados da linha lunar, é possível filtrar o ruído da noite para capturar tendências a médio e longo prazo dos preços das ações
  2. Período de média móvel personalizável, com parâmetros otimizados para diferentes ações
  3. A escolha de outra ação como fonte de sinais pode ajudar a aumentar a estabilidade
  4. Tecnologia avançada de anti-repainting para evitar retrocessos
  5. Pode ser inserido um período de tempo de ressonância arbitrário para facilitar a otimização de testes

Em geral, a estrutura da estratégia é simples e prática, e pode ser aplicada à maioria das ações por meio de otimização de parâmetros, especialmente para investidores de média e longa linha.

Risco estratégico

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

  1. Os dados da linha mensal são mais lentos e não refletem mudanças de preços em tempo real.
  2. Há um certo atraso, possivelmente uma oportunidade de transação em linha curta perdida
  3. A linha média móvel tem um atraso e o ponto de tempo de geração do sinal é incontrolável
  4. Seleção incorreta de parâmetros pode levar a excesso de conservadorismo ou a oportunidades perdidas

Para minimizar os riscos, pode-se fazer otimizar as seguintes coisas:

  1. Indicadores técnicos combinados com um menor período de tempo para julgamento auxiliar
  2. Ajustar o ciclo da média móvel para encontrar a melhor combinação de parâmetros
  3. Utilização de sinais mais estáveis como fonte de sinal
  4. Ajustar adequadamente o tamanho das posições e controlar as perdas individuais

Direção de otimização da estratégia

A estratégia também tem um grande espaço para otimização, principalmente em relação aos seguintes aspectos:

  1. Aumentar as estratégias de stop loss para bloquear os lucros e controlar os riscos
  2. Combinação com outros indicadores, como KD, MACD, etc., para melhorar a precisão do sinal de negociação
  3. Parâmetros de linha média móvel de otimização dinâmica usando tecnologia de aprendizagem de máquina
  4. Adição de módulo de gerenciamento de posições, permitindo que as posições mudem com a tendência do alocatórize
  5. Adição de função de conversão multi-espaço, adaptável às condições do mercado
  6. A junção de linhas K com um menor período de tempo permite transações mais sensíveis

Resumir

O conceito geral da estratégia de cruzamento entre o preço de fechamento mensal e a média móvel é claro e fácil de implementar, e pode ser aplicado a diferentes ações por meio de ajustes de parâmetros, especialmente para investidores de linha média e longa. Com o fortalecimento contínuo de módulos como stop loss e parâmetros de otimização, a estratégia pode ter um desempenho ainda melhor.

Código-fonte da estratégia
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')