Indicador da ETI "Janela de Movimento Dupla"

Autora:ChaoZhang, Data: 2024-01-08 11:20:35
Tags:

img

I. Visão geral da estratégia

Esta estratégia é denominadaEstratégia do indicador da ETI "Ponto de Impulso"A ideia central desta estratégia consiste em utilizar duas janelas deslizantes da EMA para suavizar as flutuações de preços e, em seguida, combinar as alterações direcionais da tendência para construir um indicador de dinâmica que reflita o poder de compra e venda no mercado, nomeadamente o indicador TSI, e utilizá-lo como sinal de negociação para tomar decisões de compra e venda.

II. Princípio da estratégia

Esta estratégia usa duas janelas deslizantes, duas médias móveis exponenciais para calcular as mudanças de preço. O período da janela externa é mais longo e o período da janela interna é mais curto.

Primeiro, calcule a variação unitária do preço:

pc = change(price)

Em seguida, use duas janelas deslizantes para dobrar as mudanças de preço:

double_smoothed_pc = double_smooth(pc, long, short)

Calcule então o valor absoluto da variação de preço, que também é duplamente suavizado utilizando duas janelas deslizantes:

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

Por último, utilizar a variação de preço suavizada dividida pela variação de preço absoluto suavizada para obter o indicador da ETI que reflete o poder de compra e de venda:

tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

Ao fixar períodos de janela longos e curtos de duração diferente, o ruído do mercado no curto prazo pode ser filtrado até certo ponto, de modo que o indicador da ETI possa refletir melhor o poder de compra e de venda nas tendências de médio e longo prazo.

III. Vantagens estratégicas

  1. O uso de duas janelas deslizantes efetivamente filtra o ruído do mercado a curto prazo para reações de indicadores mais precisas
  2. A variação de preços é igualmente duplamente suavizada, tornando o indicador da ETI mais estável e fiável
  3. A proporção da variação de preços em relação à variação de preços absoluta é utilizada, que é automaticamente padronizada e mais comparável
  4. Considerar de forma abrangente a direcção e a magnitude das variações de preços como indicador de qualidade para as decisões de negociação
  5. A definição de diferentes parâmetros permite um ajustamento flexível da sensibilidade do indicador

IV. Riscos estratégicos

  1. O indicador da ETI pode dar sinais errados quando o mercado apresenta flutuações a longo prazo
  2. A configuração incorreta dos parâmetros também pode afetar a qualidade dos indicadores e sinais
  3. Embora existam duas janelas deslizantes, o indicador ainda tem alguma sensibilidade ao ruído do mercado a curto prazo
  4. Quando a diferença entre os períodos de janela longa e curta é demasiado grande, os indicadores e sinais podem atrasar-se

Quando o mercado flutua, a negociação pode ser temporariamente interrompida para controlar os riscos.

V. Orientações de otimização

  1. Combinações de ensaio de diferentes parâmetros de período de janela longa e curta para encontrar parâmetros ótimos
  2. Tente outros tipos de médias móveis, como a média móvel ponderada linear
  3. Aumentar a suavidade dos indicadores através da construção de janelas deslizantes triplas ou múltiplas
  4. Combinar outros indicadores auxiliares para otimizar a seleção dos pontos de compra/venda
  5. Estabelecer estratégias de stop loss para controlar estritamente a perda única

VI. Resumo

Esta estratégia calcula o indicador de impulso TSI que reflete o poder de compra e venda com base na dupla suavização das mudanças de preço. As janelas de deslizamento dupla filtram o ruído. A dupla suavização das variações de preço também torna o indicador mais estável e confiável. A relação padronizada o torna comparável. O indicador combina a direção e a magnitude das mudanças de preço como uma fonte de sinal de alta qualidade. Através do ajuste de parâmetros, a sensibilidade do indicador pode ser livremente controlada. Com otimização de parâmetros e controle de risco, é uma escolha de estratégia de negociação quantitativa muito prática.


/*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)

Mais.