Estrategia de seguimiento de tendencias PresentTrend


Fecha de creación: 2023-09-21 15:00:08 Última modificación: 2023-09-21 15:00:08
Copiar: 0 Número de Visitas: 615
1
Seguir
1617
Seguidores

Descripción general

La estrategia PresentTrend es una estrategia de seguimiento de tendencias personalizada que combina tendencias de mercado a corto y largo plazo para adaptarse a diferentes condiciones de mercado.

Principio de estrategia

La estrategia tiene dos partes:

  1. Indicador RSI o MFI personalizado: El indicador calcula el valor de PresentTrend en función del RSI o MFI, y genera señales de compra y venta en función de ese valor, lo que indica una posible reversión de la tendencia.

  2. Indicador ATR: es un indicador de seguimiento de tendencias popular que utiliza el rango de fluctuación real promedio (ATR).

Cuando las señales de compra y venta de las dos estrategias se activan simultáneamente, la estrategia abre una posición de compra o venta. Esto puede garantizar que las operaciones se realicen solo cuando las tendencias a corto y largo plazo coinciden, lo que mejora la fiabilidad de la estrategia.

Ventajas estratégicas

  • Combina tendencias a corto y largo plazo para diferentes condiciones de mercado
  • El uso de indicadores personalizados y ATR para mejorar la fiabilidad de la señal
  • Opciones para hacer solo más, solo menos o en ambos sentidos, para adaptarse a diferentes estilos de negociación
  • Parámetros predeterminados optimizados para equilibrar la sensibilidad y la estabilidad
  • Los parámetros se pueden ajustar según las preferencias personales y las estrategias de optimización

Riesgos estratégicos y soluciones

  • Todas las tendencias siguen la estrategia con el riesgo de ser aprovechadas.
  • Las transacciones bidireccionales multiespaciales pueden aumentar el número de transacciones y las comisiones
  • Si los parámetros están mal configurados, puede haber demasiadas señales de error.
  • Reducir adecuadamente el ciclo de tenencia de posiciones en las operaciones y reducir el riesgo de arbitraje
  • Se puede optar por hacer solo más o menos, reduciendo el número de transacciones
  • Los parámetros se deben probar y ajustar adecuadamente para garantizar que sean razonables

Dirección de optimización de la estrategia

  • Aumentar los mecanismos de suspensión de pérdidas y controlar mejor las pérdidas individuales
  • En combinación con otros indicadores de filtración de señales, para reducir las transacciones erróneas
  • Prueba de diferentes parámetros de ciclo de tenencia para encontrar el mejor parámetro
  • Intentar optimizar automáticamente los parámetros basados en el aprendizaje automático
  • Aprovechar más fuentes de datos, como el flujo de pedidos
  • Optimizar el código de la estrategia para mejorar la eficiencia de ejecución

Resumir

La estrategia PresentTrend es una estrategia de seguimiento de tendencias muy efectiva en general. Combina indicadores de tendencias a corto y largo plazo para aumentar la fiabilidad de la señal mientras se mantiene sensible. Al ajustar la dirección, los parámetros y agregar lógica adicional, la estrategia puede adaptarse a diferentes entornos de mercado y necesidades de los comerciantes.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
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/
// © PresentTrading

//@version=5

// Define the strategy settings
strategy('PresentTrend - Strategy [presentTrading]' , overlay=true, precision=3, default_qty_type=strategy.cash, 
 commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, 
  currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital= 10000)

// Define the input parameters
priceSource  = input.source(title='Source', defval=hlc3, group='PresentTrend') // The price source to use
lengthParam  = input.int(title='Length', defval=14, group='PresentTrend') // The length of the moving average
multiplier = input.float(title='Multiplier', defval=1.618, step=0.1, group='PresentTrend') // The multiplier for the ATR
indicatorChoice  = input.bool(title='Whether to use RSI or MFI', defval=false, group='PresentTrend') // Whether to use RSI or MFI

// Add a parameter for choosing Long or Short
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])

// Calculate the ATR and the upT and downT values
ATR = ta.sma(ta.tr, lengthParam)
upperThreshold = low - ATR * multiplier 
lowerThreshold  = high + ATR * multiplier 

// Initialize the PresentTrend indicator
PresentTrend = 0.0

// Calculate the PresentTrend indicator
PresentTrend := (indicatorChoice ? ta.rsi(priceSource, lengthParam) >= 50 : ta.mfi(hlc3, lengthParam) >= 50) ? upperThreshold < nz(PresentTrend[1]) ? nz(PresentTrend[1]) : upperThreshold : lowerThreshold > nz(PresentTrend[1]) ? nz(PresentTrend[1]) : lowerThreshold

// Calculate the buy and sell signals
longSignal  = ta.crossover(PresentTrend, PresentTrend[2])
shortSignal  = ta.crossunder(PresentTrend, PresentTrend[2])

// Calculate the number of bars since the last buy and sell signals
barsSinceBuy = ta.barssince(longSignal)
barsSinceSell = ta.barssince(shortSignal)
previousBuy = ta.barssince(longSignal[1])
previousSell = ta.barssince(shortSignal[1])

// Initialize the direction variable
trendDirection = 0

// Calculate the direction of the trend
trendDirection := longSignal and previousBuy > barsSinceSell ? 1 : shortSignal and previousSell > barsSinceBuy ? -1 : trendDirection[1]

// Check the trade direction parameter before entering a trade
if (trendDirection == 1 and (tradeDirection == "Long" or tradeDirection == "Both"))
    strategy.entry("Buy", strategy.long) 
if (trendDirection == -1 and (tradeDirection == "Short" or tradeDirection == "Both"))
    strategy.entry("Sell", strategy.short) 

// Add a stop mechanism when the tradeDirection is one-sided
if (tradeDirection == "Long" and trendDirection == -1)
    strategy.close("Buy")
if (tradeDirection == "Short" and trendDirection == 1)
    strategy.close("Sell")

// Visualization
plot(PresentTrend, color=color.blue, title="PresentTrend")
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")