Melihat ide perdagangan yang tidak begitu dapat diandalkan
Strategi area K-line adalah strategi perdagangan yang didasarkan pada hubungan area antara garis K-price dan moving average. Ide utamanya adalah untuk memprediksi kemungkinan tren harga saham dengan menganalisis besar dan perubahan tren harga, serta pergeseran sentimen pembelian dan penjualan, sehingga menentukan kapan membuka posisi dan keluar. Strategi ini bergantung pada area antara garis K dan moving average, serta nilai dari indikator KDJ, untuk menghasilkan sinyal perdagangan panjang dan pendek.
Area garis K mengacu pada area spasial antara garis harga K dan rata-rata bergerak, yang dihitung dengan mengurangi nilai rata-rata bergerak dari harga penutupan setiap batang dan kemudian menyimpulkan. Ketika ada kenaikan harga yang besar dalam jangka waktu yang lama, area garis K akan menjadi lebih besar, sementara selama pasar yang tidak stabil atau setelah pembalikan volatilitas, area garis K lebih kecil. Menurut prinsip
Untuk lebih lanjut mengkonfirmasi pembalikan tren yang akan datang, kami memperkenalkan penggunaan indikator KDJ yang membantu menentukan pergeseran sentimen membeli atau menjual. ambang batas untuk strategi dan nilai untuk indikator ini dapat disesuaikan dengan keadaan dan kebutuhan khusus untuk meningkatkan akurasi.
Keuntungan dari strategi area K-line terletak pada kombinasinya dari besar dan perubahan tren harga, serta pergeseran dalam sentimen membeli dan menjual, memberikan strategi perdagangan kuantitatif yang relatif lengkap.
Meskipun strategi area garis K memiliki keuntungan tertentu, ia juga membawa beberapa risiko, termasuk:
Untuk mengoptimalkan strategi area garis K, pertimbangkan arah berikut:
Menghitung Area K-line
Sinyal pembukaan posisi panjang:
(1) Area
(2) Nilai indikator KDJ lebih besar dari 80.
Sinyal pembukaan posisi pendek:
(1) Area
(2) Nilai indikator KDJ kurang dari 20.
Exit untuk posisi Long/Short: ATR trailing stop loss dan take profit.
Pelaksanaan Kode
// Parameter
var maPeriod = 30
var threshold = 50000
var amount = 0.1
// Global variable
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(), "Insufficient number of K-line")
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)
}
}
Logika strategi sangat sederhana:
Parameter strategi
Variabel global
Menghitung fungsi
Fungsi lingkaran utama
Fungsi onTick: Ini adalah fungsi pelaksanaan strategi utama, dan berikut adalah operasi dalam fungsi:
a. Dapatkan data K-line terbaru dan pastikan bahwa jumlah K-line tidak kurang dari maPeriod, jika tidak, catat status dan kembali.
Menghitung garis rata-rata bergerak ma dan indikator ATR atr, serta indikator KDJ.
c. Dapatkan informasi daerah dari areaInfo, indeks garis K yang terakhir disilang, dan indeks garis K yang terakhir disilang.
d. Gunakan objek grafik K-line c untuk menggambar garis K dan garis indikator sambil mengisi warna yang berbeda berdasarkan hubungan harga
e. Menentukan waktu pembelian atau penjualan sesuai dengan kondisi:
Jika tradeState adalah
Jika berada dalam kondisi pembelian, ketika harga jatuh di bawah harga penutupan hari perdagangan terakhir dikurangi ATR (Range Benar Rata-rata) hari sebelumnya, posisi ditutup. Jika berada dalam kondisi jual, ketika harga naik di atas harga penutupan hari perdagangan terakhir ditambah ATR (Range Benar Rata-rata) hari sebelumnya, posisi ditutup.
fungsi utama: Ini berfungsi sebagai titik masuk eksekusi utama. Ini memeriksa apakah nama pertukaran berisi
Dengan kata lain, strategi ini terutama mengandalkan grafik K-line dan indikator teknis untuk membuat keputusan pembelian atau penjualan sementara juga menggunakan strategi stop-loss & take-profit untuk mengelola risiko. Harap dicatat bahwa ini hanya berfungsi sebagai contoh strategi yang perlu disesuaikan & dioptimalkan sesuai dengan situasi pasar & persyaratan khusus selama penggunaan aktual.
PadaFMZ.COM, menggunakan bahasa JavaScript tidak memerlukan banyak baris kode, sebaliknya, ia menerapkan model ini dengan mudah. Dan dengan bantuan dari fungsi KLineChart representasi grafis dari area grafik K-line juga dengan mudah dicapai.
Saya memilih periode backtesting secara acak. Meskipun saya tidak kehilangan uang, saya juga tidak mengumpulkan keuntungan secara terus menerus, dan masalah penarikan cukup signifikan. Harus ada arah lain dan ruang untuk optimasi untuk strategi. Mereka yang tertarik dapat mencoba untuk meningkatkan strategi.
Melalui strategi, kami tidak hanya belajar ide perdagangan yang agak tidak konvensional, tetapi juga belajar cara memetakan diagram; mewakili area yang dikelilingi oleh garis K dan garis rata-rata bergerak; memetakan indikator KDJ dll.
Strategi area K-line adalah strategi trading yang didasarkan pada besarnya tren harga dan indikator KDJ. Ini membantu pedagang memprediksi tren pasar dengan menganalisis area antara garis K dan rata-rata bergerak, serta pergeseran sentimen pembelian dan penjualan. Meskipun ada risiko tertentu, strategi ini dapat memberikan alat trading yang kuat melalui optimasi dan penyesuaian berkelanjutan, membantu pedagang mengatasi fluktuasi pasar dengan lebih baik. Selain itu, pedagang harus menyesuaikan parameter dan aturan strategi secara fleksibel sesuai dengan situasi dan kondisi pasar tertentu untuk mencapai kinerja trading yang lebih baik.