Seguimiento de la estrategia máxima de ayer


Fecha de creación: 2023-10-08 14:06:55 Última modificación: 2023-10-08 14:06:55
Copiar: 0 Número de Visitas: 757
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia opera sobre la base del precio más alto del día anterior de negociación y es de tipo seguimiento de tendencias. Se abre una posición adicional cuando se rompe el precio más alto del día anterior de negociación, aunque se vuelva a abrir una posición aunque se rompa varias veces ese día.

Principio de estrategia

  1. El uso de la función LucF para evitar la retroalimentación es espiar la línea K más reciente.

  2. Determine si el día de apertura de una nueva operación. Registre el precio máximo de max_today y el precio mínimo de min_today.

  3. Compara los precios más altos actuales de high y max_today, actualiza max_today

  4. Compara los precios mínimos actuales de low y min_today, actualiza min_today。

  5. Dibujar los precios más altos y más bajos del día anterior.

  6. Si se establece un punto de apertura para romper el precio más alto del día anterior, se puede agregar un GAP de cierta magnitud al precio más alto para retrasar o adelantar la entrada.

  7. Establezca el índice de stop loss sl y el índice de stop loss tp。

  8. Se abre una posición cuando el precio supera el precio más alto del día anterior.

  9. Establezca puntos de parada y de suspensión.

  10. Se puede elegir si se activa el seguimiento de la parada, establecer los requisitos mínimos para iniciar el seguimiento de la parada y la distancia de seguimiento de la parada.

  11. Se puede elegir si el estado de la EMA es cerrado.

Análisis de las ventajas

Se trata de una estrategia de seguimiento de tendencias relativamente sencilla que tiene las siguientes ventajas:

  1. Las señales estratégicas son simples, claras y fáciles de implementar.

  2. Las señales de confirmación de tendencias que se forman a partir de las rupturas de los precios más altos del día anterior pueden filtrar el ruido de los mercados convulsionados.

  3. La sensibilidad de entrada se puede ajustar mediante los parámetros GAP.

  4. El riesgo global es controlado y el stop loss claro.

  5. Se puede elegir si se utilizará el seguimiento de la pérdida para bloquear más ganancias.

  6. La EMA ha decidido que los vehículos que se encuentran en peligro de muerte deben ser sometidos a un tratamiento de emergencia.

Análisis de riesgos

La estrategia también tiene algunos riesgos a tener en cuenta:

  1. El fracaso de la ruptura puede causar pérdidas y se necesita un precio de parada razonable.

  2. La efectividad de las rupturas depende de que el mercado esté en tendencia y sea susceptible de ser engañado en mercados convulsivos.

  3. El seguimiento de los estancamientos puede ser demasiado sensible si se configura incorrectamente y se detiene con un pequeño ajuste de precio.

  4. La EMA puede ser demasiado sensible o lenta si los parámetros no son elegidos correctamente.

  5. Hay más variables que necesitan atención y optimización, como el GAP, la amplitud de stop loss, la configuración de stop loss de seguimiento, etc.

Dirección de optimización

La estrategia puede seguir optimizándose en los siguientes aspectos:

  1. El stop loss se ajusta desde el valor fijo al ATR o al stop loss dinámico de la tendencia.

  2. Aumentar la efectividad de las brechas a través de filtros de diferencia estándar.

  3. Aumentar las condiciones basadas en la volatilidad para evitar una ruptura ineficaz de la situación sísmica.

  4. Optimización de los parámetros de la EMA para un juicio más estable y preciso.

  5. Optimización de los parámetros de seguimiento de pérdidas para que estén más ajustados a la amplitud de las fluctuaciones del mercado.

  6. Prueba de la robustez de los parámetros de las diferentes variedades.

  7. Mecanismos para ajustar dinámicamente el tamaño de las posiciones.

Resumir

La estrategia en general es más sencilla y práctica, pertenece a la típica estrategia de seguimiento de tendencias, la ruptura del precio más alto del día de negociación anterior sirve como señal para seguir la tendencia, y el control del riesgo se realiza principalmente mediante el alto de pérdidas. Mediante la optimización de parámetros razonables, la estrategia puede obtener un mejor efecto en situaciones de tendencia. Sin embargo, se debe tener en cuenta el control de la estrategia de alto de pérdidas y las condiciones de filtración para evitar ser bloqueado en situaciones de crisis.

Código Fuente de la Estrategia
/*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)