
Xem xét một ý tưởng giao dịch không mấy đáng tin cậy - chiến lược giao dịch theo vùng K, trong bài viết này chúng ta sẽ thảo luận về ý tưởng này và cố gắng triển khai chiến lược này.
Chiến lược vùng K-line là chiến lược giao dịch dựa trên mối quan hệ diện tích giữa giá K-line và đường trung bình động. Ý 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 biên độ và sự thay đổi của xu hướng giá, cũng như sự chuyển đổi của tâm lý mua và bán, để xác định thời điểm mở và thoát khỏi vị thế. Chiến lược này dựa vào diện tích giữa nến và đường trung bình động, cũng như giá trị của chỉ báo KDJ, để tạo ra các tín hiệu giao dịch dài hạn và ngắn hạn.
Diện tích nến là khoảng cách giữa nến giá và đường trung bình động, được tính bằng cách trừ giá trị trung bình động khỏi giá đóng cửa của mỗi thanh rồi cộng lại. Khi giá tăng trong thời gian dài và ở biên độ lớn, diện tích của đường K sẽ trở nên lớn hơn, trong khi ở thị trường biến động hoặc đảo chiều sau biến động, diện tích của đường K sẽ nhỏ hơn . Theo nguyên lý “mọi thứ đều đi về cực đối lập”, xu hướng tăng càng lớn và thời gian càng dài thì diện tích đường K tương ứng càng lớn và khả năng đảo ngược càng lớn, giống như lò xo, càng dài. bị kéo căng, lực bật lại càng lớn. Do đó, ngưỡng cho vùng K-line được thiết lập. Khi ngưỡng này đạt đến, xu hướng giá có thể hoàn thành và khả năng đảo ngược sẽ lớn hơn.
Để xác nhận thêm rằng xu hướng sắp đảo ngược, chỉ báo KDJ được đưa vào để đánh giá sự chuyển đổi của tâm lý mua và bán. Ngưỡng và giá trị chỉ báo KDJ của chiến lược này có thể được điều chỉnh theo các tình huống cụ thể và nhu cầu nhằm nâng cao độ chính xác của chiến lược.
Ưu điểm của chiến lược vùng K là kết hợp biên độ và sự thay đổi của xu hướng giá, cũng như sự chuyển đổi tâm lý mua và bán, mang lại một chiến lược giao dịch định lượng tương đối hoàn chỉnh. Ưu điểm của nó bao gồm:
Mặc dù chiến lược vùng nến có một số ưu điểm nhất định nhưng cũng có một số rủi ro, bao gồm:
Để tối ưu hóa chiến lược diện tích đường K, có thể cân nhắc các hướng sau:
Tính diện tích của chân nến
Tín hiệu mở vị thế mua:
(1) “Khu vực đường K” của xu hướng giảm đạt đến ngưỡng, có thể được thiết lập trước
(2) Giá trị chỉ báo KDJ lớn hơn 80
(1) “Khu vực đường K” của xu hướng tăng đạt đến ngưỡng, có thể được thiết lập trước
(2) Giá trị chỉ số KDJ nhỏ hơn 20
Triển khai 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)
}
}
Logic của chiến lược này rất đơn giản:
Các thông số chiến lược
Biến toàn cục
Chức năng tính toán
Chức năng vòng lặp chính
a. Lấy dữ liệu K-line mới nhất và đảm bảo rằng số lượng K-line không ít hơn maPeriod, nếu không thì ghi lại trạng thái và trả về.
b. Tính toán đường trung bình động ma và chỉ báo ATR atr, cũng như chỉ báo KDJ.
c. Lấy thông tin diện tích, chỉ mục đường K chéo lên cuối cùng và chỉ mục đường K chéo xuống cuối cùng từ areaInfo.
d. Sử dụng đối tượng biểu đồ nến c để vẽ các đường nến và chỉ báo, sau đó tô chúng bằng các màu khác nhau theo mối quan hệ giữa giá và đường trung bình động.
e. Xác định thời điểm mua và bán dựa trên các điều kiện:
Nếu tradeState là “NULL”, diện tích nhỏ hơn -threshold và giá trị nến KDJ lớn hơn 70, thì lệnh mua sẽ được thực hiện. Nếu tradeState là “NULL”, diện tích lớn hơn ngưỡng và giá trị nến KDJ nhỏ hơn 30, hãy thực hiện lệnh bán. f. Đặt điều kiện dừng lỗ và chốt lời và đóng vị thế nếu đáp ứng được các điều kiện:
Nếu ở trạng thái mua, vị thế sẽ được đóng khi giá thấp hơn giá đóng cửa của ngày giao dịch trước đó trừ đi ATR của ngày hôm trước. Nếu đang ở trạng thái bán, vị thế sẽ được đóng 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 hôm trước. Chức năng chính: Đây là điểm vào thực thi chính, kiểm tra xem tên trao đổi có chứa “_“Futures”, nếu được bao gồm, sẽ đưa ra một ngoại lệ, nếu không sẽ vào vòng lặp vô hạn, thực thi hàm onTick trong mỗi vòng lặp và chuyển sang chế độ ngủ trong 1 giây.
Nhìn chung, chiến lược này chủ yếu dựa vào biểu đồ K-line và các chỉ báo kỹ thuật để đưa ra quyết định mua và bán, đồng thời sử dụng các chiến lược cắt lỗ và chốt lời để quản lý rủi ro. Xin lưu ý rằng đây chỉ là một chiến lược ví dụ và việc sử dụng thực tế cần được điều chỉnh và tối ưu hóa dựa trên điều kiện thị trường và nhu cầu cụ thể.
Mô hình này có thể dễ dàng triển khai bằng JavaScript trên FMZ.COM mà không cần sử dụng nhiều dòng mã. Và biểu diễn đồ họa của diện tích đường K có thể dễ dàng thực hiện được bằng cách sử dụng hàm KLineChart. Chiến lược này được thiết kế cho thị trường giao ngay tiền điện tử và sử dụng mẫu “Thư viện giao dịch giao ngay tiền kỹ thuật số”. Nó sử dụng các chức năng được đóng gói trong mẫu để đặt lệnh, cũng rất đơn giản, dễ sử dụng và dễ hiểu.


Tôi đã chọn ngẫu nhiên một khoảng thời gian kiểm tra ngược. Mặc dù tôi không mất tiền, nhưng tôi không tích lũy lợi nhuận liên tục, vì vậy vấn đề rút tiền vẫn khá lớn. Nên có những hướng tối ưu hóa khác và không gian cho chiến lược này. Những ai quan tâm có thể thử nâng cấp chiến lược này.

Thông qua chiến lược này, ngoài việc học được ý tưởng giao dịch thay thế, chúng ta còn học cách vẽ biểu đồ; biểu diễn vùng được bao quanh bởi đường K và đường trung bình động; vẽ chỉ báo KDJ, v.v.
Chiến lược vùng K-line là chiến lược giao dịch dựa trên biên độ xu hướng giá và chỉ báo 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 vùng giữa đường K-line và đường trung bình động và chuyển đổi tâm lý mua và bán. Mặc dù có một số rủi ro nhất định, nhưng thông qua việc 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 ứng phó tốt hơn với những biến động của thị trường. Điều quan trọng là các nhà giao dịch phải linh hoạt điều chỉnh các thông số và quy tắc của chiến lược theo tình hình cụ thể và điều kiện thị trường để đạt được hiệu suất giao dịch tốt hơn.