Oscilação estocástica e estratégia de cruzamento de média móvel com stop loss e filtro estocástico

Autora:ChaoZhang, Data: 2024-04-26 16:10:11
Tags:MASMA

img

Resumo

Esta estratégia combina o oscilador estocástico com uma média móvel, gerando sinais de negociação observando as condições de sobrecompra e sobrevenda do indicador estocástico e a tendência da média móvel. Produz um sinal curto quando o indicador estocástico está na zona de sobrecompra e a média móvel está para baixo, e um sinal longo quando na zona de sobrevenda e a média móvel está para cima. Além disso, a estratégia introduz um filtro de indicador estocástico, que também pode gerar sinais correspondentes quando a linha estocástica K cruza a linha de negociação D depois de permanecer abaixo de 50 por um certo número de linhas K. A estratégia também define um Stop Loss para controlar o risco.

Princípio da estratégia

  1. Calcule o oscilador estocástico para obter a linha K e a linha D. Os parâmetros são ajustáveis, incluindo o período estocástico, suavização K, suavização D, zona de sobrecompra e zona de sobrevenda.

  2. Calcular a média móvel, utilizando o preço de fechamento por defeito, com um período ajustável.

  3. Quando a linha K fica abaixo de 50 por um certo número de linhas K, ela gera um sinal de filtro.

  4. Condições para gerar um sinal longo: O indicador estocástico cruza para cima na zona de sobrevenda OU o indicador estocástico filtra o sinal E a média móvel é para cima.

  5. Condições para gerar um sinal curto: O indicador estocástico cruza para baixo na zona de sobrecompra OU o indicador estocástico filtra o sinal E a média móvel é para baixo.

  6. Condição de encerramento da posição longa: a linha estocástica K cruza acima da média móvel E a média vira para baixo.

  7. Condição de encerramento da posição curta: a linha estocástica K cruza abaixo da média móvel E a média vira para cima.

  8. A gestão de posições utiliza uma percentagem fixa de fundos, 10% por defeito.

Análise das vantagens

  1. Combinando características de sobrecompra/supervenda e tendência, pode perseguir e matar uma tendência.

  2. O Filtro do Indicador Estocástico evita a troca frequente em mercados oscilantes.

  3. A configuração Stop Loss ajuda a controlar os drawdowns.

  4. A estrutura do código é clara, os parâmetros são ajustáveis e é adequado para uma otimização adicional.

Análise de riscos

  1. O Oscilador Estocástico tem um certo atraso, que pode perder os melhores pontos de compra e venda.

  2. A precisão da captura de ordens em pontos de virada da tendência é fraca e a frequência de stop-loss pode ser elevada.

  3. A gestão de fundos de taxa fixa tem uma elevada utilização no caso de perdas consecutivas.

Direcção de otimização

  1. Introduzir mais condições de filtragem, como comportamento dos preços, outros indicadores auxiliares, etc., para melhorar a precisão do sinal.

  2. Divida os sinais em fortes e fracos, e aumente as posições quando os sinais fortes aparecerem.

  3. Otimizar o julgamento dos pontos de virada da tendência para capturar mais movimentos do mercado.

  4. Otimizar a gestão das posições, considerar o ajustamento das posições com base em rácios de lucro e perda flutuantes, etc.

  5. Tente diferentes combinações de parâmetros para encontrar os parâmetros ideais.

Resumo

Baseada no Oscilador Estocástico, esta estratégia combina médias móveis para julgar tendências, ao mesmo tempo em que utiliza a função de filtragem do próprio Indicador Estocástico, gerando sinais de negociação relativamente confiáveis. A ideia geral da estratégia é clara e adequada para uso em mercados de tendências. No entanto, devido ao atraso do Oscilador Estocástico, seu desempenho nos pontos de virada do mercado pode ser pobre, e sua adaptabilidade e robustez gerais precisam de mais exame. No futuro, a estratégia pode ser melhorada a partir de aspectos como condições de filtragem, gerenciamento de posição e otimização de parâmetros.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"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/
// © Pablo_2uc

//@version=5
strategy("Estrategia Estocástico + MA con Stop Loss y Filtro Estocástico", overlay=true)

// Parámetros del Estocástico
length = input.int(14, title="Longitud Estocástico")
smoothK = input.int(3, title="Suavizado K")
smoothD = input.int(3, title="Suavizado D")
oversold = input.int(20, title="Sobreventa")
overbought = input.int(80, title="Sobrecompra")

// Parámetros de la Media Móvil
maLength = input.int(9, title="Longitud MA")
maSource = input(close, title="Fuente MA")

// Capital inicial
capital = 5000

// Tamaño de posición (10% del capital)
positionSize = capital * 0.10

// Stop Loss (2% del precio de entrada)
stopLossPercent = input.int(2, title="Stop Loss (%)") / 100

// Número de ruedas para el filtro estocástico
filterPeriods = input.int(12, title="Ruedas de Filtro Estocástico")

// Cálculo del Estocástico
k = ta.sma(ta.stoch(close, high, low, length), smoothK)
d = ta.sma(k, smoothD)

// Cálculo de la Media Móvil
ma = ta.sma(maSource, maLength)

// Filtro estocástico
stochasticFilter = ta.sma(k > 50 ? 1 : 0, filterPeriods)

// Condiciones de entrada en largo y corto
longCondition = (ta.crossunder(k, oversold) or ta.crossover(stochasticFilter, 1)) and ma > ma[1]
shortCondition = (ta.crossover(k, overbought) or ta.crossover(stochasticFilter, 1)) and ma < ma[1]

// Condiciones de salida
exitLongCondition = ta.crossover(k, ma) and ma < ma[1]
exitShortCondition = ta.crossunder(k, ma) and ma > ma[1]

// Estrategia
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Exit Long", "Long", stop=close * (1 - stopLossPercent))
if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Exit Short", "Short", stop=close * (1 + stopLossPercent))

// Cierre de posiciones
if (exitLongCondition)
    strategy.close("Long")
if (exitShortCondition)
    strategy.close("Short")

Relacionados

Mais.