Estrategia de tendencia baja-alta

El autor:¿ Qué pasa?, Fecha: 2023-11-23 11:03:18
Las etiquetas:

img

Resumen general

Esta estrategia está diseñada basándose en el principio de mercado de comprar bajo y vender alto. Rastrea los precios más altos y más bajos durante un cierto período, establece una posición larga cuando el precio rompe el precio más bajo y cierra la posición cuando el precio cae por debajo del precio más alto o se cumple la condición de obtener ganancias. Al mismo tiempo, esta estrategia agrega un filtro de tendencia opcional que solo permite comprar cuando el precio está en una tendencia alcista.

Estrategia lógica

Cálculo del precio más alto y más bajo

  • Precio más bajo (bajos criterios): Llama a la función ta.lowest para calcular el precio más bajo durante el período de observación establecido por el usuario (default 20 bares) y trazar la línea de precio más baja.

  • Precio más alto (criterios más altos): Llama a la función ta.highest para calcular el precio más alto durante el período de observación establecido por el usuario (default 10 bares) y trazar la línea de precio más alta.

Señales de entrada

Cuando el precio actual rompe la línea de precio más baja, se activa una señal de compra para establecer una posición larga.

Señales de salida

Se proporcionan dos métodos de salida para la opción:

  1. Profitos fijos: cierra la posición para obtener beneficios cuando el precio alcanza el nivel de ganancias fijadas (por ejemplo, un 8% por encima del precio de entrada).

  2. Desglose del precio más alto: Cierre la posición para reducir las pérdidas cuando el precio cae por debajo de la línea de precio más alta, juzgando una inversión de tendencia.

Filtro de tendencia

Añadir una línea EMA para determinar la dirección de la tendencia. Permitir la compra sólo cuando el precio está por encima de la línea EMA (una tendencia alcista).

Análisis de ventajas

  • Adopte la estrategia clásica de comprar bajo y vender alto, alineándose con los fundamentos del mercado.

  • Añadir juicio de tendencia para evitar la apertura frecuente durante las fluctuaciones de precios.

  • Proporcionar dos opciones de salida para perseguir altas ganancias o reducir las pérdidas.

  • Los parámetros personalizables se adaptan a más entornos de mercado.

  • Gran espacio para la optimización de la estrategia a través del ajuste de parámetros, diseño de filtros, etc.

Análisis de riesgos

  • El nivel de utilidad fija no se ajusta en función de los movimientos reales del mercado, lo que resulta en una utilidad prematura o en un objetivo de utilidad insuficiente.

  • La venta al precio más alto puede generar ya enormes pérdidas, incapaz de controlarlas de manera efectiva.

  • El juicio de la tendencia de la EMA sólo se remonta a un cierto período, posiblemente con retraso respecto al cambio de tendencia real.

  • Los resultados de las pruebas de retroceso no pueden representar el futuro.

Direcciones de optimización

  • Añadir métodos de toma de ganancias como parada de seguimiento, salida parcial, etc. para ajustar dinámicamente el nivel de toma de ganancias.

  • Optimizar las señales de salida, por ejemplo, salidas parciales, añadiendo otros indicadores.

  • Mejorar el juicio de tendencias mediante la incorporación de más indicadores o aprendizaje automático.

  • Optimice los parámetros mediante pruebas de retroceso más extensas para encontrar conjuntos óptimos.

  • Añadir métodos de stop loss para controlar mejor las pérdidas.

Resumen de las actividades

Esta estrategia generalmente aplica el clásico principio de compra baja y venta alta y puede funcionar bien bajo ciertas condiciones. Pero todavía hay margen de mejora a través de ajuste de parámetros, optimización de salida, mecanismos de stop loss, etc. Este artículo proporciona un análisis en profundidad de la lógica, pros, contras y direcciones de optimización de la estrategia, con el objetivo de compartir la idea de la estrategia, así como recordar a los inversores los riesgos y el comercio con cautela con estrategias cuantitativas.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
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/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Más.