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

Ý tưởng giao dịch thay thế - Chiến lược giao dịch diện tích đường K

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Tạo: 2023-11-03 17:12:42, Cập nhật: 2023-11-03 17:35:03

img

Nhìn vào một ý tưởng giao dịch không đáng tin cậy về chiến lược giao dịch diện tích đường dây K, trong bài viết này, chúng tôi cùng nhau khám phá ý tưởng này và cố gắng thực hiện kịch bản này.

Ý tưởng chính của chiến lược diện tích đường K

K-Line Area Strategy là một chiến lược giao dịch dựa trên mối quan hệ giữa K-Line và đường trung bình. Ý tưởng chính của nó là dự đoán xu hướng có thể xảy ra của giá cổ phiếu bằng cách phân tích mức độ và sự thay đổi của xu hướng giá, và chuyển đổi tâm lý mua, do đó quyết định thời điểm mở và ra khỏi thị trường. Chiến lược này dựa trên diện tích giữa K-Line và đường trung bình, và số lượng các chỉ số KDJ, để tạo ra các tín hiệu giao dịch đa đầu và không đầu.

Nguyên tắc của chiến lược diện tích đường K

Vùng K là không gian giữa đường K giá và đường đồng xu, được tính bằng cách trừ giá đóng cửa của mỗi Bar ra khỏi giá trung bình, sau đó tổng hợp. Khi giá tăng xu hướng lớn, diện tích đường K sẽ lớn hơn trong thời gian dài, nhưng khi thị trường rung động hoặc đảo ngược sau khi rung động, diện tích đường K sẽ nhỏ hơn. Theo nguyên tắc phản hồi của động vật, xu hướng tăng càng lớn, thời gian càng dài, diện tích đường K tương ứng càng lớn, khả năng đảo ngược càng lớn, giống như một cái bồn tăng, kéo dài hơn, độ nổi bật càng cao. Vì vậy, đặt một ngưỡng trên diện tích đường K, khi đạt đến ngưỡng này, giá có thể đi qua xu hướng và có khả năng đảo ngược hơn.

Để xác nhận thêm xu hướng sắp đảo ngược, giới thiệu chỉ số KDJ, được sử dụng để đánh giá sự chuyển đổi tâm lý mua bán. Mức độ của chiến lược này và thiết lập các giá trị của chỉ số KDJ có thể được điều chỉnh theo tình huống và nhu cầu cụ thể để tăng độ chính xác của chiến lược.

Lợi thế của chiến lược diện tích đường K

Lợi thế của chiến lược K-Line Area là nó kết hợp với mức độ và sự thay đổi của xu hướng giá, và chuyển đổi tâm lý mua bán, cung cấp một chiến lược giao dịch định lượng tương đối hoàn chỉnh.

  • Cung cấp một cách đơn giản và trực quan để xác định khả năng đảo ngược xu hướng, giúp các nhà giao dịch nắm bắt tốt hơn xu hướng thị trường.
  • Sử dụng sự kết hợp của diện tích đường K và chỉ số KDJ để tăng độ tin cậy và độ chính xác của chiến lược.
  • Có tính linh hoạt cao và có thể điều chỉnh các tham số theo tình hình thị trường để đáp ứng các nhu cầu giao dịch khác nhau.

Rủi ro của chiến lược K-Line

Mặc dù chiến lược K-Line có một số lợi thế, nhưng nó cũng có một số rủi ro, bao gồm:

  • Thiết lập giá tháp có thể cần một số kinh nghiệm và điều chỉnh, nếu được thiết lập không đúng, có thể dẫn đến việc đánh giá sai xu hướng thị trường.
  • Độ chính xác của chỉ số KDJ bị ảnh hưởng bởi biến động thị trường và tiếng ồn, có thể gây ra tín hiệu sai.
  • Hiệu suất của chiến lược có thể thay đổi theo các điều kiện thị trường khác nhau và cần phải được tối ưu hóa và điều chỉnh liên tục.

Định hướng tối ưu hóa chiến lược diện tích đường K

