Indicador TSI para janela deslizante dupla Momentum


Data de criação: 2024-01-08 11:20:35 última modificação: 2024-01-08 11:20:35
cópia: 1 Cliques: 654
1
focar em
1617
Seguidores

Indicador TSI para janela deslizante dupla Momentum

Uma visão geral da estratégia

Esta estratégia é chamadaEstratégia do índice TSI para janelas de duas voltasA ideia central da estratégia é usar a janela de deslizamento de duas EMAs para suavizar as mudanças de preço, combinando as mudanças de direção da tendência, para construir um indicador de dinâmica que reflita a força de compra e venda do mercado, o TSI, e usá-lo como sinal de negociação para tomar decisões de compra e venda.

2. Princípios de estratégia

Esta estratégia usa uma média móvel binária binária para calcular a variação de preços. A janela externa tem um período mais longo e a janela interna tem um período mais curto.

Em primeiro lugar, calculemos a mudança de unidade de preço:

pc = change(price)

Em seguida, use uma janela de deslizamento dupla para duplicar as mudanças de preço:

double_smoothed_pc = double_smooth(pc, long, short)

Recalcule o valor absoluto da variação de preço, também usando uma janela de deslizamento dupla para o duplo deslizamento:

double_smoothed_abs_pc = double_smooth(abs(pc), long, short)

Finalmente, a variação de preço após a suavização é dividida pelo valor absoluto da variação de preço após a suavização, resultando em um indicador TSI que reflete a força de compra e venda:

tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

Ao definir longos períodos de janela de diferentes comprimentos, o ruído do mercado de curto prazo pode ser filtrado em certa medida, permitindo que o TSI reflita melhor a força de compra e venda em tendências de médio e longo prazo. Um sinal de compra é gerado quando o TSI atravessa sua média móvel e um sinal de venda é gerado quando o TSI atravessa sua média móvel.

Três, vantagens estratégicas

  1. O uso de janelas de deslizamento duplo filtra eficazmente o ruído do mercado de curto prazo, tornando a resposta do indicador mais precisa
  2. O cálculo das variações de preços também é duplamente suavizado, tornando o TSI mais estável e confiável.
  3. Utilização de valores de variação de preços em relação aos valores absolutos de variação de preços, padronização automática, maior comparabilidade
  4. Consideração global da direção e intensidade das variações de preços como indicadores de qualidade para decisões de negociação
  5. Configurar diferentes parâmetros para ajustar a sensibilidade do indicador conforme necessário

Riscos estratégicos

  1. Indicadores TSI podem emitir sinais errados em situações de agitação prolongada
  2. A configuração inadequada dos parâmetros também pode afetar a qualidade dos indicadores e sinais
  3. Apesar de ter uma janela dupla, o indicador é sensível ao ruído do mercado de curto prazo
  4. Indicadores e sinais podem ficar atrasados quando a diferença entre as janelas é muito grande

Pode ser otimizado ajustando os parâmetros de período de janela, reduzindo adequadamente o comprimento da média do sinal; Quando o mercado está em turbulência, pode ser interrompido temporariamente para controlar o risco.

Cinco, direção de otimização

  1. Teste diferentes combinações de parâmetros de períodos de janela longos e curtos para encontrar o parâmetro ideal
  2. Tente outros tipos de médias móveis, como a média móvel linear ponderada.
  3. Aumentar a suavidade do indicador, construindo janelas de deslizamento triplo ou múltiplo
  4. Combinado com outros indicadores auxiliares, para otimizar a escolha de pontos de venda
  5. Estabelecer uma estratégia de stop loss e controlar rigorosamente as perdas individuais

VI. Conclusão

Esta estratégia é baseada em dupla suavização do cálculo do índice de dinamismo do TSI que reflete a força de compra e venda, dupla janela de filtragem de ruído, a mudança da mudança de preço também é dupla suavização, o indicador é mais estável e confiável; a utilização de proporções padronizadas, com comparabilidade; o indicador integra a direção e a intensidade da mudança de preço, como um sinal de alta qualidade; a sensibilidade do indicador pode ser controlada livremente através do ajuste de parâmetros. Em caso de otimização de parâmetros e risco sob controle, é uma escolha muito prática de estratégia de negociação quantitativa.

Código-fonte da estratégia
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity)

//BASED ON True Strength Indicator MTF
resCustom = input(title="Timeframe",  defval="120" )
long = input(title="Long Length",  defval=25)
short = input(title="Short Length",  defval=13)
signal = input(title="Signal Length",  defval=13)

length = input(title="Период",  defval=300)

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 = 2017, title = "From Year", minval = 2017)
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)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"

price = request.security(syminfo.tickerid,resCustom,close)


double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2=ema(tsi_value, signal)
plot(tsi_value, color=lime,linewidth=2)
plot(tsi2, color=red,linewidth=2)

hline(30, title="Zero")
hline(50, title="Zero",linewidth=2)
hline(70, title="Zero")

buy = crossover(tsi_value, tsi2)
sell = crossunder(tsi_value, tsi2)

if(buy)
    strategy.entry("BUY", strategy.long, when = window())
if(sell)
    strategy.entry("SELL", strategy.short, when = window()) 

//greentsi =tsi_value
//redtsi = tsi2

//bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90)
//bgcolor( greentsi<redtsi and rsiserie < 50 ? red : na, transp=90)

//yellow1= redtsi > greentsi and rsiserie > 50 
//yellow2 = redtsi < greentsi and rsiserie < 50 
//bgcolor( yellow1 ? yellow : na, transp=80)
//bgcolor( yellow2  ? yellow : na, transp=50)

//bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70)
//bgcolor( yellow2  and yellow2[2] ? yellow : na, transp=70)

//bgcolor( rsiserie > 70 ? lime : na, transp=60)
//bgcolor( rsiserie < 30  ? red : na, transp=60)