Estrategia de tendencia de impulso con múltiples indicadores técnicos


Fecha de creación: 2024-01-26 11:45:55 Última modificación: 2024-01-26 11:45:55
Copiar: 0 Número de Visitas: 575
1
Seguir
1617
Seguidores

Estrategia de tendencia de impulso con múltiples indicadores técnicos

Descripción general

La estrategia utiliza una combinación de indicadores técnicos como las medias móviles, el indicador de fuerza relativa (RSI), el indicador de variación cuantitativa (VFI) y el índice de fuerza real (TSI) para determinar el movimiento y la tendencia general del mercado y capturar los movimientos de los precios de las líneas medias y largas.

Principio de estrategia

  1. Calcule el promedio móvil de la línea rápida RSI ((7 días), la línea normal RSI ((14 días) y la línea lenta RSI ((50 días) para determinar la tendencia y el dinamismo de la RSI.

  2. Calcule el promedio móvil de VFI y VFI EMA (25 días) y SMA (25 días) para determinar el flujo de entrada y salida de fondos en el mercado.

  3. Calcula el ratio entre la media a largo plazo y la media a corto plazo del TSI para determinar la intensidad de la tendencia del mercado.

  4. La integración de los resultados de RSI, VFI y TSI permite determinar la dirección de la dinámica general del mercado.

  5. Cuando se juzgue que hay un movimiento a la baja en el mercado, hacer un descubierto; Cuando se juzgue que el movimiento del mercado se invierte, cerrar una posición en blanco.

Análisis de las ventajas

  1. La combinación de varios indicadores permite una evaluación más completa y precisa de la dinámica y tendencias generales del mercado.

  2. El VFI refleja el flujo de entrada y salida de fondos en el mercado, evitando que las transacciones se inviertan.

  3. El filtro TSI hace que la señal sea más confiable.

  4. En general, la estrategia es más fiable y tiene una mejor tasa de éxito.

Análisis de riesgos

  1. La combinación de varios indicadores, la configuración de los parámetros es compleja y requiere pruebas repetidas para obtener los parámetros óptimos.

  2. Las estrategias de entrada y salida son simples y no se puede aprovechar al máximo la información proporcionada por los indicadores, lo que puede ocasionar pérdidas por inversión de línea demasiado corta.

  3. En un mercado convulso, es fácil generar señales erróneas y invertir pequeñas pérdidas.

Dirección de optimización

  1. Optimización de la combinación de parámetros indicadores para encontrar el mejor parámetro.

  2. La nueva regla de Exit se utiliza para evaluar el estado de los indicadores para determinar si la salida es inversa.

  3. Aumentar los mecanismos de protección de ganancias y reducir las pequeñas pérdidas.

Resumir

Esta estrategia utiliza una combinación de varios indicadores para determinar la dinámica general del mercado y obtener ganancias a la baja cuando se determina que el mercado está a la baja. La estrategia tiene una alta fiabilidad, pero los mecanismos de entrada y salida son más simples y la información de los indicadores no se utiliza al máximo.

]

Código Fuente de la Estrategia
//@version=2
//credit to LazyBear, Lewm444, and others for direct and indirect inputs/////////////////////////////////
//script is very rough, publishing more for collaborative input value than as a finished product/////////
strategy("Momo", overlay=true)
length = input( 50 )
overSold = input( 50 )
overBought = input( 65 )
price = ohlc4

/////////////////////////////////////////////////////macd/////////////////////////////////////////////////

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
MACD = (fastMA - slowMA)
Msignal = (sma(MACD, 9))*40
//plot(Msignal, color=blue, linewidth=3)

/////////////////////////////////////////////////rsi spread/////////////////////////////////////////////////

source = price

RSIFast  = rsi(source, input(7))
RSINorm  = rsi(source, input(14))
RSISlow = rsi(source, input(50))

//plot(RSIFast, color=silver, style=area, histbase=50)
//plot(RSINorm, color=#98b8be, style=area, histbase=50)
//plot(RSISlow, color=#be9e98, style=area, histbase=50)

//plot(RSIFast, color=gray, style=line, linewidth=1)
//plot(RSINorm, color=purple, style=line, linewidth=2)
//plot(RSISlow, color=black, style=line, linewidth=3)

exponential = input(true, title="Exponential MA")

src = (RSIFast)

ma05 = exponential ? ema(src, 05) : sma(src, 05)
ma30 = exponential ? ema(src, 30) : sma(src, 30)
ma50 = exponential ? ema(src, 50) : sma(src, 50)
ma70 = exponential ? ema(src, 70) : sma(src, 70)
ma90 = exponential ? ema(src, 90) : sma(src, 90)
ma100 = exponential ? ema(src, 100) : sma(src, 100)

exponential1 = input(true, title="Exponential MA")

src1 = (RSINorm)

ma051 = exponential1 ? ema(src1, 05) : sma(src1, 05)
ma301 = exponential1 ? ema(src1, 30) : sma(src1, 30)
ma501 = exponential1 ? ema(src1, 50) : sma(src1, 50)
ma701 = exponential1 ? ema(src1, 70) : sma(src1, 70)
ma901 = exponential1 ? ema(src1, 90) : sma(src1, 90)
ma1001 = exponential1 ? ema(src1, 100) : sma(src1, 100)


exponential2 = input(true, title="Exponential MA")

src2 = (RSINorm)

ma052 = exponential2 ? ema(src2, 05) : sma(src2, 05)
ma302 = exponential2 ? ema(src2, 30) : sma(src2, 30)
ma502 = exponential2 ? ema(src2, 50) : sma(src2, 50)
ma702 = exponential2 ? ema(src2, 70) : sma(src2, 70)
ma902 = exponential2 ? ema(src2, 90) : sma(src2, 90)
ma1002 = exponential2 ? ema(src2, 100) : sma(src2, 100)


////////////////////////////////////////////////vfi by LazyBear, modified////////////////////////////////////

VFIlength = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(10)
signalLength2 = input(100)
smoothVFI=input(false, type=bool)

ma(x,y) => smoothVFI ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, VFIlength )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , VFIlength )/vave, 3)
vfima = ema( vfi, 25 )
vfimaS = (sma(vfima, 25))
zima = ema( vfima, signalLength2 )
d=vfi-vfima
vfi_avg = avg(vfi, vfima, vfimaS)
vfi_avgS = (sma(vfi_avg,5))

