Estratégia de rompimento de cruzamento de média móvel


Data de criação: 2024-02-06 15:02:33 última modificação: 2024-02-06 15:02:33
cópia: 1 Cliques: 671
1
focar em
1617
Seguidores

Estratégia de rompimento de cruzamento de média móvel

Visão geral

Esta estratégia usa três médias móveis de diferentes períodos para identificar a direção da tendência do mercado. Quando as três médias móveis coincidem, uma posição é inserida. Ao mesmo tempo, em combinação com o preço mais alto ou mais baixo da linha N-K mais recente, um stop loss é definido.

Princípio da estratégia

  1. Calcule três médias móveis de longo prazo, médio prazo e curto prazo. O usuário pode configurar o ciclo de 20 dias, 10 dias e 5 dias por defeito.

  2. Comparando a direção das três médias móveis. Quando a média móvel curta-prazo é usada no médio e o médio é usado no longo prazo, é considerado um mercado de várias cabeças. Quando a média móvel curta-prazo é usada no médio e o médio é usado no longo prazo, é considerado um mercado de cabeças vazias.

  3. No mercado de ações, se o preço ultrapassar o preço mais alto dentro da linha K da raiz N mais recente, faça mais; no mercado de ações, se o preço ultrapassar o preço mais baixo dentro da linha K da raiz N mais recente, faça zero. N também é um parâmetro personalizado para o usuário.

  4. Depois de entrar em posição, configure o stop loss. O stop loss do mercado multihead é o preço mais baixo da linha N-K mais recente e o stop loss do mercado em branco é o preço mais alto da linha N-K mais recente.

Análise de vantagens

Esta estratégia, combinada com o indicador de média móvel e o gráfico de linha K, ajuda a avaliar melhor o movimento do mercado. Ao mesmo tempo, a configuração do stop loss é razoável e ajuda a evitar grandes perdas.

Em comparação com um único indicador como a média móvel, esta estratégia usa três médias móveis para determinar a confiança do movimento do mercado. Ao mesmo tempo, romper o preço mais alto ou o preço mais baixo da linha N-K mais recente para entrar em posição é uma estratégia de ruptura mais comum.

Análise de Riscos

Os principais riscos que esta estratégia pode trazer são:

  1. A probabilidade de erro na determinação da direção das três médias móveis. Se a média móvel de curto e médio prazo causar um sinal errado, isso pode levar a perdas desnecessárias.

  2. A escolha do tempo de entrada para a brecha é inadequada e fácil de ser enganada. A escolha do tempo de entrada deve ser apropriadamente otimizada.

  3. A configuração do Stop Loss é pequena demais, e ampliar o Stop Loss ajuda a dar mais Running Room.

Direção de otimização

Esta estratégia pode ser melhorada nas seguintes direções:

  1. Adicionar filtros para outros indicadores para garantir a confiabilidade do sinal de média móvel. Por exemplo, aumentar o julgamento de volume de transação.

  2. Optimizar os parâmetros periódicos das médias móveis para melhor adaptá-las a diferentes variedades.

  3. Adição de algoritmos de aprendizagem de máquina para otimização automática de parâmetros.

  4. Teste a eficácia da estratégia em dados de alta frequência.

Resumir

Esta estratégia é geralmente mais simples, geral, clara e viável. Como um exemplo de sistema de média móvel cruzada, é uma opção comum para os iniciantes. Com a otimização adequada, o sistema pode ser aplicado a uma variedade mais ampla e período de tempo, para obter ganhos estáveis.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hobbiecode

//@version=5
strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true)

// User-defined input for moving averages
long_period = input(20, title="Long Period")
medium_period =  input(10, title = "Medium Period")
short_period = input(5, title="Short Period")
type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"])
candles_back = input(10, title = "Candles Back")
bars_valid = input(3, title = "Bars to Exit")

// Calculating moving averages
long_ma = 0.0
medium_ma = 0.0
short_ma = 0.0

if type_ma == "SMA"
    long_ma := ta.sma(close, long_period)
    medium_ma := ta.sma(close, medium_period)
    short_ma := ta.sma(close, short_period)
else
    long_ma := ta.ema(close, long_period)
    medium_ma := ta.ema(close, medium_period)
    short_ma := ta.ema(close, short_period)

// Plot moving averages
plot(long_ma, title="Long Moving Average", color=color.red)
plot(medium_ma, title = "Medium Moving Average", color = color.yellow)
plot(short_ma, title="Short Moving Average", color=color.green)

// Check last min/max
last_min = ta.lowest(candles_back)
last_max = ta.highest(candles_back)

// Strategy logic for crossing of moving averages
longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max
shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min

longCondition_entry = longCondition and strategy.position_size == 0
shortCondition_entry = shortCondition and strategy.position_size == 0

// Check last min/max for operation
last_min_op = ta.lowest(candles_back)[1]
last_max_op = ta.highest(candles_back)[1]

// Plot lines
var line r1Line = na

// Entry orders
// if (longCondition)
//     from_line = chart.point.now(high)
//     to_line = chart.point.from_index(bar_index + candles_back, high)
//     r1Line := line.new(from_line, to_line, color = color.green, width = 2)

if longCondition_entry and ta.crossover(close,last_max_op)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", from_entry="Long", stop=low)

// if (shortCondition)
//     from_line = chart.point.now(low)
//     to_line = chart.point.from_index(bar_index + candles_back, low)
//     r1Line := line.new(from_line, to_line, color = color.red, width = 2)

if shortCondition_entry and ta.crossunder(close,last_min_op)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", from_entry="Short", stop=high)

if ta.barssince(longCondition_entry) >= bars_valid
    strategy.close("Long")

if ta.barssince(shortCondition_entry) >= bars_valid
    strategy.close("Short")