Estratégia de cruzamento de média móvel Golden Cross e Death Cross


Data de criação: 2023-12-05 11:11:02 última modificação: 2023-12-05 11:11:02
cópia: 0 Cliques: 713
1
focar em
1619
Seguidores

Estratégia de cruzamento de média móvel Golden Cross e Death Cross

Esta é uma estratégia muito clássica de movimentação de média linear, que utiliza a média móvel de dois períodos diferentes, TENKAN e KIJUN, para formar sinais de forquilha e forquilha, para operações longas e curtas.

Princípio da estratégia

A estratégia baseia-se principalmente em um método de análise técnica de ações japonesas, chamado de balanço de equilíbrio, que usa várias médias móveis, como a linha TENKAN e a linha KIJUN, para determinar a direção da tendência do mercado.

Primeiro, a linha TENKAN é a linha de 9 dias, representando a tendência de curto prazo; a linha KIJUN é a linha de 26 dias, representando a tendência de médio prazo. Quando o curto prazo atravessa o médio prazo, gera um sinal de compra; quando o curto prazo atravessa o médio prazo, gera um sinal de venda.

Em seguida, a estratégia também introduz linhas de ar e linhas de nuvens de luz. A linha de ar é a média das médias móveis de curto e médio prazo, e a linha de nuvem de luz B é a média móvel de 52 dias.

Finalmente, para filtrar os falsos sinais, a estratégia também detecta se o preço está relacionado com a linha OTO (a linha de atraso do preço de 26 dias) e somente gera um sinal de compra quando o preço está abaixo da linha OTO; somente gera um sinal de venda quando o preço está acima da linha OTO.

Vantagens estratégicas

É uma estratégia de média móvel muito típica, com vantagens em três aspectos principais:

  1. Usando duas linhas médias de diferentes períodos, pode-se determinar com eficácia a direção da tendência em duas dimensões de tempo no curto e médio prazo.

  2. A linha de nuvem de luz ajuda a avaliar as tendências de longo prazo e evita que os mercados de longo prazo permaneçam em baixa.

  3. A detecção da relação entre preços e preços de atraso pode filtrar muitos sinais falsos e reduzir transações desnecessárias.

Assim, a estratégia utiliza as múltiplas funções da linha média para aproveitar oportunamente as oportunidades de tendências de curta, média e longa duração.

Risco estratégico

Os principais riscos desta estratégia são:

  1. A estratégia de linha média é propensa a produzir uma grande quantidade de falsos sinais. Se você não pode definir bem os parâmetros, você pode ser preso por transações frequentes.

  2. A estratégia tem um foco na parte técnica, sem levar em conta os fatores fundamentais. Se houver uma mudança significativa no desempenho da empresa ou na política de mercado, os sinais técnicos também podem falhar.

  3. A estratégia considera apenas as decisões de compra e venda e não estabelece um mecanismo de stop loss.

Por isso, precisamos de encontrar um sistema de equilíbrio mais avançado, ou de um stop loss racional, ou de um sinal fundamental para aperfeiçoar ainda mais a estratégia e reduzir o risco.

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

A estratégia também pode ser melhorada nos seguintes aspectos:

  1. Buscar combinações de parâmetros mais estáveis e eficientes. Podemos encontrar valores de parâmetros que tornam o desempenho da estratégia melhor através de mais retrocesso de dados.

  2. Aumentar o mecanismo de stop loss. Um stop loss razoável pode efetivamente controlar o máximo de perdas da estratégia.

  3. Adição de sinais básicos. Por exemplo, os dados da revisão de expectativas de desempenho podem determinar a perspectiva da empresa, melhorando a eficácia da estratégia.

  4. Otimizar a estratégia de linha OTO. A implementação atual é simples, mas podemos encontrar uma maneira mais estável e precisa de determinar a relação entre o preço e o preço histórico.

  5. A combinação de sinais de seleção de ações e a adição de fatores como PE, ROE e outros pode filtrar alguns indicadores de menor qualidade.

Resumir

Esta é uma estratégia de média móvel muito típica e prática. Ela atende simultaneamente a tendências de curta, média e longa três dimensões de tempo, usando diferentes funções da linha de equilíbrio para projetar sinais de negociação, com bons resultados.

Código-fonte da estratégia
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 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/
// © mdeous

//@version=4
strategy(
     title="Ichimoku Kinko Hyo Strategy", 
     shorttitle="Ichimoku Strategy", 
     overlay=true,
     pyramiding=0,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     currency="USD",
     commission_type=strategy.commission.percent,
     commission_value=0.0
     )

//
// SETTINGS
//

// Ichimoku

int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1)
int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1)
int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1)
int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1)

// Strategy

int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1)
bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false)

//
// HELPERS
//

color _red = color.red
color _blue = color.blue
color _lime = color.lime
color _fuchsia = color.fuchsia
color _silver = color.silver
color _aqua = color.aqua

f_donchian(_len) => avg(lowest(_len), highest(_len))

//
// ICHIMOKU INDICATOR
//

float tenkan = f_donchian(TENKAN_LEN)
float kijun = f_donchian(KIJUN_LEN)
float ssa = avg(tenkan, kijun)
float ssb = f_donchian(SSB_LEN)

plot(tenkan, title="Tenkan", color=_silver)
plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua)
_ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime)
_ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red)
fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90)

//
// STRATEGY
//

// Check if price is "above or below" Chikou (i.e. historic price line):
// This detection is highly imperfect, as it can only know what Chikou position
// was 2*offset candles in the past, therefore if Chikou crossed the price
// line in the last 2*offset periods it won't be detected.
// Use of this detection is disabled by default,

float _chikou_val = close[OFFSET*2+1]
float _last_val = close[OFFSET+1]
bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true
bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true

// Identify short-term trend with Tenkan

bool _above_tenkan = min(open, close) > tenkan
bool _below_tenkan = max(open, close) < tenkan

// Check price position compared to Kumo

bool _above_kumo = min(open, close) > ssa
bool _below_kumo = max(open, close) < ssb

// Check if Kumo is bullish or bearish

bool bullish_kumo = ssa > ssb
bool bearish_kumo = ssa < ssb

// Correlate indicators to confirm the trend

bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo
bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo

// Build signals

bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA
bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist

bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB
bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist

bool go_long = below_chikou and (bullish_trend and (buy1 or buy2))
bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2))

//
// COOLDOWN
//

f_cooldown() =>
    _cd_needed = false
    for i = 1 to COOLDOWN by 1
        if go_long[i]
            _cd_needed := true
            break
    _cd_needed

go_long := f_cooldown() ? false : go_long

//
// ORDERS
//

strategy.entry("buy", strategy.long, when=go_long)
strategy.close_all(when=exit_long)

//
// ALERTS
//

alertcondition(
     condition=go_long,
     title="Buy Signal",
     message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )
alertcondition(
     condition=exit_long,
     title="Sell Signal",
     message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )