Trading de líneas de tendencia en tiempo real basado en puntos pivote y pendiente

ATR ADX MA
Fecha de creación: 2024-04-26 15:34:28 Última modificación: 2024-04-26 15:34:28
Copiar: 2 Número de Visitas: 859
1
Seguir
1617
Seguidores

Trading de líneas de tendencia en tiempo real basado en puntos pivote y pendiente

Descripción general

La estrategia utiliza los puntos de apoyo (PivotHigh y PivotLow) para identificar los puntos altos y bajos de la fluctuación de los precios y, sobre esta base, trazar líneas de tendencia hacia arriba y hacia abajo. La inclinación de la línea de tendencia se obtiene mediante métodos como ATR (Rango real medio), diferencia estándar o regresión lineal, y se multiplica por un factor de inclinación.

Principio de estrategia

  1. Utiliza las funciones ta.pivothigh () y ta.pivotlow () para detectar los máximos de fluctuación () y los mínimos de fluctuación () en un período determinado en el pasado.
  2. De acuerdo con el método de cálculo seleccionado ((ATR, diferencia estándar o regresión lineal) se calcula la inclinación de la línea de tendencia y se hace un ajuste multiplicado por el factor de inclinación ((mult)).
  3. Utiliza la pendiente y el precio de referencia para calcular el valor actual de las líneas de tendencia ascendente (upper) y descendente (lower).
  4. Determine si el precio de cierre actual ha roto la línea de tendencia: si el precio de cierre está por encima de la línea de tendencia alcista, genera una señal de ruptura hacia arriba; si el precio de cierre está por debajo de la línea de tendencia descendente, genera una señal de ruptura hacia abajo.
  5. Se puede trazar una línea de tendencia en el gráfico y elegir si se desea extender la línea de tendencia.
  6. Se negocian de acuerdo con la señal de ruptura: la ruptura hacia arriba abre más órdenes, la ruptura hacia abajo abre una carta vacía.

Ventajas estratégicas

  1. La estrategia genera señales de negociación basadas en hechos objetivos sobre el comportamiento de los precios (puntos de apoyo y líneas de tendencia) y tiene cierta fiabilidad y estabilidad.
  2. La inclinación de la línea de tendencia se puede ajustar dinámicamente en función de la volatilidad del mercado para adaptarse a diferentes circunstancias del mercado.
  3. El usuario puede elegir con flexibilidad el método de cálculo de la pendiente y la configuración de los parámetros para optimizar el rendimiento de la estrategia.
  4. La estrategia ofrece dos modos de señal en tiempo real y señal de retardo, que pueden satisfacer las necesidades de diferentes usuarios.
  5. La función de alerta incorporada ayuda a los usuarios a obtener oportunidades de negociación a tiempo.

Riesgo estratégico

  1. La estrategia puede generar frecuentes falsas señales en mercados convulsivos o cuando la tendencia no es clara, lo que puede conducir a una disminución de la rentabilidad.
  2. El rendimiento de la estrategia depende de la configuración de los parámetros, los parámetros inadecuados pueden causar la falla de la estrategia o generar demasiadas operaciones.
  3. En el modo de señal de retardo, los resultados reales de las transacciones pueden diferir de los resultados de las pruebas históricas debido a la existencia de retroalimentación.

Dirección de optimización de la estrategia

  1. Introducir más indicadores técnicos o características del comportamiento de los precios, como volumen de transacciones, volatilidad, etc., para ayudar a la confirmación de señales de ruptura de la línea de tendencia y mejorar la calidad de la señal.
  2. Se filtran las señales de negociación, tomando en cuenta factores como la duración de la ruptura de la línea de tendencia, la amplitud de la ruptura, etc., para reducir las señales falsas.
  3. Optimizar la gestión de posiciones y el control de riesgos, como ajustar el tamaño de las posiciones en función de la intensidad de las tendencias del mercado o la volatilidad de las tasas de cambio, y establecer posiciones razonables de stop loss y stop loss.
  4. Optimización de los parámetros, como el uso de aprendizaje automático o algoritmos de optimización, para encontrar la combinación óptima de parámetros.

Resumir

La estrategia utiliza los puntos de apoyo y la pendiente de la línea de tendencia para construir un sistema de comercio de línea de tendencia en tiempo real. Al capturar los eventos de ruptura de la línea de tendencia, la estrategia puede operar en las primeras etapas de la formación de la tendencia. A pesar de que la estrategia tiene ciertas ventajas, se debe tener en cuenta sus riesgos en mercados convulsos y mejorar aún más la estabilidad y la rentabilidad de la estrategia mediante la introducción de más información, la optimización de la filtración de señales y la gestión de posiciones.

Código Fuente de la Estrategia
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(" only Ajay ", overlay=true)

//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')

//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')

//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.

var offset = backpaint ? length : 0

n = bar_index
src = close

ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)

//Slope Calculation Method
slope = switch calcMethod
    'Atr'    => ta.atr(length) / length * mult
    'Stdev'  => ta.stdev(src,length) / length * mult
    'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult

//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl

upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl

var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos

//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl  = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl  = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)

// if ph and showExt
//     uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
//     uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))

// if pl and showExt
//     dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
//     dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))

//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)

//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]

if (upBreakout)
    strategy.entry("Up Breakout", strategy.long)

if (dnBreakout)
    strategy.entry("Down Breakout", strategy.short)

//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')

//------------------------------------------------------------------------------}