Esta estrategia combina los donchians de varios marcos de tiempo con breakouts a corto plazo durante una sesión definida por el usuario.
Calcular los puntos medios diarios y a corto plazo para formar zonas de ruptura en los marcos de tiempo.
Solo negocie durante una sesión de negociación personalizable.
Utilice la EMA en tiempo real del precio como precio de entrada.
Deténgase fuera de las zonas de escape y deje de hacerlo cuando falle.
Cierre posiciones cuando el precio vuelva a caer cerca del punto medio, confirmando el fracaso de la ruptura.
Multi-marcos de tiempo se combina para filtrar eficazmente las fugas falsas.
Las sesiones definidas evitan los riesgos en torno a los principales eventos noticiosos.
El seguimiento de la EMA permite entradas oportunas en línea con el impulso.
Las paradas ayudan a controlar los riesgos.
La salida forzada de la sesión evita riesgos durante la noche.
Las fugas a corto plazo pueden enfrentarse a golpes y paradas.
Algunos breakouts pueden no obtener beneficios completos antes de que termine la sesión.
Una mala definición de la sesión podría perder oportunidades.
No hay garantía de que cada fuga alcance el beneficio esperado.
La optimización corre el riesgo de sobreajustar los parámetros.
Prueba los parámetros de fuga para encontrar las combinaciones óptimas.
Evaluar indicadores adicionales para mejorar la precisión de las entradas.
Optimizar la sesión de negociación para obtener ganancias frente al riesgo.
La integración de la investigación toma estrategias de ganancias para obtener ganancias.
Diferencias de parámetros de ensayo entre varios símbolos.
Emplear el aprendizaje automático para la optimización de parámetros dinámicos.
Esta estrategia intenta el scalping a corto plazo en breakouts de sesión limitados.
/*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) // -------------------------------------------------------------------------------------------------