Chiến lược bán da đầu da đột phá phiên

Tác giả:ChaoZhang, Ngày: 2023-09-20 17:00:16
Tags:

Tổng quan

Chiến lược này kết hợp nhiều khung thời gian donchians để scalp breakouts ngắn hạn trong một phiên được xác định bởi người dùng.

Chiến lược logic

  1. Tính toán các điểm trung bình trong ngày và ngắn hạn để tạo ra các vùng đột phá trên các khung thời gian.

  2. Chỉ giao dịch trong một phiên giao dịch tùy chỉnh.

  3. Sử dụng EMA thời gian thực của giá như là giá đầu vào.

  4. Đặt dừng bên ngoài khu vực thoát hiểm, dừng lại khi thất bại

  5. Đóng các vị trí khi giá giảm trở lại gần điểm trung bình, xác nhận thất bại đột phá.

Ưu điểm

  1. Multi-timeframe kết hợp để lọc hiệu quả các vụ đột phá giả.

  2. Các phiên họp được xác định tránh rủi ro xung quanh các sự kiện tin tức lớn.

  3. Theo dõi EMA cho phép ghi nhập kịp thời phù hợp với động lực.

  4. Ngừng giúp kiểm soát rủi ro.

  5. Việc bắt buộc rời khỏi phiên sẽ tránh những rủi ro qua đêm.

Rủi ro

  1. Những vụ thoát ngắn hạn có thể gặp phải những chấn thương và dừng lại.

  2. Một số breakout có thể không có lợi nhuận đầy đủ trước khi phiên kết thúc.

  3. Định nghĩa phiên kém có thể làm bạn bỏ lỡ cơ hội.

  4. Không có gì đảm bảo rằng mỗi lần phá vỡ sẽ đạt được lợi nhuận mong đợi.

  5. Tối ưu hóa rủi ro quá phù hợp các thông số.

Tăng cường

  1. Kiểm tra các thông số thoát để tìm kết hợp tối ưu.

  2. Đánh giá các chỉ số bổ sung để cải thiện độ chính xác nhập.

  3. Tối ưu hóa phiên giao dịch cho lợi nhuận so với cân bằng rủi ro.

  4. Kết hợp nghiên cứu sử dụng các chiến lược lợi nhuận để khóa lợi nhuận.

  5. Sự khác biệt tham số thử nghiệm trên các biểu tượng khác nhau.

  6. Sử dụng máy học để tối ưu hóa tham số động.

Kết luận

Chiến lược này cố gắng lấy vỏ da ngắn hạn trên các phiên đột phá hạn chế. Với tối ưu hóa xung quanh các vụ đột phá sai và kiểm soát rủi ro, nó có thể được tinh chỉnh thành một hệ thống 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)
// -------------------------------------------------------------------------------------------------

Thêm nữa