Estrategia de inversión de tendencia de patrón dinámico

El autor:¿ Qué pasa?, Fecha: 2023-12-13 16:52:34
Las etiquetas:

img

Resumen general

La estrategia de reversión de tendencia de patrón dinámico utiliza regresión lineal para predecir los precios y líneas de promedio móvil para formar un patrón para generar señales comerciales.

Estrategia lógica

  1. Calcular la regresión lineal del precio de las acciones en función del volumen de operaciones para obtener el precio previsto
  2. Calcular las medias móviles en diferentes condiciones
  3. Generar una señal de compra cuando el precio previsto cruza la media móvil al alza
  4. Generar una señal de venta cuando el precio previsto cruza la media móvil a la baja
  5. Incorporar el indicador MACD para determinar el momento de la inversión de tendencia

La combinación de las señales anteriores con múltiples confirmaciones evita errores y mejora la precisión.

Análisis de ventajas

  • Utilice la regresión lineal para predecir la tendencia del precio, mejorando la precisión de la señal
  • Captura de las inversiones de tendencia mediante patrones de medias móviles
  • La regresión basada en el volumen de operaciones tiene un mejor significado económico
  • Las confirmaciones múltiples por el MACD, etc. reducen las señales falsas

Análisis de riesgos

  • Los parámetros de regresión lineal tienen un impacto significativo en los resultados
  • La media móvil también afecta la calidad de la señal
  • A pesar de tener confirmaciones, las señales falsas siguen siendo un riesgo
  • El código se puede optimizar aún más para reducir la frecuencia del comercio y mejorar la tasa de ganancia

Direcciones de optimización

  • Optimizar los parámetros de regresión lineal y medias móviles
  • Añadir más condiciones de confirmación para reducir las tasas de señal falsa
  • Incorporar más factores para juzgar la calidad de las inversiones de tendencia
  • Mejorar las estrategias de stop loss para reducir los riesgos de las operaciones individuales

Conclusión

La estrategia de inversión de tendencia de patrones dinámicos integra la predicción de regresión lineal y los patrones de promedio móvil para capturar las inversiones de tendencia.


/*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)




Más.