Estrategia de inversión de tendencias ideológicas dinámicas


Fecha de creación: 2023-12-13 16:52:34 Última modificación: 2023-12-13 16:52:34
Copiar: 0 Número de Visitas: 635
1
Seguir
1621
Seguidores

Estrategia de inversión de tendencias ideológicas dinámicas

Descripción general

Las estrategias de reversión de tendencias ideológicas dinámicas utilizan la regresión lineal para predecir precios y la generación de señales de negociación en combinación con la ideología de la formación de promedios móviles. La captura de la reversión de tendencia se produce cuando el precio previsto se produce una señal de compra cuando el precio previsto se cruza de abajo hacia arriba a través de la media móvil; y cuando el precio previsto se produce una señal de venta cuando se cruza de arriba hacia abajo a través de la media móvil.

Principio de estrategia

  1. Regresión lineal del precio de las acciones basado en el volumen de transacciones, obteniendo el valor de la previsión de precios
  2. Cálculo de las medias móviles en diferentes condiciones
  3. Cuando el precio previsto cruza la media móvil de abajo hacia arriba, se genera una señal de compra.
  4. Cuando el precio previsto cruza la media móvil de arriba a abajo, se genera una señal de venta
  5. El indicador MACD es el indicador más importante para determinar el momento de la reversión de la tendencia

La combinación de varias formas de confirmación de la señal para evitar falsas rupturas mejora la precisión de la señal.

Análisis de las ventajas

  • Utiliza la regresión lineal para mejorar la precisión de las señales para predecir tendencias de precios
  • La combinación de media móvil con ideología para captar el cambio de tendencia
  • La regresión lineal basada en el volumen de transacciones tiene más sentido económico
  • Combinación de indicadores como el MACD para la confirmación múltiple, reduciendo las falsas señales

Análisis de riesgos

  • El ajuste de los parámetros de la regresión lineal tiene una gran influencia en los resultados
  • La media móvil también afecta la calidad de la señal
  • Aunque existen mecanismos de confirmación, existe el riesgo de falsas señales.
  • El código se puede optimizar aún más para reducir el número de transacciones y aumentar la rentabilidad

Dirección de optimización

  • Parámetros para optimizar la regresión lineal y las medias móviles
  • Aumentar las condiciones de confirmación y reducir la tasa de falsedad
  • El cambio de tendencia en la calidad combinado con más factores
  • Optimización de las estrategias de stop loss para reducir el riesgo de una sola transacción

Resumir

La estrategia de reversión de tendencia de la ideología dinámica integra la predicción de regresión lineal y la formación de promedios móviles para capturar el momento de la reversión de tendencia. Tiene una mayor fiabilidad en comparación con un solo indicador. Al mismo tiempo, la estrategia puede mejorar aún más la calidad de la señal y los niveles de ganancias mediante la optimización de los parámetros y las condiciones de confirmación.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 1m
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/
// © stocktechbot
//@version=5
strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0)

//Linear Regression

vol = volume

// Function to calculate linear regression
linregs(y, x, len) =>
    ybar = math.sum(y, len)/len
    xbar = math.sum(x, len)/len
    b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len)
    a = ybar - b*xbar
    [a, b]

// Historical stock price data
price = close

// Length of linear regression
len = input(defval = 21, title = 'Strategy Length')
linearlen=input(defval = 9, title = 'Linear Lookback')
[a, b] = linregs(price, vol, len)

// Calculate linear regression for stock price based on volume
//eps = request.earnings(syminfo.ticker, earnings.actual)
//MA For double confirmation

out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)

// Predicted stock price based on volume
predicted_price = a + b*vol

// Check if predicted price is between open and close
is_between = open < predicted_price and predicted_price < close

//MACD
//[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

// Plot predicted stock price
plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price")
plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price")
//offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200")
[macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9)

//BUY Signal

longCondition=false
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macdLine,2)
macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen))  and (signalLine < macdLine)
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
daysSinceEntry = len
daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000))
percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100
//trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100

//label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange)))
shortCondition=false
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macdLine,1)
macdsell = macdLine < signalLine
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true

if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)