Chiến lược này kết hợp với bảng dừng nhiều khoảng trống của khung thời gian đa dạng để thu thập các đột phá đường ngắn trong thời gian phiên để giao dịch phân tán.
Tính toán các quỹ đạo đa không khí trong ngày và ngắn hạn, tạo thành các lỗ hổng trong hai khung thời gian.
Chỉ giao dịch trong khoảng thời gian giao dịch tùy chỉnh.
Giá được tính EMA thời gian thực như giá vào. Giá vượt qua đường quỹ đạo sẽ tạo ra tín hiệu phá vỡ.
Thiết lập đường dừng bên ngoài lỗ đột phá.
Khi giá quay trở lại gần đường trung đạo, xác nhận phá vỡ thất bại và thanh toán.
Kết hợp nhiều khung thời gian, có thể lọc hiệu quả các đột phá giả.
Các nhà giao dịch cũng có thể hạn chế thời gian giao dịch để tránh các sự kiện tin tức quan trọng.
EMA có thể theo dõi giá theo thời gian.
Thiết lập đường dừng sẽ giúp kiểm soát rủi ro.
Việc bắt buộc thanh toán theo thời gian có thể giúp tránh rủi ro qua đêm.
Các trường hợp có thể xảy ra đột phá đường ngắn khi bị kích hoạt.
Một số đột phá có thể không hoàn toàn có lợi trước khi kết thúc giai đoạn.
Nếu bạn đặt thời gian không đúng, bạn có thể bỏ lỡ cơ hội giao dịch.
Không thể đảm bảo rằng mỗi lần đột phá sẽ mang lại lợi nhuận như dự kiến.
Có thể có vấn đề về sự phù hợp trong việc tối ưu hóa các tham số.
Kiểm tra các tham số đột phá khác nhau để tìm ra sự kết hợp tối ưu.
Đánh giá các chỉ số khác để cải thiện độ chính xác của việc nhập học.
Tối ưu hóa thời gian giao dịch, tìm kiếm sự cân bằng giữa lợi nhuận và rủi ro.
Nghiên cứu về cách sử dụng các chiến lược ngăn chặn để khóa lợi nhuận.
Kiểm tra sự khác biệt của các thiết lập tham số của các giống khác nhau.
Các tham số tối ưu hóa động theo thuật toán học máy.
Chiến lược này cố gắng giao dịch phân tán ngắn hạn bằng cách phá vỡ phiên giới hạn. Tối ưu hóa đối với phá vỡ giả mạo và kiểm soát rủi ro có thể được cải thiện thành một chiến lược giao dịch ngắn hạn thực tế và hiệu quả.
/*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)
// -------------------------------------------------------------------------------------------------