Để tối ưu hóa chiến lược diện tích đường K, bạn có thể xem xét các hướng sau:

  • Tối ưu hóa các thông số: liên tục điều chỉnh và tối ưu hóa các thông số của ngưỡng và chỉ số KDJ để phù hợp với các tình huống thị trường và nhu cầu giao dịch khác nhau.
  • Quản lý rủi ro: Thực hiện các chiến lược quản lý rủi ro hiệu quả, bao gồm các quy tắc ngăn chặn và ngăn chặn lỗ, để giảm rủi ro mất mát.
  • Phối hợp nhiều chiến lược: Kết hợp chiến lược K-Line với các chiến lược khác để cải thiện hiệu suất của chiến lược giao dịch tổng hợp.
  • Theo dõi và điều chỉnh trong thời gian thực: Các chiến lược theo dõi thường xuyên được điều chỉnh và cải thiện dựa trên tình hình thực tế.

Sử dụng ngôn ngữ JavaScript để thực hiện chiến lược này

  • Tính diện tích đường K

  • Các tín hiệu đầu tư đa đầu:

    (1) Lợi K đường phẳng với xu hướng giảm đạt ngưỡng, trước khi thành lập

    (2) Chỉ số KDJ lớn hơn 80

  • Đánh dấu đầu tư trống:

    (1) Các đường phẳng K có xu hướng tăng đã đạt được ngưỡng, trước khi được hình thành

    (2) Chỉ số KDJ nhỏ hơn 20

  • Nhiều đầu / không đầu: ATR theo dõi dừng lỗ và dừng đòn

Thực hiện mã

// 参数
var maPeriod = 30
var threshold = 50000
var amount = 0.1

// 全局变量
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL"  // NULL BUY SELL

function calculateKLineArea(r, ma) {
    var lastCrossUpIndex = null
    var lastCrossDownIndex = null
    for (var i = r.length - 1 ; i >= 0 ; i--) {
        if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }

        if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }
    }

    var area = 0
    if (lastCrossDownIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
            area -= Math.abs(r[i].Close - ma[i])
        }
    } else if (lastCrossUpIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
            area += Math.abs(r[i].Close - ma[i])
        }
    }

    return [area, lastCrossUpIndex, lastCrossDownIndex]
}

function onTick() {
    var r = _C(exchange.GetRecords)
    if (r.length < maPeriod) {
        LogStatus(_D(), "K线数量不足")
        return 
    }
    var ma = TA.MA(r, maPeriod)
    var atr = TA.ATR(r)
    var kdj = TA.KDJ(r)
    var lineK = kdj[0]
    var lineD = kdj[1]
    var lineJ = kdj[2]
    var areaInfo = calculateKLineArea(r, ma)
    var area = _N(areaInfo[0], 0)
    var lastCrossUpIndex = areaInfo[1]
    var lastCrossDownIndex = areaInfo[2]
    
    r.forEach(function(bar, index) {
        c.begin(bar)
        c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
        let maLine = c.plot(ma[index], "ma", {overlay: true})
        let close = c.plot(bar.Close, 'close', {overlay: true})
        c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
        if (lastCrossUpIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        } else if (lastCrossDownIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        }
        c.plot(lineK[index], "K")
        c.plot(lineD[index], "D")
        c.plot(lineJ[index], "J")

        c.close()
    })
    
    if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
        // long
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "BUY"
        }
    } else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
        // short
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "SELL"
        }
    }
    
    let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
    if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
        // cover long
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    } else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
        // cover short 
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    }

    LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}


function main() {    
    if (exchange.GetName().includes("_Futures")) {
        throw "not support Futures"
    }
    while (true) {
        onTick()
        Sleep(1000)
    }
}

Những người tham gia vào cuộc tấn công này đã bị giết chết.

Đầu tiên, một số biến và tham số toàn cầu được định nghĩa, bao gồm:

Các tham số chiến lược

  • maPeriod: chu kỳ của trung bình di chuyển.
  • threshold: dùng để xác định ngưỡng mua hoặc bán tại thời điểm nào.
  • amount: Số lượng giao dịch mỗi lần.

Các biến số toàn cầu

  • c: Đối tượng biểu đồ đường K, dùng để vẽ biểu đồ.
  • OpenPrice: ghi lại giá mở cửa.
  • tradeState: ghi lại trạng thái giao dịch, có thể là "NULL" (không chứa) hoặc "BUY" (mua) hoặc "SELL".

Chức năng tính toán

  • Calculate KLineArea: Chức năng này được sử dụng để tính diện tích giữa giá và đường trung bình di chuyển trong một khoảng thời gian trên biểu đồ đường K và trả về các giá trị diện tích, chỉ số đường K cuối cùng được chéo và chỉ số đường K cuối cùng được chéo. Những giá trị này được sử dụng để quyết định thời điểm mua và bán trong các quyết định tiếp theo.

