Estrategia de seguimiento de tendencias basada en indicadores de volumen


Fecha de creación: 2023-10-10 14:51:13 Última modificación: 2023-10-10 14:51:13
Copiar: 0 Número de Visitas: 1032
1
Seguir
1617
Seguidores

Descripción general

La estrategia se basa en el indicador de volumen de transacciones (VFI) para realizar transacciones de seguimiento de tendencias. La estrategia determina la dirección de la tendencia del mercado mediante el cálculo de la fluctuación del precio de las acciones y el cambio en el volumen de transacciones, para lograr una compra baja y una venta alta.

Principio de estrategia

  1. Calcular el indicador VFI: calcular el valor de VFI en función de los cambios logarítmicos en el precio de las acciones y el volumen de transacciones, eliminando la oscilación mediante el tratamiento suave.

  2. Determina la dirección de la tendencia: el indicador VFI pasa por el eje 0 como señal positiva y el eje 0 descendente como señal negativa.

  3. Señales de negociación: EMA rápido en EMA lento, y VFI en línea de compra de más; bajo VFI en línea de venta de menos.

  4. Método de detención de pérdidas: establezca una proporción de detención fija.

La estrategia se basa principalmente en el indicador VFI para determinar la dirección de la tendencia, que se combina con el sistema de líneas medias para emitir señales de negociación. El indicador VFI refleja el sentimiento del mercado a través de la fluctuación del precio de las acciones y los cambios en el volumen de transacciones. Es un indicador de seguimiento de tendencias.

Ventajas estratégicas

  1. Los indicadores VFI son mejores para juzgar la tendencia que los indicadores de precios individuales, y filtran los mercados convulsivos y los brechas falsos.

  2. El sistema de línea media ayuda a juzgar, evitando que los indicadores de VFI emitan señales erróneas en la ciudad de temblor.

  3. Establecer un punto de control de pérdidas fijo para controlar el riesgo.

  4. El modelo de seguimiento de tendencias permite obtener ganancias adicionales sin tener que adivinar el punto de inflexión del mercado.

  5. La configuración de los parámetros es flexible y se puede ajustar según el mercado para adaptarse a diferentes ciclos y variedades.

Riesgo estratégico

  1. El indicador VFI puede emitir señales erróneas en un mercado con grandes sacudidas.

  2. Los puntos de parada fijos pueden ser demasiado grandes o demasiado pequeños, lo que lleva a una parada prematura o tardía.

  3. Si los parámetros de compra y venta se establecen incorrectamente, puede ocasionar transacciones frecuentes o faltas de facturas.

  4. Las estrategias de seguimiento de tendencias no pueden capturar la reversión y requieren un alto en el tiempo.

  5. Los parámetros incorrectos pueden causar entrada demasiado temprana o demasiado tarde.

Optimización de la estrategia

  1. Ajustar los parámetros VFI y optimizar el cálculo de los indicadores.

  2. Ajuste el ciclo de la línea media para optimizar el tiempo de emisión de la señal.

  3. Ajuste dinámico de los puntos de parada y optimización de los métodos de parada.

  4. En combinación con otros indicadores de filtración, mejora la calidad de la señal.

  5. Combinación de parámetros optimizados para ciclos grandes y pequeños.

  6. Prueba de la robustez de los parámetros de las diferentes variedades para mejorar la adaptabilidad de los parámetros.

Resumir

La estrategia se basa en el indicador VFI para determinar la dirección de la tendencia, junto con el sistema de línea de paridad para filtrar la señal de error. El seguimiento de la tendencia permite realizar compras y ventas bajas y altas, sin necesidad de predecir el punto de reversión específico. La ventaja de la estrategia es juzgar que la tendencia es superior a un solo indicador de precios, que puede filtrar eficazmente los temblores. El principal riesgo reside en la posibilidad de emitir una señal errónea en un mercado de temblores.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-06 21:00:00
period: 3m
basePeriod: 1m
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/
// © mohanee
//This strategy is based on VFI indicator published by  UTS.  
//more details of VFI indicator can be found at  [url=http://mkatsanos.com/VFI.html]http://mkatsanos.com/VFI.html[/url] 
// I have added buy line and sell line to the indicator  and tested  SPY stock/index on one hour chart

