Estratégia de negociação dupla TEMA

Autora:ChaoZhang, Data: 2023-10-12 17:34:19
Tags:

Resumo

A estratégia de negociação de cruzamento duplo TEMA é uma estratégia comum de tendência que usa duas linhas TEMA (Triple Exponential Moving Average) com parâmetros diferentes. Ela gera sinais longos quando o TEMA mais rápido cruza acima do TEMA mais lento e fecha posições quando o TEMA mais rápido cruza abaixo do TEMA mais lento. Esta estratégia pode rastrear efetivamente as tendências de preços e obter lucros quando a tendência é clara.

Estratégia lógica

A estratégia utiliza o TEMA (Triple Exponential Moving Average) como principal indicador técnico.

TEMA = (3EMA1) - (3EMA2) + EMA3

Quando a EMA1, a EMA2 e a EMA3 são as EMA do período N. Ao calcular as EMA três vezes, a TEMA pode responder mais rapidamente às alterações de preços.

A estratégia usa um TEMA de curto período como linha rápida e um TEMA de longo período como linha lenta. Quando a linha rápida atravessa acima da linha lenta, indicando um movimento de preço ascendente, ela gera sinais longos. Quando a linha rápida atravessa abaixo da linha lenta, indicando um movimento de preço descendente, ela fecha as posições.

A linha rápida com um período mais curto, como 20 dias, pode capturar rapidamente a dinâmica do preço, enquanto a linha lenta com um período mais longo, como 60 dias, pode filtrar falhas.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. A TEMA pode responder mais rapidamente às alterações de preços e captar inversões de tendência.

  2. A estrutura TEMA dupla ajuda a filtrar falhas e entrar em negociações de tendência de alta probabilidade.

  3. Parâmetros flexíveis e ajustáveis para se adaptarem às diferentes condições do mercado.

  4. Lógica simples e clara, fácil de compreender e implementar, alta utilização do capital.

  5. Podem ser obtidos bons lucros em mercados em tendência, especialmente aqueles com tendência forte.

Análise de riscos

Os riscos desta estratégia incluem:

  1. São propensos a perdas de negociação frequentes em mercados de intervalo.

  2. Pode gerar sinais falsos excessivos se os parâmetros não forem ajustados adequadamente.

  3. Incapaz de responder eficazmente a eventos repentinos e movimentos de preços a curto prazo.

  4. Os sinais atrasados podem perder oportunidades de curto prazo.

  5. Riscos elevados de abertura de posições contra fortes oscilações.

  6. Requer experiência na otimização de parâmetros para se adaptar aos mercados em mudança.

Medidas de gestão de riscos:

  1. Otimizar os parâmetros para evitar a supersensibilidade.

  2. Adicionar outros indicadores para filtrar os sinais de entrada.

  3. Usar stop losses para limitar a perda de uma única transação.

  4. Reduzir o dimensionamento das posições para controlar o risco.

  5. Adicionar regras de otimização de parâmetros e mecanismos de intervenção manual.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros da linha rápida e lenta para diferentes produtos e condições de mercado.

  2. Incorporar outros indicadores como MACD, Bollinger Bands para melhorar a validade do sinal.

  3. Adicione estratégias de stop loss como trailing stop, time stop, ATR stop para controlar as perdas.

  4. Evite abrir posições quando o VIX estiver alto.

  5. Adicione indicadores de volume, apenas considere entrar em expansão de volume óbvia.

  6. Otimizar a gestão do dinheiro, como o tamanho das posições fracionárias fixas, o controlo do levantamento.

  7. Usar aprendizagem de máquina para otimizar automaticamente parâmetros.

Resumo

A estratégia de cruzamento TEMA dupla é uma estratégia geral de tendência seguindo indicadores técnicos de tendência. Ajuda a capturar tendências de preços e negociar ao longo das tendências. Mas os riscos devem ser gerenciados adequadamente para evitar perdas por uso inadequado. Outras otimizações e testes podem levar a um ajuste mais científico de parâmetros e melhor desempenho nos mercados de tendência.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-11 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/
// © nickrober

//@version=4
strategy(title="TEMA Cross Backtest", shorttitle="TEMA_X_BT", overlay=true, commission_type=strategy.commission.percent, commission_value=0, initial_capital = 1000,  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// 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
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=75, editable=true)

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes
LongCloseAlert = xnRes < ynRes
ShortEntryAlert = xnRes < ynRes
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
strategy.entry("Long", strategy.long, when = xnRes > ynRes and window()) 
strategy.close("Long", when = xnRes < ynRes)
//strategy.entry("Short", strategy.short, when = xnRes < ynRes and window())
//strategy.close("Short", when = xnRes > ynRes)

Mais.