Estratégia de acompanhamento de tendências com base no cruzamento do indicador TEMA de vários períodos


Data de criação: 2023-12-25 14:20:36 última modificação: 2023-12-25 14:20:36
cópia: 0 Cliques: 671
1
focar em
1623
Seguidores

Estratégia de acompanhamento de tendências com base no cruzamento do indicador TEMA de vários períodos

Visão geral

A estratégia baseia-se no cruzamento de vários quadros temporais do indicador TEMA para identificar a direção da tendência do mercado, e combina com o cruzamento do indicador TEMA em quadros temporais mais baixos para encontrar o momento específico de entrada e saída. A estratégia pode ser configurada para apenas fazer mais, apenas fazer ativos ou negociar de forma bidirecional.

Princípio da estratégia

A estratégia usa dois indicadores TEMA, um baseado em linhas rápidas e lentas de 5 e 15 períodos, e outro baseado em uma estrutura de tempo de alto período personalizada pelo usuário, como a linha do dia ou a linha do dia. O cruzamento do indicador TEMA de alto período determina a direção geral da tendência, passando a ser otimista quando a linha rápida atravessa a linha lenta, passando a ser pessimista; O cruzamento do indicador TEMA de baixo período é usado para encontrar oportunidades específicas de entrada e saída.

Quando o TEMA de alta periodicidade atravessa a linha lenta, o TEMA de baixa periodicidade atravessa a linha lenta e pode entrar mais; Quando o TEMA de baixa periodicidade atravessa a linha lenta, deve sair. De forma semelhante, quando o TEMA de alta periodicidade atravessa a linha lenta, o TEMA de baixa periodicidade atravessa a linha lenta e pode entrar em vazio; Quando o TEMA de baixa periodicidade atravessa a linha lenta, deve sair.

Vantagens estratégicas

  1. Cruzar com base em indicadores TEMA para evitar o ruído
  2. Multi-frame de tempo definido, combinado com um julgamento de alta e baixa periodicidade, aumentando a precisão
  3. Pode ser unilateral ou bidirecional, com configuração flexível
  4. Regras claras e de fácil compreensão

Análise de Riscos

  1. Indicador TEMA está atrasado e pode ter perdido o primeiro momento de mudança de preço
  2. O ajuste de curto prazo pode levar a uma inversão desnecessária no julgamento de tendências de alta periodicidade
  3. A configuração de alta periodicidade foi mal escolhida e pode não refletir as tendências reais
  4. A escolha incorreta do Setting de Baixo Ciclo pode aumentar o risco de perda

A solução para o risco:

  1. Ajustar adequadamente os parâmetros do TEMA para um equilíbrio
  2. Limitação adequada de perdas
  3. Parâmetros de otimização de alta e baixa periodicidade
  4. Teste de robustez de diferentes variedades

Direção de otimização

  1. Ajuste dinâmico dos parâmetros do TEMA para otimizar a sensibilidade do indicador
  2. Aumentar o filtro de indicadores de momentum para evitar tendências perdidas
  3. Aumentar os indicadores de volatilidade e ajustar dinamicamente os limites de perda
  4. Parâmetros de otimização de métodos de aprendizagem de máquina

Resumir

O conceito geral da estratégia é claro e fácil de entender, baseado no indicador TEMA para julgar a direção da tendência em vários quadros temporais, e combinado com o cruzamento de baixos períodos para encontrar o momento de entrada. Há certas vantagens, mas também há algum espaço para melhorias.

Código-fonte da estratégia
/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 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/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
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=2020, title="From Year", minval=2010)
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=9999, title="To Year", minval=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)