plot( zima, title="EMA of vfima", color=fuchsia, linewidth=1)
plot( vfimaS, title="SMA of vfima", color=blue, linewidth=1)
plot( vfima , title="EMA of vfi", color=black, linewidth=1)
//plot( vfi, title="vfi", color=green,linewidth=1)
//plot( vfi_avg, title="vfi_avg", color=blue, linewidth=2)
//plot( vfi_avgS, title="vfi_avgS", color=maroon, linewidth=2)

/////////////////////////////////////////////////////tsi////////////////////////////////////////////////

long2 = input(title="Long Length",  defval=24)
short2 = input(title="Short Length",  defval=7)
signal2 = input(title="Signal Length",  defval=13)
pc = change(price)
double_smooth2(src, long2, short2) =>
    fist_smooth2 = ema(src, long2)
    ema(fist_smooth2, short2)
double_smoothed_pc2 = double_smooth2(pc, long2, short2)
double_smoothed_abs_pc2 = double_smooth2(abs(pc), long2, short2)
tsi_value2 = 60 * (double_smoothed_pc2 / double_smoothed_abs_pc2)
//plot( tsi_value2, title="tsi2", color=black, linewidth=1)

////////////////////////////////////////////////////////mjb////////////////////////////////////////////////

trendSignal = avg(tsi_value2, Msignal, vfi)*1.75
T1 = sma(trendSignal, 5)
T2 = ema(trendSignal, 25)
T3 = ema(T2, 25)
//plot( T1, title="Trend", color=red, linewidth=3)
plot( T3, title="Trend3", color=black, linewidth=3)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

Momentum = avg (T3, vfimaS, vfima)
plot( Momentum, title="Momentum", color=blue, linewidth=2)
vrsi = rsi(price, length)
clearance = abs(zima - Msignal)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

if (not na(vrsi)) 
    if (zima > T3) and (clearance > 5) and (falling(zima, 1) == 1) and (zima > vfimaS) and (zima > vfima) and (falling(T3, 1) == 1) and (zima > 6)
        strategy.entry("ss", strategy.short)
    if (T3 > zima) and (rising(zima, 1) == 1)
        strategy.entry("Zcover", strategy.long)
    if (strategy.openprofit > 750) and (rising(T2, 1) == 1) and (T2 > 10)
        strategy.entry("ProfitTake", strategy.long)
// strategy.risk.allow_entry_in(strategy.direction.short)
// strategy.risk.max_intraday_loss(2000, strategy.cash)