Chức năng xoay chính

  • Chức năng onTick: Đây là chức năng thực hiện chính sách chính, sau đây là các hoạt động trong chức năng:

    a. Nhận dữ liệu K-phần mới nhất và đảm bảo số lượng K-phần không nhỏ hơn maPeriod, nếu không ghi trạng thái và trả về.

    b. Tính toán các chỉ số động trung bình ma và ATR atr, và chỉ số KDJ.

    c. Nhận thông tin diện tích từ areaInfo, chỉ mục K cuối cùng được đi ngang qua và chỉ mục K cuối cùng được đi ngang qua.

    d. Sử dụng đối tượng biểu đồ đường K c để vẽ đường K và đường chỉ số, đồng thời điền màu khác nhau dựa trên mối quan hệ giữa giá và đường trung bình di chuyển.

    e. Thời điểm mua và bán được xác định theo điều kiện:

    Nếu tradeState là NULL, và diện tích nhỏ hơn -threshold và giá trị K của KDJ lớn hơn 70, hãy thực hiện buy. Nếu tradeState là NULL, và diện tích lớn hơn threshold và KDJ của KDJ nhỏ hơn 30, hãy thực hiện sell. f. Thiết lập các điều kiện dừng lỗ và dừng đà, nếu điều kiện đạt được, hòa vốn:

    Nếu là mua, khi giá thấp hơn giá đóng cửa của ngày giao dịch trước trừ ATR của ngày trước, ngang hàng. Nếu là bán, khi giá cao hơn giá đóng cửa của ngày giao dịch trước cộng với ATR của ngày trước, ngang hàng. hàm main: Đây là đầu vào thực thi chính, kiểm tra tên giao dịch có chứa hàm _Futures hay không, nếu có thì ném ngoại lệ, nếu không thì đi vào một vòng vô hạn, thực hiện hàm onTick trong mỗi vòng và nghỉ ngơi 1 giây.

Nhìn chung, chiến lược này chủ yếu dựa vào các biểu đồ K-line và các chỉ số kỹ thuật để đưa ra quyết định mua bán, đồng thời sử dụng các chiến lược dừng lỗ và dừng đà để quản lý rủi ro. Xin lưu ý rằng đây chỉ là một chiến lược ví dụ và khi sử dụng thực tế, cần phải điều chỉnh và tối ưu hóa theo tình hình thị trường và nhu cầu cụ thể.

在FMZ.COM上使用JavaScript语言没有用多少行代码,很简单的就实现了这个模型。并且使用KLineChart函数很容易实现了K线面积的图形表示。策略设计用于加密货币现货市场,使用了「数字货币现货交易类库」模板,使用模板封装的函数下单,也是非常简单易用、易懂。

Chiến lược kiểm tra lại

img

img

Nếu bạn chọn một khoảng thời gian xem xét lại, mặc dù không mất tiền nhưng cũng không tích lũy lợi nhuận liên tục, vấn đề rút lại vẫn còn khá lớn.

img

Thông qua chiến lược này, chúng tôi đã học được một ý tưởng giao dịch tương tự, nhưng cũng học được cách vẽ biểu đồ; biểu thị diện tích bao quanh đường K và đường ngang; vẽ chỉ số KDJ, v.v.

Tóm lại

Chiến lược K-Line Area là một chiến lược giao dịch dựa trên chiều rộng xu hướng giá và chỉ số KDJ, nó giúp các nhà giao dịch dự đoán xu hướng thị trường bằng cách phân tích diện tích và chuyển đổi tâm trạng mua bán giữa đường K và đường trung bình. Mặc dù có một số rủi ro, nhưng thông qua tối ưu hóa và điều chỉnh liên tục, chiến lược này có thể cung cấp một công cụ giao dịch mạnh mẽ để giúp các nhà giao dịch đối phó tốt hơn với biến động thị trường. Quan trọng hơn, các nhà giao dịch nên điều chỉnh các tham số và quy tắc của chiến lược một cách linh hoạt để đạt được hiệu suất giao dịch tốt hơn, tùy thuộc vào hoàn cảnh và điều kiện thị trường cụ thể.


Thêm nữa