Estrategia de trading de tendencia basada en la Cruz de Oro

El autor:¿ Qué pasa?, Fecha: 2023-11-23 14:07:11
Las etiquetas:

img

Resumen general

La estrategia de negociación de cruz de oro es una estrategia de seguimiento de tendencias a medio y largo plazo. Identifica la dirección de tendencia de los precios de las acciones mediante el cálculo del indicador de SR y el indicador de señal de SR, e implementa operaciones de seguimiento de tendencia mediante el dibujo de un canal de tendencia utilizando algoritmos de red neuronal. Cuando el indicador de SR cruza la señal de SR, se genera una señal de compra. Cuando el indicador de SR cruza por debajo de la señal de SR, se genera una señal de venta. Esta estrategia también utiliza una técnica de filtro de regresión lineal adaptativa para optimizar la curva del canal, que suprime eficazmente las falsas señales.

Principios

El indicador SR es una síntesis secundaria del promedio móvil WMA y del promedio móvil SMA con un período de 8. El indicador de señal SR es el indicador SR calculado con un período de 20.

Esta estrategia utiliza un algoritmo de red neuronal para trazar automáticamente los límites superior e inferior del precio de las acciones para formar un canal adaptativo. El límite superior toma el valor máximo histórico del indicador SR como entrada, el límite inferior toma el valor mínimo histórico como entrada, y las curvas de regresión se calculan como los límites superior e inferior del canal respectivamente. La curva del canal es más suave después del filtrado de regresión lineal adaptativa.

Cuando el indicador SR cruza la señal SR, se genera una señal de compra. Cuando el indicador SR cruza por debajo de la señal SR, se genera una señal de venta. Después de que se emiten las señales largas y cortas, la relación entre el precio de la acción y los límites superior e inferior del canal determina las posiciones de stop loss y take profit.

Ventajas

  • utilizar la tecnología de síntesis bilineal para eliminar el impacto de las fluctuaciones de precios y determinar con precisión la dirección de la tendencia;
  • Los algoritmos de canales adaptativos optimizan el tiempo de entrada y salida y evitan las falsas rupturas.
  • Las curvas de canal aplican tecnología de filtro de regresión lineal adaptativa para evitar la distorsión de los extremos;
  • Las posiciones de stop loss y take profit cambian dinámicamente con el canal, rastreando automáticamente las tendencias de ganancia.

Análisis de riesgos

Los principales riesgos de esta estrategia de seguimiento de tendencias son:

  • Genera muchas señales falsas y operaciones excesivamente inválidas en tendencias oscilantes;
  • La ruptura rápida por debajo del límite inferior del canal causada por eventos repentinos resulta en enormes pérdidas;
  • La configuración incorrecta de parámetros puede causar fácilmente el fracaso de la estrategia.

Para controlar los riesgos, se recomienda combinar con otras estrategias en lugar de confiar en una sola estrategia; al mismo tiempo, optimizar la configuración de parámetros para adaptarse a los diferentes entornos del mercado.

Direcciones de optimización

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Optimizar los parámetros del indicador SR y del indicador de señal para mejorar la estabilidad de las señales cruzadas;

  2. Optimizar el período de ciclo del canal adaptativo para suavizar la curva del canal;

  3. Añadir otros indicadores de filtro para evitar errores de funcionamiento, como indicadores de energía, indicadores de volatilidad, etc.;

  4. Incorporar algoritmos de aprendizaje profundo para optimizar las curvas del canal en tiempo real y mejorar la adaptabilidad.

Resumen de las actividades

La estrategia de negociación cruzada de oro es una estrategia cuantitativa efectiva para rastrear las tendencias a medio y largo plazo. Tiene una alta probabilidad de determinar correctamente la dirección de la tendencia y bajos riesgos operativos. Con un gran espacio para optimizar el modelo de algoritmo, esta estrategia tiene el potencial de convertirse en una poderosa herramienta para rastrear los cambios en las tendencias de las acciones.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Más.