
A ideia central desta estratégia é gerar um sinal de negociação com base no cruzamento de várias médias móveis de índices (EMA). Quando o EMA curto-prazo é usado para o EMA de longo prazo, faça mais; quando o EMA curto-prazo é usado para o EMA de longo prazo, leve. Esta estratégia permite a configuração de vários ciclos de EMA, cada EMA pode ser ativado independentemente, e a estratégia é feita em todos os EMAs ativados.
A estratégia define oito períodos de EMA, os quais são os dias 8, 13, 21, 34, 55, 89, 144 e 233. Estes EMAs são configurados para serem ativados ou desativados independentemente.
Quando o EMA mais curto atravessa o EMA mais longo da parte de baixo, gera um sinal de compra; quando o EMA mais curto atravessa o EMA mais longo da parte de cima para baixo, gera um sinal de venda. Se ambos os EMAs estiverem ativados, o shorterEMA > longerEMA será um sinal de multiplo e o shorterEMA < longerEMA será um sinal de equilíbrio.
Por exemplo, se o EMA de 55 dias e o EMA de 89 dias estiverem ativados, faça mais quando o EMA de 55 dias estiver acima do EMA de 89 dias; e se o EMA de 55 dias estiver abaixo do EMA de 89 dias, faça equilíbrio. Isso permite que esta estratégia ajuste dinamicamente a combinação de EMA usada, mudando de um período mais longo para um período mais curto, ou vice-versa.
O número de posições definido como o juros da conta dividido por close dividido pelo número de grupos de EMA ativados. Isso garante que o tamanho da posição em cada EMA seja o mesmo.
Pode-se considerar o uso de EMA em combinação com outros indicadores, como indicadores de canal ou indicadores de choque para filtrar sinais, ou em combinação com indicadores de tendência e reversão. Além disso, a otimização dos parâmetros de EMA é muito importante e precisa ser ajustada para diferentes mercados.
A estratégia pode ser melhorada em vários aspectos:
Optimização de parâmetros da EMA. A combinação ideal de parâmetros da EMA pode ser encontrada por meio da varredura de parâmetros e do método de Análise de Caminho Avançado.
Aumentar as condições de filtragem. Pode-se adicionar condições de filtragem adicionais ao cruzar o EMA para evitar sinais errados, como filtragem de volume de transação, filtragem de taxa de flutuação, etc.
Em combinação com outros indicadores. O EMA pode ser combinado com outros indicadores, como MACD, KDJ, Blink, etc., aproveitando-se de sua complementaridade.
Ajuste dinâmico das posições. Pode-se ajustar dinamicamente as posições em cada EMA de acordo com a volatilidade do mercado ou a força da tendência.
Otimização da relação de ganhos e perdas. Otimização do nível de stop loss para encontrar a melhor relação de risco e retorno.
A estratégia em geral é muito simples e direta, capturando tendências de curto e médio prazo através de EMAs cruzadas. Sua vantagem reside na alta configurabilidade e flexibilidade, permitindo que o comerciante escolha a combinação de EMAs mais adequada para si. Mas os EMAs como um único indicador são propensos a produzir sinais errados, o maior risco da estratégia.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)
// Revision: 1
// Author: @ToS_MavericK
buyprice = 0.0
buyprice := buyprice[1]
// === INPUT SMA ===
EMA1 = input(8)
EMA2 = input(13)
EMA3 = input(21)
EMA4 = input(34)
EMA5 = input(55)
EMA6 = input(89)
EMA7 = input(144)
EMA8 = input(233)
EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)
//Profit = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2020, title = "To Year", minval = 2012)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)
count = -1
if (EnableEMA1 == true)
count := count + 1
if (EnableEMA2 == true)
count := count + 1
if (EnableEMA3 == true)
count := count + 1
if (EnableEMA4 == true)
count := count + 1
if (EnableEMA5 == true)
count := count + 1
if (EnableEMA6 == true)
count := count + 1
if (EnableEMA7 == true)
count := count + 1
if (EnableEMA8 == true)
count := count + 1
// set position size
Amount = 1 / (close * count)
// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))
strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))
strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))
strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))
strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))
strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))
strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))
plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line) // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line) // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line) // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line) // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line) // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line) // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line) // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line) // plot SlowMA
//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line) // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line) // plot SlowMA