
A estratégia de acompanhamento de tendências de duplo EMA é uma estratégia de negociação quantitativa que usa indicadores duplos EMA para determinar a direção da tendência de preços. A estratégia determina a tendência de preços através da computação de dois conjuntos de diferentes parâmetros de indicadores EMA, combinando sinais de golden fork e dead fork.
O indicador central da estratégia são dois conjuntos de EMAs, compostos por um conjunto de EMA1 de períodos mais longos e um conjunto de EMA2 de períodos mais curtos. O EMA1 tem um parâmetro de 21 e o EMA2 tem um parâmetro de 10. A estratégia calcula os dois conjuntos de EMAs com um período de referência de 4 horas.
Quando o período mais curto de EMA2 atravessa o período mais longo de EMA1, gera um sinal de compra. Isso significa que a tendência de curto prazo do preço se fortalece e começa a entrar em uma tendência ascendente. Quando o período mais curto de EMA2 atravessa o período mais longo de EMA1, gera um sinal de venda. Isso significa que a tendência de curto prazo do preço é interrompida e começa a entrar em uma tendência descendente.
Para filtrar os sinais de erro, a estratégia define dois conjuntos de indicadores de Forex. Somente quando os dois conjuntos de indicadores emitem sinais ao mesmo tempo, a operação de compra e venda correspondente é acionada. Isso pode reduzir efetivamente os erros de negociação causados pela oscilação de preços.
Estes riscos podem ser controlados através das seguintes medidas:
A estratégia ainda tem espaço para ser melhorada:
Aumentar o portfólio de modelos. Pode-se criar mais combinações de diferentes parâmetros de indicadores, aumentando a estabilidade da estratégia.
Aumentar o mecanismo de suspensão. Definir um ponto de suspensão razoável para controlar efetivamente a perda individual.
Otimização de parâmetros dinâmicos. Os parâmetros do EMA podem ser automaticamente otimizados de acordo com diferentes condições de mercado.
Combinando técnicas de aprendizagem de máquina. Usando o Tensorflow e outros frameworks, os modelos de treinamento de classificação de tendências de preços de previsão em tempo real.
A estratégia de seguimento de tendências de duplo EMA é uma estratégia de negociação de tendências simples e práticas. Ela usa o indicador duplo EMA para determinar tendências de curto prazo nos preços, para capturar oportunidades de comportamento direcional. Ao mesmo tempo, a combinação de dois indicadores de filtragem de duplo EMA pode reduzir a transação de erro.
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// Component Code Stop
strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)
mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)
last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])
in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0
mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)
last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])
in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0
condlongx = in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)
condshortx = in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)
if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
strategy.entry("Long", strategy.long, comment="Long")
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0
strategy.close("Long",when = not Margin)
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
strategy.entry("Short", strategy.short, comment="Short", when = Margin)