Estratégia de negociação cruzada TEMA

Autora:ChaoZhang, Data: 2023-09-12 16:40:50
Tags:

Esta estratégia troca o cruzamento entre duas linhas TEMA de períodos diferentes para capturar tendências de médio prazo.

Estratégia lógica:

  1. Calcular linhas TEMA rápidas e lentas, tipicamente 5 e 8 períodos.

  2. Vai longo quando o TEMA rápido atravessa o TEMA lento.

  3. Sair longe quando o TEMA rápido cruzar por baixo do TEMA lento.

  4. A opção de filtragem baseada na direção da vela para evitar transações contra-tendência.

  5. Testes de retrocesso durante um período especificado para simular sinais históricos.

Vantagens:

  1. A TEMA filtra fortemente o ruído dos preços.

  2. A combinação rápida/lenta capta tendências intermediárias.

  3. O filtro de direção melhora a taxa de vitória evitando entradas de tendência contrária.

Riscos:

  1. A TEMA ainda está atrasada, potencialmente faltando as melhores entradas.

  2. Ajuste de parâmetros necessário para correspondência ideal.

  3. Difícil manter sinais em mercados variados.

Em resumo, esta estratégia atravessa as linhas TEMA para trocar tendências com filtragem de ruído para estabilidade.


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

//@version=4
strategy("Tema",overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

tema_length_1 = input(5, "Fast TEMA")
tema_length_2 = input(8, "Slow TEMA")
usedir       = input(true, "Use bar's direction ?" )
dirtime      = input(2,"direction bars")

tema(sec, length)=>
    tema1= ema(sec, length)
    tema2= ema(tema1, length)
    tema3= ema(tema2, length)
    tema = 3*tema1-3*tema2+tema3

tema1 = tema(hlc3, tema_length_1)
tema2 = tema(hlc3, tema_length_2)

dir=if close/close[dirtime] > 1
    1
else
    -1

plot(tema1, color=color.green, transp=50)
plot(tema2, color=color.red, transp=50)


up =  crossover(tema1, tema2) 
down = crossunder(tema1, tema2)

long_condition =  up and (usedir ? dir==1 : true) and _testPeriod()
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  down
strategy.close('BUY', when=short_condition)

Mais.