La tendencia alta de la ruptura de ayer sigue la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-10-08 14:06:55
Las etiquetas:

Resumen general

Esta estrategia opera en base a los máximos del día de negociación anterior, trabajando en un modo de seguimiento de tendencias.

Estrategia lógica

  1. Utilice la función LucF para evitar el sesgo de la mirada en las pruebas de retroceso.

  2. Identifique si es un nuevo día de negociación abierto. Registre el máximo de hoy y el mínimo de hoy.

  3. Compare el máximo actual con max_today, actualice max_today si se supera.

  4. Compare el mínimo actual con min_today, actualice min_today si se viola.

  5. Graficar los niveles altos y bajos de los días de negociación anteriores.

  6. Establecer el punto de entrada en la ruptura de los máximos del día anterior, el GAP se puede añadir para avanzar o retrasar la entrada.

  7. Establezca el porcentaje de stop loss sl y el porcentaje de ganancias tp.

  8. Ir largo cuando el precio rompe el día de negociación anterior.

  9. Establezca el precio de stop loss y el precio de take profit.

  10. Opcionalmente, habilitar el stop loss trasero, con nivel de activación y distancia de desplazamiento.

  11. Opcionalmente cierre de operaciones basado en el cruce de la EMA.

Análisis de ventajas

Esta sencilla estrategia de seguimiento de tendencias tiene las siguientes ventajas:

  1. Generación de señal clara y directa, fácil de implementar.

  2. La ruptura de los máximos del día anterior proporciona la confirmación de la tendencia, reduciendo los golpes.

  3. El parámetro GAP permite ajustar la sensibilidad de entrada.

  4. El riesgo global se controla con un stop loss claro.

  5. El trailing stop se puede usar para obtener más ganancias.

  6. El cruce de la EMA evita quedar atrapado en tendencias a la baja.

Análisis de riesgos

Hay algunos riesgos a tener en cuenta:

  1. Una fuga fallida puede causar pérdidas.

  2. Requiere un mercado de tendencia, y probablemente en condiciones variables.

  3. Una parada de arrastre incorrecta puede ser detenida prematuramente.

  4. Una mala elección de parámetros de la EMA puede hacerla demasiado sensible o retrasada.

  5. Varias variables necesitan ajuste como GAP, stop loss, trailing stop, etc.

Oportunidades de mejora

Algunas maneras de optimizar aún más la estrategia:

  1. Utilice un stop loss dinámico basado en ATR o tendencia.

  2. Añadir un filtro para una ruptura válida utilizando la desviación estándar.

  3. Añadir condiciones de volatilidad para evitar una falsa ruptura en mercados agitados.

  4. Optimice el parámetro EMA para una señal más robusta.

  5. Ajuste fino de los parámetros de parada para que coincidan con la volatilidad del mercado.

  6. Prueba de la robustez de los parámetros en diferentes instrumentos.

  7. Añadir un mecanismo dinámico de dimensionamiento de la posición.

Conclusión

La estrategia es simple y práctica como un sistema típico de seguimiento de tendencias basado en la alta ruptura del día anterior. La gestión del riesgo depende principalmente de la parada de pérdida. Con la ajuste adecuado de los parámetros, puede funcionar bien en condiciones de tendencia. Pero se necesitan una parada de pérdida y filtros adecuados para evitar los golpes. El marco se puede mejorar aún más como base para las estrategias de seguimiento de tendencias.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-07 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub

//@version=5

strategy("Yesterday's High", 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.