Estrategia de período transversal de AlphaTrend

El autor:¿ Qué pasa?, Fecha: 2023-09-28 11:05:27
Las etiquetas:

Resumen general

Esta estrategia se basa en el indicador AlphaTrend, que combina las ventajas de los indicadores RSI y MFI y puede lograr buenos resultados tanto en mercados de tendencia alcista como bajista.

Estrategia lógica

  1. Calcular el indicador ATR para medir la volatilidad del mercado
  2. Utilizar el índice de rentabilidad para determinar la dirección del mercado si no existen datos de volumen; utilizar las IFM si existen datos de volumen
  3. Calcular las bandas superior e inferior basándose en el ATR y la dirección del mercado
  4. Calcular la curva de AlphaTrend, que incorpora bandas dinámicas superiores e inferiores
  5. Generar señales de compra y venta cuando el precio cruza por encima o por debajo de la curva AlphaTrend

La estrategia se basa principalmente en la curva AlphaTrend para determinar la dirección de la tendencia del precio.

Ventajas

  1. AlphaTrend combina los puntos fuertes de los índices de crecimiento y las IFM, adaptándose a los mercados alcista y bajista
  2. Las bandas dinámicas superior e inferior se ajustan automáticamente en función de la volatilidad del mercado
  3. Incorpora información tanto sobre precios como sobre volumen, evitando señales falsas
  4. El enfoque de ruptura identifica claramente la dirección de la tendencia
  5. Lógica sencilla y fácil de entender

En resumen, esta estrategia funciona tanto para los mercados alcistas como bajistas, filtra el ruido del mercado de manera efectiva, identifica las tendencias con precisión y es una estrategia de seguimiento de tendencias eficiente.

Los riesgos

  1. La curva de AlphaTrend puede tener falsas rupturas, que requieren confirmación de otros indicadores
  2. Muchas señales falsas pueden ocurrir durante la consolidación del mercado
  3. Resultados ineficaces debido a un mal ajuste de parámetros
  4. Las pérdidas de detención pueden realizarse durante los picos, incurriendo en grandes pérdidas.

Para abordar los riesgos, el stop loss puede controlar la pérdida de una sola operación; combinarse con otros indicadores para evitar señales falsas; ajustar los parámetros basados en diferentes mercados.

Oportunidades de mejora

  1. Prueba diferentes combinaciones de parámetros para ajustes optimizados
  2. Incorporar otros indicadores para formar condiciones de confirmación
  3. Se utilizará un stop loss dinámico para controlar los riesgos.
  4. Comercio en diferentes plazos (5 meses, 15 meses, etc.) en función de las condiciones del mercado
  5. Refinar el sistema de tiempo de entrada para una entrada más precisa

Se pueden realizar nuevas optimizaciones mediante pruebas en diferentes mercados y parámetros para que la estrategia pueda adaptarse a más condiciones de mercado.

Conclusión

En general, esta estrategia de AlphaTrend es un sistema de seguimiento de tendencias simple y eficiente. Incorpora información de precio y volumen para adaptarse a los mercados alcistas y bajistas. El mecanismo de ruptura proporciona señales de entrada claras. Con un control adecuado del riesgo, puede lograr buenos resultados.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)


Más.