Esta estratégia gera sinais de negociação através do cálculo do cruzamento entre duas linhas EMA de períodos diferentes para determinar as tendências do mercado. Abrirá posições longas quando a EMA de período mais curto cruzar a EMA de período mais longo, indicando uma tendência de alta, e fechará posições quando a EMA de período mais curto cruzar abaixo da EMA de período mais longo, indicando uma tendência de queda.
A estratégia aplica principalmente a teoria da cruz de ouro e da cruz da morte de linhas de EMA dupla. As linhas de EMA dupla consistem em uma EMA longa e uma EMA curta. O parâmetro EMA curto é definido em 10 dias e o parâmetro EMA longo é definido em 21 dias.
Quando a EMA curta cruza a EMA longa, um sinal de compra é gerado. Quando a EMA curta cruza abaixo da EMA longa, um sinal de venda é gerado. A estratégia também define limiares de taxa de crescimento, abrindo posições longas apenas quando o crescimento excede um limiar positivo e fechando posições apenas quando o declínio excede um limiar negativo.
Especificamente, a condição de compra é quando a EMA curta é superior à EMA longa e a taxa de crescimento das ações excede o limiar positivo.
A estratégia geral é relativamente simples e confiável, usando crossovers duplos da EMA para determinar as tendências de preços e definir limiares de taxa de crescimento para gerar sinais de negociação. Em comparação com crossovers de linha única, ele pode filtrar alguns sinais falsos. Mas as próprias linhas da EMA têm problemas de atraso. Combinar outros indicadores ou ajuste dinâmico de parâmetros pode melhorar ainda mais o desempenho da estratégia.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2) useTimeLimit = input(defval = false, title = "Use Start Time Limiter?") startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => true lenght0 = input(10) lenght1 = input(21) source = close EmaShort = ema(ema(source, lenght0), lenght0) EmaLong = ema(ema(source, lenght1),lenght1) plot(EmaShort, color=red) plot(EmaLong, color=purple) growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2) thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01) thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001) if( startTimeOk() ) buy_condition = EmaShort > EmaLong and growth > thresholdUp buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown strategy.entry("buy", strategy.long, comment="buy", when=buy_condition) strategy.close(id='buy', when=buy_exit_condition)