avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Công cụ tăng cường trực quan! Sử dụng biểu đồ gạch và nến trung bình để hiểu xu hướng thị trường trên FMZ

Được tạo ra trong: 2025-06-06 09:27:29, cập nhật trên: 2025-06-06 17:34:58
comments   2
hits   568

[TOC]

Công cụ tăng cường trực quan! Sử dụng biểu đồ gạch và nến trung bình để hiểu xu hướng thị trường trên FMZ

Trong giao dịch định lượng, biểu đồ nến truyền thống là một trong những hình thức biểu diễn dữ liệu được sử dụng phổ biến nhất, nhưng nó cũng có một số hạn chế nhất định, chẳng hạn như không nhạy cảm với biến động hoặc nhiễu quá mức. Để quan sát xu hướng giá rõ ràng hơn, các nhà giao dịch thường sử dụng một số biểu đồ cải tiến, chẳng hạn như:

  • Renko: Vẽ dựa trên sự thay đổi giá thay vì thời gian, giúp lọc bỏ nhiễu thị trường một cách hiệu quả.
  • Heikin Ashi: Làm mịn dữ liệu giá để hiển thị hướng xu hướng trực quan hơn.

Bài viết này sẽ giới thiệu cách tính biểu đồ gạch và dữ liệu K-line trung bình dựa trên K-line thông thường trên nền tảng giao dịch định lượng FMZ và hiển thị hiệu ứng vẽ để giúp các nhà phát triển chiến lược phân tích xu hướng thị trường một cách trực quan hơn.

Biểu đồ gạch (Renko)

Biểu đồ Renko sử dụng “viên gạch” làm đơn vị và viên gạch mới chỉ được vẽ khi giá dao động vượt quá phạm vi cố định (chẳng hạn như 100 đô la).

  • Ưu điểm: Dựa trên những thay đổi về giá, công cụ này sẽ lọc ra những biến động nhỏ trên thị trường và làm nổi bật những xu hướng chính.
  • Các tình huống áp dụng: Thích hợp để xác định xu hướng trung và dài hạn và giảm thiểu nhiễu trong giao dịch.

Giải thích tín hiệu giao dịch

  • Xác nhận xu hướng: Các viên gạch tăng liên tục cho thấy xu hướng mạnh và bạn có thể giữ vị thế; sự xuất hiện của các viên gạch đảo ngược là tín hiệu đảo ngược xu hướng.
  • Giao dịch đột phá: Khi một viên gạch mới xuất hiện, đặc biệt là khi nó phá vỡ mức cao/thấp trước đó, hãy cân nhắc tham gia thị trường.
  • Lọc đột phá sai: Vì biểu đồ gạch bỏ qua những biến động nhỏ nên nó giúp lọc ra những đột phá sai nhỏ trong suốt giai đoạn dao động.

Logic tính toán cốt lõi:

  • Đặt kích thước gạch brickSize
  • Dựa trên giá ban đầu, hãy liên tục so sánh xem giá mới nhất có chênh lệch so với giá gạch trước đó nhiều hơn brickSize không
  • Nếu giá tăng vượt quá giới hạn, một viên gạch tăng sẽ được rút ra; tương tự với giá giảm.

Tính toán sơ đồ gạch (Renko) và vẽ mã:

/*backtest
start: 2025-05-01 00:00:00
end: 2025-06-06 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":1000,"stocks":0.5}]
*/

let globalbricks = []
let lastBarTime = 0

function getBricks(r, brickSize, sourceAttribute, lastPrice) {
    for (let i = 1; i < r.length; i++) {
        let bar = r[i]
        let price = bar[sourceAttribute]
        let time = bar.Time

        if (time < lastBarTime) {
            continue 
        }

        // 遍历原始K线数据
        while (Math.abs(price - lastPrice) >= brickSize) {
            if (globalbricks.length > 0 && time == globalbricks[globalbricks.length - 1].Time) {
                time = globalbricks[globalbricks.length - 1].Time + 1000
            }
            // 构造砖块
            let brick = {
                Time: time,
                Open: lastPrice,
                Close: 0,
                High: 0,
                Low: 0
            }

            if (price > lastPrice) {
                // 上涨砖块
                lastPrice += brickSize
                brick.Close = lastPrice
                brick.High = lastPrice
                brick.Low = brick.Open
            } else {
                // 下跌砖块
                lastPrice -= brickSize
                brick.Close = lastPrice
                brick.High = brick.Open
                brick.Low = lastPrice
            }

            // 放入数组
            globalbricks.push(brick)

            // time 累加1秒,防止一根BAR分成多块brick时断开
            time += 1000
        }

        lastBarTime = bar.Time
    }

    return globalbricks
}

