La estrategia de alta fuga de ayer

El autor:¿ Qué pasa?, Fecha: 2023-11-06 10:49:57
Las etiquetas:

img

Resumen general

La estrategia de ruptura alta de ayer es un sistema de seguimiento de tendencias que se extiende cuando el precio se rompe por encima del máximo de ayer, incluso si la ruptura ocurre varias veces en un día.

Principio

La estrategia emplea varios indicadores técnicos para las señales de entrada y salida:

  • Filtro ROC - La estrategia solo está habilitada cuando el cierre de hoy tiene un cambio de precio en porcentaje por encima de un umbral en comparación con el cierre del día anterior.

  • Punto de activación: los precios máximos, mínimos y abiertos de hoy se registran.

  • Condiciones de entrada y salida: después de la entrada, se establecen los porcentajes de stop loss y take profit. Se puede habilitar la parada de seguimiento para bloquear la ganancia. Salida condicional cuando el precio cae por debajo de una EMA de referencia.

  • Configuración - porcentaje de brecha para anticipar o retrasar la entrada.

Específicamente, rastrea el precio alto de hoy para la señal de entrada. Entrada larga cuando el precio se rompe por encima del máximo de hoy. Luego se establecen salidas de stop loss y take profit, con la parada de seguimiento habilitada. Salida alternativa cuando el precio cruza por debajo de la EMA dada. Optimización mediante el establecimiento del porcentaje de brecha, el ajuste de las relaciones de stop loss y take profit para controlar el riesgo, lo que permite que la parada de seguimiento bloquee la ganancia.

Análisis de ventajas

Las ventajas de esta estrategia:

  • Siguiendo la tendencia, captura ganancias de los movimientos de tendencia.

  • La estrategia de escape da señales claras de entrada.

  • Considera el alto precio de hoy, evita entradas consecutivas.

  • Detener pérdidas y obtener ganancias ayuda a controlar el riesgo.

  • El trailing stop cierra en ganancias.

  • El tiempo de entrada se puede ajustar con la optimización de parámetros para controlar el riesgo.

  • Simple e intuitivo, fácil de entender e implementar.

  • Aplicable a las operaciones largas y cortas.

Análisis de riesgos

Los riesgos a considerar:

  • Las estrategias de ruptura son susceptibles a los golpes, el precio puede revertirse inmediatamente después de la entrada.

  • Solo es eficaz para mercados de tendencia, su desempeño es inferior en condiciones variadas.

  • Se necesita un porcentaje razonable de stop loss, demasiado amplio puede aumentar la pérdida.

  • Se necesita un porcentaje razonable de diferencia, demasiado agresivo puede aumentar la pérdida.

  • Una fuga falsa puede causar pérdidas innecesarias, se requiere ajuste.

  • El volumen necesita soporte para seguir adelante después de la ruptura.

  • Consistencia necesaria entre los parámetros a través de los plazos.

Direcciones de optimización

Optimizaciones posibles:

  • Añadir otros indicadores como el volumen, la volatilidad para evitar los golpes durante los mercados de variación.

  • Añadir indicadores de ajuste de la curva para calificar la fuerza de la tendencia, evitar tendencias falsas.

  • Optimización dinámica de la brecha de entrada basada en la volatilidad del mercado.

  • Optimización dinámica del stop loss y del take profit siguiendo las condiciones del mercado.

  • Diferentes conjuntos de parámetros para diferentes símbolos y plazos.

  • Aprendizaje automático para TEST impacto de parámetros en el rendimiento de la estrategia.

  • Añadir la funcionalidad de Opciones para optimizar las configuraciones.

  • Aplicabilidad de la investigación en diferentes condiciones de mercado.

  • Ampliarse para incluir estrategias transversales y multiactivos.

Conclusión

La estrategia ofrece un rendimiento decente durante los mercados de tendencia basado en la ruptura del concepto alto de ayer. Pero existen riesgos de problemas de optimización de parámetros. Se pueden realizar optimizaciones adicionales mediante la adición de juicios, ajuste dinámico de parámetros, expansión a estrategias combinadas, etc. En general, se adapta a la tendencia a corto plazo, pero se necesita control de riesgos y ajuste de parámetros.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
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: © tumiza 999 
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High v.17.07", overlay=true, pyramiding = 1,
         initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10,
         slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
         commission_type=strategy.commission.percent, commission_value=0.075
         )

// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------

// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)

roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")

closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100  > roc_threshold  : true


// -----------------------------------------------------------------------------
// Trigger Point 
// -----------------------------------------------------------------------------

open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60

bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")

first_bar = 0
if open_session
    first_bar := bar_index

var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0

if first_bar
    high_daily1 := max_today
    low_daily1 := min_today
    today_open := open
    max_today := high
    min_today := low


if high >= max_today
    max_today := high

if low < min_today
    min_today := low


same_day  = today_open == today_open[1]

plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')

// -----------------------------------------------------------------------------
// Strategy settings 
// -----------------------------------------------------------------------------

Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100

sl  = input.float(3, "Stop-loss", step= 0.5,  group = "Entry")
tp  = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)

sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100

stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100

mess_buy = "buy"
mess_sell = "sell"

// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------

if close < high_daily1 and roc_filter
    strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)

ts_n  = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)

plot(ma1, title='EMA', color=color.new(color.yellow, 0))

if ts_n == true
    strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
    strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)

if close_ema == true and ta.crossunder(close,ma1)
    strategy.close("Entry",comment = "Close" , alert_message = mess_sell)



Más.