Estrategia de negociación de spreads a corto plazo basada en la ruptura de la sesión


Fecha de creación: 2023-09-20 17:00:16 Última modificación: 2023-09-20 17:00:16
Copiar: 1 Número de Visitas: 724
1
Seguir
1617
Seguidores

Descripción general

La estrategia combina un panel de paradas múltiples con un marco de tiempo múltiple para capturar brechas de línea corta y realizar operaciones de dispersión en un período de tiempo de sesión.

Principio de estrategia

  1. Calcula el día y las trayectorias aéreas de corto plazo, formando brechas en dos marcos de tiempo.

  2. Solo se puede operar en los períodos de negociación personalizados. Los períodos comienzan con la entrada de brechas y terminan con la salida de paradas.

  3. El precio calcula el EMA en tiempo real como el precio de entrada. El precio que supera la órbita media genera una señal de ruptura.

  4. Establezca una línea de pérdida fuera de la brecha.

  5. Cuando el precio retrocede cerca de la órbita media, se confirma que la ruptura ha fracasado y se liquida la posición.

Análisis de las ventajas

  1. La combinación de múltiples marcos de tiempo permite filtrar efectivamente las brechas falsas.

  2. La restricción de la hora de las transacciones evita los eventos de noticias importantes.

  3. La EMA puede seguir los precios de manera fluida y entrar en el mercado a tiempo.

  4. Establecer un límite de pérdidas ayuda a controlar el riesgo.

  5. La obligación de cerrar las posiciones por períodos de tiempo evita el riesgo de pasar la noche.

Análisis de riesgos

  1. Las situaciones en las que se puede activar el deterioro del cortocircuito.

  2. Algunos avances podrían no ser rentables antes de que finalice el periodo.

  3. La hora incorrecta también puede hacer que se pierda la oportunidad de negociar.

  4. No hay garantía de que cada avance llegue a los beneficios esperados.

  5. Puede haber problemas de ajuste en la optimización de los parámetros.

Dirección de optimización

  1. Prueba diferentes parámetros de ruptura para encontrar la combinación óptima.

  2. Evaluar otros indicadores para mejorar la precisión de la admisión.

  3. Optimizar el momento de negociación, buscando el equilibrio entre ganancias y riesgos.

  4. Investiga cómo las estrategias de contención de pérdidas pueden ser usadas para asegurar ganancias.

  5. Prueba de la variabilidad de los parámetros de configuración de las diferentes variedades.

  6. Parámetros de optimización dinámica de algoritmos de aprendizaje automático.

Resumir

La estrategia trata de realizar operaciones de dispersión en línea corta a través de brechas de sesión limitadas. La optimización de las brechas falsas y el control de riesgos pueden ser mejorados para una estrategia de negociación en línea corta práctica y eficiente.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Breakout Scalper", overlay=true)

// -------------------------------------------------------------------------------------------------
// INPUTS
// -------------------------------------------------------------------------------------------------
// Period of the "fast" donchian channel
fast_window = input(title="Fast Window",  defval=13, minval=1)
// Used for the volatility (atr) period
slow_window = input(title="Slow Window",  defval=52, minval=1)
// Period of EMA used as the current price
instant_period = input(title="Instant Period",  defval=3, minval=1)
// Minimum ratio of cloud width to ATR in order for trade to be active
cloud_min_percent = input(title="Minimum Cloud ATR Multiplier", type=float, defval=1.0, minval=0)
// Session where we allow trades to be active
trading_sesh = input(title="Trading Session",  defval='1000-1500')
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// SESSION TIMING
// -------------------------------------------------------------------------------------------------
is_newbar(t) =>
    na(t[1]) and not na(t) or t[1] < t

day_time = time("D")
sess_time = time(timeframe.period, trading_sesh)
day_open_bar = is_newbar(day_time)
sess_open_bar = is_newbar(sess_time)
sess_close_bar = na(sess_time) and not na(sess_time[1])
sess_is_open = false
sess_is_open := sess_open_bar ? true : (sess_close_bar ? false : sess_is_open[1])
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// DONCHIANS
// -------------------------------------------------------------------------------------------------
slow_high = na
slow_high := day_open_bar ? high : (high > slow_high[1] ? high : slow_high[1])
slow_low = na
slow_low := day_open_bar ? low : (low < slow_low[1] ? low : slow_low[1])
slow_mid = (slow_high + slow_low) / 2

fast_low = max(slow_low, lowest(fast_window))
fast_high = min(slow_high, highest(fast_window))
fast_mid = (fast_low + fast_high) / 2
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// TREND CLOUD
// -------------------------------------------------------------------------------------------------
cloud_width = fast_mid - slow_mid
slow_atr = atr(slow_window)
cloud_percent = cloud_width / slow_atr
cloud_color = cloud_percent > cloud_min_percent ? green : (cloud_percent < -cloud_min_percent ? red : gray)

fp = plot(fast_mid, title="Fast MidR", color=green)
sp = plot(slow_mid, title="Slow MidR", color=red)
fill(fp, sp, color=cloud_color)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// INSTANT PRICE
// -------------------------------------------------------------------------------------------------
instant_price = ema(close, instant_period)
plot(instant_price, title="Instant Price", color=black, transp=50)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// ENTRY SIGNALS & STOPS
// -------------------------------------------------------------------------------------------------
buy_entry_signal = sess_is_open and (instant_price > fast_mid) and (cloud_percent > cloud_min_percent)
sell_entry_signal = sess_is_open and (instant_price < fast_mid) and (cloud_percent < -cloud_min_percent)
buy_close_signal = sess_close_bar or (cloud_percent < 0)
sell_close_signal = sess_close_bar or (cloud_percent > 0)

entry_buy_stop = slow_high
entry_sell_stop = slow_low
exit_buy_stop = max(slow_low, fast_low)
exit_sell_stop = min(slow_high, fast_high)

entry_buy_stop_color = (strategy.position_size == 0) ? (buy_entry_signal ? green : na) : na
plotshape(entry_buy_stop, location=location.absolute, color=entry_buy_stop_color, style=shape.circle)
entry_sell_stop_color = (strategy.position_size == 0) ? (sell_entry_signal ? red : na) : na
plotshape(entry_sell_stop, location=location.absolute, color=entry_sell_stop_color, style=shape.circle)
exit_buy_stop_color = (strategy.position_size > 0) ? red : na
plotshape(exit_buy_stop, location=location.absolute, color=exit_buy_stop_color, style=shape.xcross)
exit_sell_stop_color = (strategy.position_size < 0) ? green : na
plotshape(exit_sell_stop, location=location.absolute, color=exit_sell_stop_color, style=shape.xcross)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// STRATEGY EXECUTION
// -------------------------------------------------------------------------------------------------
strategy.entry("long", strategy.long, stop=entry_buy_stop, when=buy_entry_signal)
strategy.cancel("long", when=not buy_entry_signal)
strategy.exit("stop", "long", stop=exit_buy_stop)
strategy.entry("short", strategy.short, stop=entry_sell_stop, when=sell_entry_signal)
strategy.cancel("short", when=not sell_entry_signal)
strategy.exit("stop", "short", stop=exit_sell_stop)
strategy.close("long", when=buy_close_signal)
strategy.close("short", when=sell_close_signal)
// -------------------------------------------------------------------------------------------------