
A estratégia baseia-se em sinais de cruzamento de duas médias móveis de índices (EMA). Quando o EMA de curto prazo é ultrapassado, a posição é aberta; Quando o EMA de curto prazo é ultrapassado, a posição é fechada. A estratégia também introduz um mecanismo de parada de perda e filtro de tempo de negociação para controlar o risco e otimizar o desempenho da estratégia.
A estratégia usa EMAs de dois períodos diferentes como base para determinar a tendência. Comparado à média móvel simples (SMA), a EMA responde mais rapidamente às mudanças de preço e a distribuição de peso é mais racional. Quando o EMA de curto prazo atravessa o EMA de longo prazo, significa que o preço pode formar uma tendência ascendente, abrindo mais posições; Por outro lado, quando o EMA de curto prazo atravessa o EMA de longo prazo, significa que a tendência ascendente pode terminar, abrindo posições.
Além do sinal de cruzamento da linha de equilíbrio, a estratégia também introduz um mecanismo de parada de perda. Por um lado, é configurado um parada de percentual fixo, ou seja, quando o preço cai acima de um determinado percentual em relação ao preço de abertura da posição, é forçado o fechamento para controlar a perda; Por outro lado, também pode ser escolhido o fechamento quando o preço de fechamento é inferior ao preço de fechamento da linha K anterior.
Além disso, a estratégia também introduziu o filtro de tempo de negociação. O usuário pode definir o início e o fim do tempo de negociação permitido, evitando transações em determinados períodos de tempo (por exemplo, feriados, períodos de não negociação, etc.).
Simples e fácil de usar: a lógica da estratégia é clara, usando apenas dois EMAs como sinais de negociação, facilitando a compreensão e a implementação.
Seguimento de tendências: A capacidade da EMA de responder rapidamente às mudanças de preços permite que a estratégia capte a formação e o fim de tendências em tempo hábil, obtendo assim os benefícios do seguimento de tendências.
Controle de risco: introdução de stop loss de porcentagem fixa e stop loss com base no preço de fechamento da linha K anterior, permitindo o controle efetivo de perdas e retrações de transações individuais.
Flexibilidade de parâmetros: o usuário pode ajustar o ciclo EMA, a porcentagem de parada, o uso de parâmetros de parada de preço de fechamento da linha K anterior, o período de tempo de negociação, etc., de acordo com suas necessidades, para otimizar o desempenho da estratégia.
Risco de otimização de parâmetros: o desempenho da estratégia depende da escolha de parâmetros como o ciclo EMA, a porcentagem de parada, etc. Parâmetros inadequados podem levar ao fraco desempenho da estratégia. Portanto, é necessário realizar otimização de parâmetros e retestamento com base em dados históricos para selecionar o parâmetro otimizado.
Risco de mercado: a estratégia é aplicada principalmente em mercados tendenciais, onde a negociação frequente pode levar a um retorno maior em mercados turbulentos ou reversões de tendência. Portanto, é necessário ajustar os parâmetros da estratégia de acordo com a situação do mercado ou parar de usar a estratégia.
Risco de custo: a estratégia pode gerar um número maior de transações, aumentando os custos de transação. Portanto, é necessário escolher o padrão e o volume de transação apropriados e controlar o custo de cada transação.
Introdução de mais indicadores técnicos: com base no sinal cruzado do EMA, introdução de outros indicadores técnicos, como RSI, MACD, etc., formando um sinal de negociação multifator, melhorando a precisão de julgamento de tendências.
Stop loss dinâmico: De acordo com a volatilidade do mercado, ATR e outros indicadores, ajuste dinamicamente a posição de stop loss, ao mesmo tempo em que controla o risco, minimizando a perda de receita causada pelo stop loss.
Gerenciamento de posições: Dependendo da intensidade da tendência do mercado, do grau de desvio do preço da linha média, etc., ajuste dinamicamente o tamanho da posição, aumente a posição quando a tendência é forte e reduza a posição quando a tendência é fraca ou incerta.
Otimização de aprendizagem de máquina: Otimização de parâmetros de estratégia usando algoritmos de aprendizagem de máquina, selecionando automaticamente a combinação de parâmetros mais adequada, aumentando a receita da estratégia e reduzindo o risco de sobreajuste.
A estratégia de quantificação de cruzamento de dupla equilíbrio determina a tendência através do sinal de cruzamento de dois EMAs, ao mesmo tempo em que introduz um mecanismo de parada de perda e um filtro de tempo de negociação, obtendo um bom equilíbrio entre a capacidade de acompanhamento de tendência e o controle de risco. Apesar da lógica da estratégia ser simples, a otimização de parâmetros e o controle de risco razoáveis permitem obter ganhos estáveis em mercados em tendência. A estratégia pode ser aperfeiçoada no futuro, introduzindo mais indicadores técnicos, posicionamento de parada de perda dinâmica, gerenciamento e otimização de aprendizado de máquina, entre outros, para melhorar ainda mais o desempenho e a agilidade da estratégia.
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 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/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 100% of balance invested on each trade
commission_type=strategy.commission.cash_per_contract,
commission_value=0.005) // Interactive Brokers rate
// Get user input
i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
// Get indicator values
ma1 = ta.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)
// Check filter(s)
f_dateFilter = true
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 and strategy.position_size == 0 and f_dateFilter
sellCondition = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1])
stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)