Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch thích nghi khối lệnh phân đoạn nhiều giai đoạn

Tác giả:ChaoZhang, Ngày: 2024-12-27 15:49:16
Tags:OBSDMAATR

img

Tổng quan

Chiến lược này là một hệ thống giao dịch thích nghi dựa trên lý thuyết fractal và phân tích khối lệnh. Nó nắm bắt các cơ hội giao dịch có khả năng cao bằng cách xác định các mức hỗ trợ và kháng cự chính trong cấu trúc thị trường, kết hợp các tín hiệu đột phá fractal với xác nhận khối lệnh. Chiến lược tích hợp nhiều chỉ số kỹ thuật, bao gồm các chỉ số fractal, các khối lệnh năng động và hệ thống xác nhận đột phá giá, đạt được vị trí chính xác của các điểm chuyển đổi thị trường và thời gian chính xác của các giao dịch.

Nguyên tắc chiến lược

Lý thuyết cốt lõi của chiến lược được xây dựng trên ba trụ cột chính: đầu tiên, liên tục theo dõi mức cao và thấp của thị trường thông qua mô-đun tính toán fractal để xác định các khu vực đảo ngược xu hướng tiềm năng; thứ hai, thiết lập các vùng cung và cầu ở các mức giá chính thông qua phân tích khối lệnh; và cuối cùng, xác minh tính hợp lệ của các đợt đột phá giá thông qua hệ thống xác nhận đột phá. Khi giá vượt qua một fractal và xác nhận tính hợp lệ, hệ thống tạo ra một khối lệnh vùng cầu trong khu vực nến đỏ gần đây và mở một vị trí dài; khi giá vượt qua một fractal và xác nhận tính hợp lệ, hệ thống tạo ra một lệnh vùng cung trong khu vực nến xanh gần đây và mở một vị trí ngắn. Chiến lược cũng bao gồm cập nhật màu khối lệnh động để hiển thị trực quan mối quan hệ tương đối giữa giá và vị trí khối lệnh.

Ưu điểm chiến lược

  1. Khả năng thích nghi mạnh mẽ: Chiến lược có thể điều chỉnh vị trí và kích thước khối lệnh theo điều kiện thị trường.
  2. Các cơ chế xác nhận đa dạng: Kết hợp các đột phá fractal, xác nhận khối lệnh và phân tích hành động giá để giảm rủi ro tín hiệu sai.
  3. Quản lý rủi ro toàn diện: Giúp các nhà giao dịch theo dõi tình trạng chiến lược trong thời gian thực thông qua phản hồi trực quan rõ ràng và danh sách kiểm tra tình trạng.
  4. Hiển thị xuất sắc: Cung cấp giao diện đồ họa trực quan bao gồm các dấu fractal, hiển thị khối lệnh và danh sách kiểm tra trạng thái.
  5. Các thông số linh hoạt: Cho phép người dùng điều chỉnh các thông số chính như thời gian fractal và loại breakout theo phong cách giao dịch cá nhân.

Rủi ro chiến lược

  1. Rủi ro biến động thị trường: Có thể tạo ra các tín hiệu phá vỡ sai trong các thị trường biến động cao, đòi hỏi các cơ chế lọc bổ sung.
  2. Rủi ro trượt: Giá thực thi lệnh có thể lệch khỏi các điểm nhập khẩu lý tưởng trong các thị trường không đủ thanh khoản.
  3. Tùy thuộc vào xu hướng: Hiệu suất chiến lược có thể không lý tưởng trong các thị trường dao động như trong các thị trường xu hướng.
  4. Độ nhạy của tham số: Các thiết lập thời gian fractal khác nhau có thể dẫn đến kết quả giao dịch khác nhau đáng kể.
  5. Tiêu thụ tài nguyên tính toán: Các tính năng hình dung phức tạp và tính toán thời gian thực có thể làm tăng tải hệ thống.

Hướng dẫn tối ưu hóa

  1. giới thiệu bộ lọc biến động: Tối ưu hóa tín hiệu giao dịch thông qua ATR hoặc các chỉ số biến động khác.
  2. Thêm cơ chế xác nhận xu hướng: Cải thiện độ tin cậy tín hiệu bằng cách kết hợp các đường trung bình động hoặc các chỉ số xu hướng khác.
  3. Cơ chế dừng lỗ hoàn hảo: Thiết kế chiến lược dừng lỗ năng động dựa trên cấu trúc khối lệnh.
  4. Tối ưu hóa kích thước khối lệnh: Điều chỉnh động kích thước khối lệnh dựa trên biến động thị trường.
  5. Thêm phân tích khối lượng: Kiểm tra tính hợp lệ của sự đột phá bằng cách kết hợp dữ liệu khối lượng.

Tóm lại

Đây là một chiến lược giao dịch tổng hợp tích hợp nhiều chiều của phân tích kỹ thuật, xây dựng một hệ thống giao dịch hoàn chỉnh với lý thuyết fractal và phân tích khối lệnh ở cốt lõi của nó.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)

Có liên quan

Thêm nữa