
La estrategia de negociación de cruce de oro es una estrategia de seguimiento de tendencias de línea media y larga. Identifica la dirección de la tendencia del precio de las acciones mediante el cálculo de los indicadores SR y los indicadores de señales SR, y en combinación con una red neuronal, traza un canal de tendencia para realizar operaciones de seguimiento de tendencias. Genera una señal de compra cuando el indicador SR pasa por encima de la señal SR; genera una señal de venta cuando el indicador SR pasa por debajo de la señal SR.
El indicador central de la estrategia es el indicador SR y el indicador de la señal SR. El indicador SR es una síntesis secundaria de la media WMA con un parámetro de 8 períodos y la media SMA. El indicador de la señal SR es un indicador SR calculado con un parámetro de 20 períodos.
La estrategia utiliza un algoritmo de red neuronal para trazar automáticamente los límites superiores e inferiores de los precios de las acciones, formando un canal de adaptación. El límite superior es una entrada con el máximo histórico del indicador SR, el límite inferior es una entrada con el mínimo histórico, y luego se calcula la curva de regresión como el límite inferior superior del canal, respectivamente. La curva del canal es más suave después de pasar por una onda de retroceso lineal de adaptación.
Cuando se pasa la señal de SR en el indicador SR, se genera una señal de compra; cuando se pasa la señal de SR debajo del indicador SR, se genera una señal de venta. Después de emitir la señal de más o menos, la relación entre el precio de la acción y el límite superior o inferior del canal determina la posición de parada de pérdida.
La estrategia está basada en el seguimiento de tendencias, con los siguientes riesgos principales:
Para controlar el riesgo, se recomienda combinar otras estrategias y evitar operaciones de una sola estrategia; al mismo tiempo, optimizar la configuración de los parámetros para adaptarse a diferentes entornos de mercado.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimizar los parámetros de los indicadores de SR y de los indicadores de la señal para mejorar la estabilidad de la señal cruzada;
Optimizar el ciclo de longitud de los canales de adaptación y suavizar la curva de los canales;
Añadir otros indicadores de filtración para evitar errores, como indicadores de potencia, índices de fluctuación, etc.
Optimización en tiempo real de la curva del canal combinada con algoritmos de aprendizaje profundo para mejorar la adaptabilidad.
La estrategia de comercio cruzado de oro es una estrategia cuantitativa que sigue de manera efectiva las tendencias de la línea media larga. Tiene una alta probabilidad de determinar correctamente la dirección de la tendencia y un riesgo de operación bajo. Con un gran espacio para optimizar los modelos algorítmicos, la estrategia tiene la posibilidad de convertirse en una herramienta poderosa para seguir los cambios en la tendencia 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_))