//@version=4
strategy(title="VFI  strategy [based on VFI indicator published by  UTS]", overlay=false,pyramiding=2, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


// Const
kMaColor = color.aqua
kNeutralColor = color.gray
kBearColor = color.red
kBullColor = color.green

kAlma = "ALMA"
kEma = "EMA"
kSma = "SMA"
kWma = "WMA"


// Input

vfi_length = input(8, title="Length", minval=1)  //default 130
vfi_coef = input(0.2, title="Coef", minval=0.1)
vfi_volCutoff = input(2.5, title="Volume Cutoff", minval=0.1)
vfi_smoothLen = input(3, title="Smoothing Period", minval=1)
vfi_smoothType = input(kEma, title="Smoothing Type", options=[kAlma, kEma, kSma, kWma])

//These are adde by me for the strategy purpose  BEGIN
vfi_buyLine = input(-4, title="Buy Line", minval=-10)
vfi_sellLine = input(5, title="Sell Line", minval=-10)
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
//These are adde by me for the strategy purpose  END

vfi_longEMA = input(200, title="Long EMA", minval=1)
vfi_shortEMA1 = input(50, title="short EMA1", minval=1)
vfi_shortEMA2 = input(9, title="short EM2A", minval=1)

vfi_showTrend = input(false, title="Visualize Trend")
vfi_showFill = input(true, title="Apply Filling")
vfi_showMa = input(true, title="Show Moving Average")
vfi_maType = input(kSma, title="Moving Average Type", options=[kAlma, kEma, kSma, kWma])
vfi_maLength = input(30, title="Moving Average Length", minval=1)
vfi_almaOffset = input(0.85, title="• ALMA - Offset (global setting)", minval=0.0, maxval=1.0, step=0.05) // more smoothness (closer to 1) vs. more responsiveness (closer to 0)
vfi_almaSigma = input(6.0, title="• ALMA - Sigma (global setting)", minval=0.0, step=0.05) // the larger sigma the smoother ALMA


// Functionality

isRising(sig) =>
    sig > sig[1]
    
isFlat(sig) =>
    sig == sig[1]

vfi_trendColor(sig) =>
    isFlat(sig) ? kNeutralColor : isRising(sig) ? kBullColor : kBearColor
    
vfi_color(sig) =>
    isFlat(sig) ? kNeutralColor : sig > 0 ? kBullColor : kBearColor
    
osc_color(sig) =>
    sig == 0 ? kNeutralColor : sig > 0 ? kBullColor : kBearColor

smooth(t, sig, len) =>
    ma = float(sig)         // None
    if t == kSma            // Simple
        ma := sma(sig, len)
    if t == kEma            // Exponential
        ma := ema(sig, len)
    if t == kWma            // Weighted
        ma := wma(sig, len)
    if t == kAlma           // Arnaud Legoux
        ma := alma(sig, len, vfi_almaOffset, vfi_almaSigma)
    ma

calc_vfi(fviPeriod, smoothType, smoothLen, coef, vCoef) =>
    avg = nz(hlc3)
    inter = log(avg) - log(avg[1])
    vInter = stdev(inter, 30)
    cutOff = coef * vInter * close
    vAve = smooth(kSma, volume[1], fviPeriod)
    vMax = vAve * vCoef
    vC = min(volume, vMax)
    mf = avg - avg[1]
    vCp = iff(mf > cutOff, vC, iff(mf < -cutOff, -vC, 0))
    sVfi = sum(vCp, fviPeriod) / vAve
    vfi = smooth(smoothType, sVfi, smoothLen)
    
value_vfi = calc_vfi(vfi_length, vfi_smoothType, vfi_smoothLen, vfi_coef, vfi_volCutoff)
value_ma = smooth(vfi_maType, value_vfi, vfi_maLength)

longEMAval= ema(close, vfi_longEMA)
shortEMAval1= ema(close, vfi_shortEMA1)
shortEMAval2= ema(close, vfi_shortEMA2)

color_vfi = vfi_showTrend ? vfi_trendColor(value_vfi) : vfi_color(value_vfi)
color_osc = vfi_showFill ? osc_color(value_vfi) : na
color_ma = vfi_showMa ? kMaColor : na


// Drawings

plot_vfi = plot(value_vfi, title="VFI", color=color_vfi, linewidth=1)
plot_fill = plot(0, color=color_vfi, editable=false)
fill(plot_vfi, plot_fill, title="Oscillator Fill", color=color_osc, transp=75) 
hline(vfi_buyLine, color=color.green, title="Buy Line", linewidth=2, linestyle=hline.style_dashed)
hline(vfi_sellLine, color=color.purple, title="Sell Line", linewidth=2, linestyle=hline.style_dashed)
plot(value_ma, title="MA", color=color_ma, linewidth=2)

strategy.entry(id="VFI LE", long=true,  when=crossover(value_vfi,vfi_buyLine)  and ( shortEMAval1 >= longEMAval  ))

//strategy.close(id="VFI LE", comment="Exit",   when=crossunder(value_vfi,vfi_sellLine))
strategy.close(id="VFI LE", comment="TP Exit",   when=crossunder(value_vfi,vfi_sellLine) and close>strategy.position_avg_price)
//strategy.close(id="VFI LE", comment="Exit",   when=  (shortEMAval1 > shortEMAval2 )  and crossunder(close, shortEMAval2))

//stoploss
stopLossVal =   strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01) 
strategy.close(id="VFI LE", comment="SL Exit",   when=crossunder(value_vfi,vfi_sellLine) and close < stopLossVal)