Tendência de seguir uma estratégia baseada em médias móveis

Autora:ChaoZhang, Data: 2024-01-18 12:23:59
Tags:

img

Resumo

Esta estratégia é uma estratégia de tendência baseada em médias móveis. Utiliza linhas EMA de diferentes períodos para construir vários conjuntos de sinais de negociação para rastreamento de tendências. Quando o preço se rompe abaixo das médias móveis de período mais longo, a estratégia irá construir progressivamente posições longas para reduzir o custo médio. A estratégia também define condições de stop loss baseadas em voltas médias móveis de curto período para garantir lucros.

Estratégia lógica

A estratégia emprega 5 linhas EMA de diferentes períodos para construir sinais de negociação, que são 10 dias, 20 dias, 50 dias, 100 dias e 200 dias EMA. A estratégia define 4 condições de compra com base na relação de preço com essas linhas EMA para implementar a negociação piramidal.

Quando o preço está abaixo da EMA de 20 dias enquanto está acima da EMA de 50 dias, o primeiro sinal de compra é acionado. Quando abaixo da EMA de 50 dias enquanto está acima da EMA de 100 dias, o segundo sinal de compra é acionado. Os terceiro e quarto sinais de compra são acionados quando o preço cai abaixo da EMA de 100 dias e da EMA de 200 dias, respectivamente. O tamanho da posição também se expande progressivamente de qt1 para qt4.

No lado da venda, existem dois grupos de condições de stop loss. A primeira é parar a perda quando o preço ultrapassa a EMA de 10 dias, enquanto a EMA de 10 dias está acima de outras linhas EMA. A segunda é semelhante, mas sai quando o preço cai abaixo do fechamento anterior da EMA de 10 dias. Estas duas condições são para garantir lucros de curto prazo durante as tendências.

Análise das vantagens

A maior vantagem desta estratégia é a capacidade de rastrear automaticamente as tendências de mercado para a retenção de longo prazo. Utilizando múltiplas condições de entrada e construção de posição progressiva, ele reduz constantemente a base de custos para produzir retornos excessivos.

No lado do stop loss, a estratégia rastreia pontos de viragem da média móvel de curto período para obter rapidamente lucro e evitar perdas adicionais.

Análise de riscos

O maior risco que esta estratégia enfrenta é ficar preso em consolidações ou tendências de baixa de longa duração. Quando o mercado geral entra em um canal variável ou descendente, os sinais da média móvel tornam-se menos confiáveis. Isso pode levar a perdas sustentadas de construções longas contínuas.

Outro ponto de risco é que as médias móveis nem sempre identificam as voltas com precisão.

Orientações de otimização

Outros indicadores técnicos, como o volume ou as bandas de Bollinger, poderiam ser incorporados às condições de compra para melhorar ainda mais a precisão das entradas.

A segunda camada de stop loss baseada na banda superior de Bollinger ou em áreas de suporte chave também pode ser adicionada. Isso ajuda a evitar pequenas paradas desnecessárias. Implementar stop loss adaptativo aos preços de trilha é outra área de aprimoramento para proteger melhor os lucros.

Conclusão

Esta estratégia implementa a tendência após a negociação através de um sistema de média móvel. Através da construção de posições de pirâmide, visa maximizar os retornos das tendências sustentadas, garantindo a preservação do capital com mecanismos de stop loss duplos. Esta é uma estratégia digna de mais rastreamento e teste ao vivo. Parâmetros e modelos podem ser otimizados incrementalmente com base no desempenho prático.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA_zorba1", shorttitle="zorba_ema", overlay=true)

// Input parameters
qt1 = input.int(5, title="Quantity 1", minval=1)
qt2 = input.int(10, title="Quantity 2", minval=1)
qt3 = input.int(15, title="Quantity 3", minval=1)
qt4 = input.int(20, title="Quantity 4", minval=1)
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Date range filter
start_date = timestamp(year=2021, month=1, day=1)
end_date = timestamp(year=2024, month=10, day=27)
in_date_range = true

// Profit condition
profit_percentage = input(1, title="Profit Percentage")  // Adjust this value as needed

// Pyramiding setting
pyramiding = input.int(2, title="Pyramiding", minval=1, maxval=10)

// Buy conditions
buy_condition_1 = in_date_range and close < ema20 and close > ema50 and close < open and close < low[1]
buy_condition_2 = in_date_range and close < ema50 and close > ema100 and close < open and close < low[1]
buy_condition_3 = in_date_range and close < ema100 and close > ema200 and close < open and close < low[1]
buy_condition_4 = in_date_range and close < ema200 and close < open and close < low[1]

// Exit conditions
profit_condition = strategy.position_avg_price * (1 + profit_percentage / 100) <= close
exit_condition_1 = in_date_range and (close > ema10 and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
exit_condition_2 = in_date_range and (close < ema10 and close[1] > ema10 and close < close[1] and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]

// Exit condition for when today's close is less than the previous day's low
//exit_condition_3 = close < low[1]

// Strategy logic
strategy.entry("Buy1", strategy.long, qty=qt1 * pyramiding, when=buy_condition_1)
strategy.entry("Buy2", strategy.long, qty=qt2 * pyramiding, when=buy_condition_2)
strategy.entry("Buy3", strategy.long, qty=qt3 * pyramiding, when=buy_condition_3)
strategy.entry("Buy4", strategy.long, qty=qt4 * pyramiding, when=buy_condition_4)

strategy.close("Buy1", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy2", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy3", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy4", when=exit_condition_1 or exit_condition_2)

Mais.