
Chiến lược kết hợp lỗ hổng giá trị công bằng với lỗ hổng giá trị công bằng là một chiến lược giao dịch định lượng kết hợp lỗ hổng giá trị công bằng trong khái niệm lỗ hổng giá trị công bằng (ORB) và lỗ hổng giá trị công bằng (FVG) trong khái niệm tiền thông minh (SMC). Chiến lược này đầu tiên xác định một vùng giá vào đầu ngày giao dịch (thường là 5 phút sau khi mở) và sau đó tìm kiếm các trường hợp giao thoa với lỗ hổng giá trị công bằng khi giá phá vỡ ranh giới của vùng đó như một tín hiệu giao dịch.
Các nguyên tắc cốt lõi của chiến lược này dựa trên hai khái niệm phân tích kỹ thuật quan trọng:
Khẩu phá trong vòng mở (ORB)- Chiến lược này đầu tiên xác định giá cao nhất và giá thấp nhất trong một khoảng thời gian nhất định sau khi mở cửa ngày giao dịch ((5 phút mặc định), tạo thành một khu vực giá. Khu vực này được coi là phán đoán sơ bộ của người tham gia thị trường về xu hướng giá trong ngày, phá vỡ khu vực này có thể báo hiệu sự hình thành của xu hướng ngắn hạn.
Lỗ hổng giá trị công bằng (FVG)- Phương pháp phân tích từ khái niệm tiền thông minh (SMC) hình thành FVG lạc quan khi đỉnh hiện tại thấp hơn đỉnh trước, và FVG giảm khi đỉnh hiện tại cao hơn đỉnh trước. Những lỗ hổng này được coi là khu vực có thể được bù đắp trong tương lai, đại diện cho sự không cân bằng trong cấu trúc thị trường.
Tín hiệu giao dịch của chiến lược được tạo ra bởi các điều kiện sau:
Khi giao dịch được thực hiện, chiến lược sử dụng phương pháp quản lý vị trí dựa trên rủi ro, tính kích thước vị trí cụ thể cho mỗi giao dịch dựa trên khoảng cách dừng lỗ để đảm bảo các lỗ hổng rủi ro cho mỗi giao dịch là đồng nhất. Đặt điểm dừng lỗ ở mức thấp nhất trước khi thực hiện nhiều giao dịch hoặc mức cao nhất trước khi thực hiện giao dịch bằng không, và mục tiêu thu lợi nhuận dựa trên tỷ lệ lợi nhuận rủi ro trước khi thiết lập (bình thường là 2.0). Tất cả các giao dịch chưa thanh toán sẽ tự động thanh toán vào cuối giai đoạn giao dịch, đảm bảo không giữ vị trí qua đêm.
Kết hợp nhiều phương pháp phân tích kỹ thuật- Bằng cách tích hợp cả hai phương pháp phân tích kỹ thuật ORB và FVG, chiến lược có thể lọc các tín hiệu giả mà chỉ số đơn lẻ có thể tạo ra, nâng cao chất lượng tín hiệu giao dịch.
Khung thời gian giao dịch rõ ràng- Chiến lược xác định rõ ràng phạm vi thời gian giao dịch ((thời gian tín hiệu và thời gian giao dịch), giúp các nhà giao dịch tập trung vào thời gian thị trường hoạt động nhất và có chất lượng tín hiệu cao nhất, tránh giao dịch không hiệu quả trong thời gian hoạt động thấp.
Quản lý vị trí dựa trên rủi ro- Chiến lược sử dụng phương pháp tính toán vị trí dựa trên rủi ro, đảm bảo tỷ lệ rủi ro của mỗi giao dịch đối với tổng số tài khoản tài khoản là nhất quán (bằng mặc định là 1%), có lợi cho quản lý tài chính và kiểm soát rủi ro lâu dài.
Thiết lập tham số linh hoạt- Chiến lược cung cấp nhiều tham số có thể điều chỉnh, bao gồm thiết lập thời gian giao dịch, thời gian ORB, thời gian tín hiệu, tỷ lệ rủi ro và tỷ lệ lợi nhuận rủi ro, cho phép các nhà giao dịch tối ưu hóa phù hợp với thị trường khác nhau và sở thích rủi ro cá nhân.
Hỗ trợ hình ảnh- Chiến lược cung cấp các yếu tố hình ảnh phong phú, bao gồm đường ngang ORB, dấu hiệu tín hiệu giao dịch, độ sáng nền ở các thời điểm giao dịch khác nhau và bảng dữ liệu thống kê trực tiếp, giúp các nhà giao dịch giám sát và phân tích thực hiện chiến lược.
Hỗ trợ quản lý đa cấp- Chiến lược thiết kế hỗ trợ giữ nhiều vị trí giao dịch cùng một lúc ((thông qua kiểm soát tham số pyramiding), cho phép nắm bắt nhiều cơ hội giao dịch trong cùng một ngày giao dịch, cải thiện hiệu quả sử dụng vốn.
Tùy thuộc vào thị trường cụ thể- Chiến lược này được thiết kế chủ yếu cho thời gian giao dịch thông thường của thị trường chứng khoán Hoa Kỳ, có thể không hiệu quả trong các thị trường khác hoặc thời gian giao dịch. Các đặc điểm mở cửa và mô hình biến động của các thị trường khác nhau rất khác nhau, cần điều chỉnh tham số phù hợp.
Độ nhạy tham số- Hiệu suất chiến lược nhạy cảm với nhiều tham số quan trọng như thời gian ORB, thời gian tín hiệu và tỷ lệ lợi nhuận rủi ro. Thiết lập tham số không đúng có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội giao dịch quan trọng.
Tùy thuộc vào tình trạng thị trường- Trong môi trường thị trường có biến động cao hoặc biến động thấp, hiệu suất chiến lược có thể không nhất quán. Đặc biệt là trong thị trường có biến động thấp, khoảng ORB có thể quá hẹp, dẫn đến việc kích hoạt các tín hiệu phá vỡ giả thường xuyên.
Rủi ro dừng lỗ- Chiến lược sử dụng điểm cao / thấp của sợi dây trước như một vị trí dừng chân, trong thị trường nhanh chóng, điều này có thể dẫn đến vị trí dừng chân quá rộng, làm giảm tỷ lệ lợi nhuận rủi ro hoặc dẫn đến quy mô vị trí quá nhỏ.
Dựa vào mô hình giá lịch sử- Chiến lược giả định rằng phá vỡ khu vực FVG và ORB có ý nghĩa dự báo, nhưng hiệu quả của các mô hình này có thể bị suy yếu do hiệu quả của thị trường hoặc môi trường giao dịch thay đổi.
Rủi ro thực hiện kỹ thuật- Trong giao dịch thực tế, có thể phải đối mặt với các vấn đề như điểm trượt, chậm trễ trong thực hiện lệnh, ảnh hưởng đến tính nhất quán của kết quả giao dịch thực tế với kết quả đo lường.
Thời gian hoạt động của ORB- Có thể xem xét việc tự động điều chỉnh thời gian ORB theo biến động của thị trường, ví dụ như sử dụng thời gian ORB dài hơn trong môi trường thị trường biến động cao để tránh đột phá giả, rút ngắn thời gian ORB trong môi trường biến động thấp để nắm bắt nhiều cơ hội giao dịch hơn.
Thêm điều kiện lọc- Tiết xuất các điều kiện lọc bổ sung để cải thiện chất lượng tín hiệu, chẳng hạn như kết hợp với hướng xu hướng thị trường tổng thể ((chỉ làm nhiều trong xu hướng tăng, làm rỗng trong xu hướng giảm), hoặc thêm xác nhận khối lượng giao dịch ((chỉ giao dịch khi phá vỡ đi kèm với khối lượng giao dịch tăng))
Tối ưu hóa vị trí dừng lỗ- Xem xét sử dụng thiết lập dừng động dựa trên ATR hoặc biến động, thay vì phương pháp dừng cố định hiện tại dựa trên điểm cao và thấp của một đợt tăng trước đó, có thể cung cấp kiểm soát rủi ro hợp lý hơn.
Thêm một phần cơ chế lợi nhuận- Thực hiện chiến lược lợi nhuận phân đoạn, chẳng hạn như xóa một phần vị trí khi đạt tỷ lệ lợi nhuận rủi ro 1: 1 và đặt mục tiêu lợi nhuận theo dõi dừng lỗ hoặc xa hơn cho phần còn lại để cân bằng nhu cầu khóa lợi nhuận và theo dõi xu hướng.
Bộ lọc thời gian- Thêm bộ lọc thời gian, tránh các thời điểm giao dịch có chất lượng thấp được biết đến, chẳng hạn như thời gian biến động thấp trong giờ ăn trưa hoặc thời gian biến động cao trước và sau khi công bố dữ liệu kinh tế quan trọng.
Thêm tham số thích ứng- Tham gia các tham số thích ứng, cho phép chiến lược tự động điều chỉnh các tham số dựa trên hiệu suất thị trường gần đây, chẳng hạn như điều chỉnh tỷ lệ lợi nhuận rủi ro theo động hoặc điều chỉnh tỷ lệ rủi ro theo tỷ lệ thắng gần đây.
Chiến lược kết hợp phá vỡ khoảng mở và khoảng cách giá trị công bằng là một hệ thống giao dịch trong ngày được thiết kế cẩn thận, tìm kiếm cơ hội giao dịch có xác suất cao bằng cách kết hợp cả hai phương pháp phân tích kỹ thuật ORB và FVG. Chiến lược này hoạt động trong một khoảng thời gian giao dịch được xác định rõ ràng, sử dụng phương pháp quản lý vị trí dựa trên rủi ro và cung cấp nhiều công cụ trực quan và thống kê để hỗ trợ quyết định giao dịch.
Ưu điểm chính của chiến lược là logic giao dịch rõ ràng, thiết lập tham số linh hoạt và cơ chế quản lý rủi ro toàn diện. Tuy nhiên, chiến lược cũng phải đối mặt với các rủi ro như phụ thuộc vào thị trường, nhạy cảm tham số và phụ thuộc vào tình trạng thị trường. Để tăng cường sự ổn định của chiến lược, khuyến nghị xem xét các hướng tối ưu hóa như điều chỉnh tham số động, tăng điều kiện lọc, tối ưu hóa phương pháp dừng lỗ và thực hiện cơ chế thu lợi nhuận theo giai đoạn.
Cần lưu ý rằng chiến lược này không áp dụng cho tất cả các môi trường thị trường và tất cả các loại giao dịch, các nhà giao dịch nên thực hiện đầy đủ các bài kiểm tra và thử nghiệm trước khi thực hiện thực tế để đảm bảo rằng chiến lược phù hợp với sở thích rủi ro và mục tiêu giao dịch của mình. Bằng cách tiếp tục tối ưu hóa và thích ứng với sự thay đổi của thị trường, chiến lược này có tiềm năng trở thành một công cụ hiệu quả trong hộp công cụ của các nhà giao dịch trong ngày.
/*backtest
start: 2025-06-18 00:00:00
end: 2025-06-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// Based on https://www.youtube.com/watch?v=mzFXoK2pbNE
//@version=5
strategy("[Myth Busting] [ORB] Casper SMC - 16 Jun", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, pyramiding = 10)
// Input settings
show_orb = input.bool(true, "Show 5m Opening Range")
show_signals = input.bool(true, "Show FVG Intersection Signals")
show_stats = input.bool(true, "Show Statistics Table")
risk_per_trade = input.float(1.0, "Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1)
use_stop_loss = input.bool(true, "Use Stop Loss")
use_take_profit = input.bool(true, "Use Take Profit")
risk_reward_ratio = input.float(2.0, "Risk:Reward Ratio", minval=1.0, step=0.1)
// Session time inputs
session_start_hour = input.int(9, "Session Start Hour", minval=0, maxval=23, group="Session Settings")
session_start_minute = input.int(30, "Session Start Minute", minval=0, maxval=59, group="Session Settings")
session_end_hour = input.int(16, "Session End Hour", minval=0, maxval=23, group="Session Settings")
session_end_minute = input.int(0, "Session End Minute", minval=0, maxval=59, group="Session Settings")
session_timezone = input.string("America/New_York", "Session Timezone", group="Session Settings")
orb_duration_minutes = input.int(5, "ORB Duration (Minutes)", minval=1, maxval=60, group="Session Settings")
signal_end_offset = input.int(90, "Signal Period Duration (Minutes)", minval=30, maxval=300, group="Session Settings")
// Style settings
orb_high_color = input.color(color.new(color.green, 50), "ORB High Color")
orb_low_color = input.color(color.new(color.red, 50), "ORB Low Color")
bullish_signal_color = input.color(color.green, "Bullish Signal Color")
bearish_signal_color = input.color(color.red, "Bearish Signal Color")
// Variables to store ORB levels
var float orb_high = na
var float orb_low = na
var int orb_start_time = na
var int orb_end_time = na
var bool orb_set = false
// Position tracking
var int position_counter = 0
var int active_positions = 0
// Function to get current time in specified timezone
get_session_time() =>
current_hour = hour(time, session_timezone)
current_minute = minute(time, session_timezone)
current_hour * 60 + current_minute
// Calculate session times in minutes
session_start_minutes = session_start_hour * 60 + session_start_minute
session_end_minutes = session_end_hour * 60 + session_end_minute
orb_end_minutes = session_start_minutes + orb_duration_minutes
signal_end_minutes = session_start_minutes + signal_end_offset
// Check if we're in the ORB period
is_orb_period() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < orb_end_minutes
// Check if we're in the signal period
is_signal_period() =>
current_time = get_session_time()
current_time >= orb_end_minutes and current_time < signal_end_minutes
// Check if we're in the overall trading session
is_trading_session() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < session_end_minutes
// Reset ORB at the start of each trading session
new_session = is_trading_session() and not is_trading_session()[1]
if new_session or ta.change(dayofweek)
orb_high := na
orb_low := na
orb_start_time := na
orb_end_time := na
orb_set := false
position_counter := 0
// Capture ORB levels during the ORB period
if is_orb_period()
if na(orb_high) or na(orb_low)
orb_high := high
orb_low := low
orb_start_time := time
else
orb_high := math.max(orb_high, high)
orb_low := math.min(orb_low, low)
orb_end_time := time
// Mark ORB as set after the period ends
if not is_orb_period() and not na(orb_high) and not orb_set
orb_set := true
// Fair Value Gap detection
bullish_fvg = high[2] < low and not na(orb_high)
bearish_fvg = low[2] > high and not na(orb_low)
// Check for FVG intersection with ORB boundaries during signal period
bullish_intersection = false
bearish_intersection = false
// Count active positions
active_positions := strategy.opentrades
if is_signal_period() and orb_set
// Bullish FVG intersecting upper boundary
if bullish_fvg
if open[1] <= orb_high and close[1] >= orb_high
bullish_intersection := true
// Bearish FVG intersecting lower boundary
if bearish_fvg
if open[1] >= orb_low and close[1] <= orb_low
bearish_intersection := true
// Calculate position size based on risk per trade
calculate_position_size(entry, stop, is_long) =>
risk_amount = strategy.equity * (risk_per_trade / 100)
price_diff = is_long ? entry - stop : stop - entry
position_size = risk_amount / price_diff
position_size
// Strategy execution - Modified for multiple positions
if bullish_intersection
position_counter += 1
entry_price = close
stop_loss_price = low[1]
risk = entry_price - stop_loss_price
take_profit_price = entry_price + (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, true)
// Create unique entry ID
entry_id = "Long_" + str.tostring(position_counter)
exit_id = "LongExit_" + str.tostring(position_counter)
// Enter long position
strategy.entry(entry_id, strategy.long, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
if bearish_intersection
position_counter += 1
entry_price = close
stop_loss_price = high[1]
risk = stop_loss_price - entry_price
take_profit_price = entry_price - (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, false)
// Create unique entry ID
entry_id = "Short_" + str.tostring(position_counter)
exit_id = "ShortExit_" + str.tostring(position_counter)
// Enter short position
strategy.entry(entry_id, strategy.short, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
// Close all positions at end of trading session
if not is_trading_session() and strategy.position_size != 0
strategy.close_all("End of Trading Session")
// Plot ORB levels
plot(show_orb and orb_set ? orb_high : na, "ORB High", color=orb_high_color, linewidth=2, style=plot.style_line)
plot(show_orb and orb_set ? orb_low : na, "ORB Low", color=orb_low_color, linewidth=2, style=plot.style_line)
// Plot intersection signals
plotshape(series=show_signals and bullish_intersection, title="Bullish FVG Intersection", style=shape.triangleup, location=location.belowbar, color=bullish_signal_color, size=size.normal)
plotshape(series=show_signals and bearish_intersection, title="Bearish FVG Intersection", style=shape.triangledown, location=location.abovebar, color=bearish_signal_color, size=size.normal)
// Background highlights for different session periods
bgcolor(is_orb_period() ? color.new(color.yellow, 90) : na, title="ORB Period")
bgcolor(is_signal_period() and orb_set ? color.new(color.blue, 95) : na, title="Signal Period")
bgcolor(is_trading_session() and not is_signal_period() and not is_orb_period() ? color.new(color.gray, 98) : na, title="Trading Session")
// Plot session boundaries
plot(is_trading_session() ? high : na, "Session High", color=color.new(color.orange, 80), linewidth=1)
plot(is_trading_session() ? low : na, "Session Low", color=color.new(color.orange, 80), linewidth=1)