function getRenko(r, brickSize, sourceAttribute) {
    // 原始K线数据如果不符合计算要求,直接返回
    if (!r || r.length <= 0) {
        return null
    }

    if (globalbricks.length == 0) {
        return getBricks(r, brickSize, sourceAttribute, r[0][sourceAttribute])
    } else {
        return getBricks(r, brickSize, sourceAttribute, globalbricks[globalbricks.length - 1].Close)
    }
}

function main() {
    let c = KLineChart({
        overlay: true
    })

    while (true) {
        let r = _C(exchange.GetRecords)
        let bricks = getRenko(r, 100, "Close")
        bricks.forEach(function (brick, index) {
            c.begin(brick)
            c.close()
        })

        Sleep(1000)
    }
}

Kiểm tra ngược

Công cụ tăng cường trực quan! Sử dụng biểu đồ gạch và nến trung bình để hiểu xu hướng thị trường trên FMZ

Heikin Ashi

Heikin Ashi là một quá trình làm mịn của K-line truyền thống

  • Ưu điểm: Cung cấp hướng xu hướng rõ ràng hơn và giảm tín hiệu sai bằng cách làm mịn dữ liệu giá.
  • Các tình huống áp dụng: Áp dụng cho các chiến lược theo xu hướng, giúp các nhà giao dịch giữ vị thế lâu hơn theo xu hướng.

Phương pháp tính toán như sau:

HA_Close = (Open + High + Low + Close) / 4
HA_Open = (前一根 HA_Open + 前一根 HA_Close) / 2
HA_High = max(High, HA_Open, HA_Close)
HA_Low = min(Low, HA_Open, HA_Close)
Heikin Ashi 本质上是一种移动平均滤波的 K 线,具有趋势持续性更强的特点。

Đánh giá xu hướng và nhận dạng tín hiệu

  • Nến tăng giá có thân lớn và hầu như không có bóng trên hoặc dưới cho thấy xu hướng tăng mạnh
  • Một đường âm có thân lớn và hầu như không có bóng trên hoặc dưới cho thấy xu hướng giảm mạnh
  • Bóng trên và dưới đang dài ra và thân thực đang co lại. Xu hướng đang yếu đi, vì vậy hãy cẩn thận với sự đảo ngược.
  • Thân rất ngắn, bóng rất dài. Thị trường biến động, vì vậy đừng giao dịch ngay bây giờ.

Mã triển khai và bản vẽ:

/*backtest
start: 2025-05-01 00:00:00
end: 2025-06-06 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":1000,"stocks":0.5}]
*/

function toHeikinAshi(records) {
    if (!records || records.length == 0) {
        return null 
    }

    let haRecords = []

    for (let i = 0; i < records.length; i++) {
        let r = records[i]
        let ha = {}

        ha.Time = r.Time
        ha.Close = (r.Open + r.High + r.Low + r.Close) / 4

        if (i === 0) {
            // 第一根 Heikin Ashi 的开盘价用普通K线的开盘价和收盘价的均值
            ha.Open = (r.Open + r.Close) / 2
        } else {
            // 后续每根的开盘价 = 上一根Heikin Ashi开盘价和收盘价均值
            ha.Open = (haRecords[i - 1].Open + haRecords[i - 1].Close) / 2
        }

        ha.High = Math.max(r.High, ha.Open, ha.Close)
        ha.Low = Math.min(r.Low, ha.Open, ha.Close)

        haRecords.push(ha)
    }

    return haRecords
}

function main() {
    let c = KLineChart({
        overlay: true
    })

    while (true) {
        let r = _C(exchange.GetRecords)
        let heikinAshiRecords = toHeikinAshi(r)
        heikinAshiRecords.forEach(function (bar, index) {
            c.begin(bar)
            c.close()
        })
        Sleep(1000)
    }
}

Kiểm tra ngược

Công cụ tăng cường trực quan! Sử dụng biểu đồ gạch và nến trung bình để hiểu xu hướng thị trường trên FMZ

END

Biểu đồ Renko và Heikin Ashi là những công cụ mạnh mẽ dành cho các nhà giao dịch theo xu hướng:

  • Biểu đồ Renko tập trung vào sự dịch chuyển giá và phù hợp với các đột phá và xác nhận xu hướng.
  • Heikin Ashi tập trung vào việc làm phẳng giá và phù hợp để kiểm soát vị thế theo xu hướng.
  • Việc sử dụng bổ sung cả hai có thể cải thiện tính ổn định và khả năng chống sốc của tín hiệu chiến lược xu hướng.

Bạn nên kết hợp kiểm tra ngược và xác minh thời gian thực, chọn giải pháp biểu đồ phù hợp với sản phẩm và chu kỳ giao dịch của riêng bạn và tạo ra hệ thống giao dịch định lượng được cá nhân hóa.