
Đây là một chiến lược giao dịch định lượng phức tạp kết hợp nhiều chỉ số kỹ thuật và lý thuyết giao dịch. Chiến lược này chủ yếu dựa trên khối đặt hàng, phát hiện biến đổi xu hướng, chéo trung bình di chuyển và phân tích nhiều khung thời gian để tạo ra tín hiệu giao dịch. Ý tưởng cốt lõi của chiến lược là sử dụng hành vi giá và chỉ số kỹ thuật của khung thời gian nhỏ hơn để vào và ra thị trường chính xác theo hướng xu hướng của khung thời gian lớn hơn (khoảng 1 giờ).
Bảng đặt hàng: Chiến lược sử dụng hàm tùy chỉnh để tính khối đặt hàng, một mức giá quan trọng, thường đại diện cho khu vực tập trung các đơn đặt hàng của các tổ chức lớn.
Phát hiện thay đổi xu hướng: Sử dụng giao chéo của trung bình di chuyển đơn giản (SMA) để xác định sự thay đổi xu hướng tiềm ẩn.
Phân tích nhiều khung thời gian: tính toán trung bình di chuyển chỉ số 50 chu kỳ và 200 chu kỳ trên khung thời gian 1 giờ (EMA) để xác định xu hướng thị trường lớn hơn.
Điều kiện tham gia:
Chiến lược thoát: Sử dụng mức dừng và dừng lỗ cố định để quản lý rủi ro và khóa lợi nhuận.
Phân tích đa chiều: kết hợp nhiều khung thời gian và chỉ số kỹ thuật, cung cấp một cái nhìn toàn diện hơn về thị trường.
Theo dõi xu hướng: Tăng tỷ lệ lợi nhuận bằng cách giao dịch theo xu hướng lớn.
Nhập học chính xác: Sử dụng khối đặt hàng và thay đổi xu hướng ngắn hạn để tối ưu hóa thời gian nhập học.
Quản lý rủi ro: Sử dụng phần trăm dừng và dừng dự kiến để kiểm soát rủi ro của mỗi giao dịch.
Khả năng thích ứng: Các tham số chiến lược có thể được điều chỉnh để thích ứng với các môi trường thị trường khác nhau.
Quá giao dịch: Có thể tạo ra các tín hiệu giao dịch thường xuyên trong thị trường biến động mạnh, làm tăng chi phí giao dịch.
Rủi ro trượt: Trong thị trường ít lưu động, giá thực hiện thực tế có thể có sai lệch lớn so với giá lý tưởng.
Rủi ro đảo ngược xu hướng: Chiến lược có thể chịu tổn thất liên tục gần điểm đảo ngược xu hướng.
Tính nhạy cảm tham số: Hiệu suất của chiến lược có thể rất nhạy cảm với cài đặt tham số và cần được tối ưu hóa liên tục.
Tùy thuộc vào môi trường thị trường: Chiến lược có thể không hiệu quả trong thị trường ngang hoặc thị trường biến động nhanh.
Điều chỉnh tham số động: Xem xét điều chỉnh tự động tỷ lệ dừng lỗ theo biến động của thị trường.
Thêm bộ lọc: giới thiệu các chỉ số kỹ thuật hoặc cảm xúc thị trường bổ sung để giảm tín hiệu giả.
Bộ lọc thời gian: Thêm giới hạn cửa sổ thời gian giao dịch, tránh thời gian lưu động thấp.
Quản lý vị trí: Thực hiện các chiến lược quản lý vị trí phức tạp hơn, chẳng hạn như điều chỉnh vị trí dựa trên biến động.
Phản hồi và tối ưu hóa: thực hiện phản hồi dữ liệu lịch sử rộng hơn để tìm ra sự kết hợp tham số tối ưu.
Tăng nhận diện môi trường thị trường: Phát triển các thuật toán để nhận diện các trạng thái thị trường khác nhau và điều chỉnh chiến lược cho phù hợp.
Đây là một chiến lược giao dịch định lượng toàn diện, phức tạp về logic, kết hợp phân tích nhiều khung thời gian, lý thuyết khối lệnh và kỹ thuật theo dõi xu hướng. Chiến lược này nhằm mục đích tăng tỷ lệ thành công của giao dịch bằng cách tìm kiếm các điểm vào chính xác theo hướng xu hướng lớn. Tuy nhiên, do tính phức tạp của nó, chiến lược cũng phải đối mặt với sự phù hợp quá mức và nhạy cảm với tham số. Thách thức tối ưu hóa trong tương lai nên tập trung vào việc nâng cao tính thích ứng và sự ổn định của chiến lược, bao gồm điều chỉnh tham số động, thêm bộ lọc và phương pháp quản lý vị trí phức tạp hơn.
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("S&P 500", overlay=true)
// Parámetros
length = input(14, "Longitud")
src = input(close, "Fuente")
profit_percent = input.float(0.08955, "Porcentaje de ganancia", step=0.00001, minval=0)
stop_loss_percent = input.float(0.04477, "Porcentaje de stop loss", step=0.00001, minval=0)
// Función para calcular el Order Block
order_block(src, len) =>
highest = ta.highest(high, len)
lowest = ta.lowest(low, len)
mid = (highest + lowest) / 2
ob = src > mid ? highest : lowest
ob
// Cálculo del Order Block
ob = order_block(src, length)
// Función para detectar cambios de tendencia
trend_change(src, len) =>
up = ta.crossover(src, ta.sma(src, len))
down = ta.crossunder(src, ta.sma(src, len))
[up, down]
// Detectar cambios de tendencia
[trend_up, trend_down] = trend_change(src, length)
// Calcular EMA 50 y EMA 200 en timeframe de 1 hora
ema50_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 50))
ema200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
// Condiciones de EMA
ema_buy_condition = ema50_1h > ema200_1h
ema_sell_condition = ema50_1h < ema200_1h
// Señales de compra y venta
buy_signal = trend_up and close > ob and ema_buy_condition
sell_signal = trend_down and close < ob and ema_sell_condition
// Ejecutar la estrategia
if (buy_signal)
strategy.entry("Compra", strategy.long)
if (sell_signal)
strategy.entry("Venta", strategy.short)
// Calcular precios de toma de ganancias y stop loss
if (strategy.position_size != 0)
entry_price = strategy.position_avg_price
is_long = strategy.position_size > 0
take_profit = entry_price * (1 + (is_long ? 1 : -1) * profit_percent / 100)
stop_loss = entry_price * (1 + (is_long ? -1 : 1) * stop_loss_percent / 100)
strategy.exit(is_long ? "Long TP/SL" : "Short TP/SL", limit=take_profit, stop=stop_loss)
// Visualización
plot(ob, "Order Block", color.purple, 2)
plot(ta.sma(src, length), "SMA", color.blue)
plot(ema50_1h, "EMA 50 1h", color.yellow)
plot(ema200_1h, "EMA 200 1h", color.white)
bgcolor(buy_signal ? color.new(color.green, 90) : sell_signal ? color.new(color.red, 90) : na)