avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Idea perdagangan alternatif--Strategi perdagangan kawasan K-line

Dicipta dalam: 2023-11-03 17:12:42, dikemas kini pada: 2024-11-08 09:08:54
comments   0
hits   1617

Idea perdagangan alternatif–Strategi perdagangan kawasan K-line

Melihat idea dagangan yang tidak boleh dipercayai - Strategi perdagangan kawasan K-line, dalam artikel ini kita akan membincangkan idea ini dan cuba melaksanakan skrip ini.

Idea utama strategi kawasan K-line

Strategi kawasan K-line ialah strategi perdagangan berdasarkan hubungan kawasan antara harga K-line dan purata bergerak. Idea utamanya adalah untuk meramalkan kemungkinan arah aliran harga saham dengan menganalisis amplitud dan perubahan arah aliran harga, serta penukaran sentimen membeli dan menjual, untuk menentukan masa pembukaan dan keluar dari posisi. Strategi ini bergantung pada kawasan antara batang lilin dan purata bergerak, serta nilai penunjuk KDJ, untuk menjana isyarat dagangan panjang dan pendek.

Prinsip strategi kawasan K-line

Kawasan candlestick merujuk kepada ruang antara candlestick harga dan purata bergerak, yang dikira dengan menolak nilai purata bergerak daripada harga penutup setiap bar dan kemudian menjumlahkannya. Apabila harga meningkat untuk masa yang lama dan dalam amplitud yang besar, kawasan garis K akan menjadi lebih besar, manakala dalam pasaran yang tidak menentu atau pembalikan selepas turun naik, kawasan garisan K akan menjadi lebih kecil. . Menurut prinsip “semuanya pergi ke ekstrem yang bertentangan”, semakin besar aliran menaik dan semakin lama masa, semakin besar kawasan garis K yang sepadan, dan semakin besar kebarangkalian pembalikan, sama seperti spring, semakin lama ia diregangkan, lebih besar daya lantunan. Oleh itu, ambang untuk kawasan garisan K ditetapkan Apabila ambang ini dicapai, arah aliran harga mungkin selesai dan kemungkinan pembalikan adalah lebih besar.

Untuk mengesahkan lagi bahawa arah aliran akan berbalik, penunjuk KDJ diperkenalkan untuk menilai penukaran sentimen beli dan jual. Tetapan ambang dan nilai penunjuk KDJ bagi strategi ini boleh dilaraskan mengikut keadaan tertentu dan perlu meningkatkan ketepatan strategi.

Kelebihan strategi kawasan K-line

Kelebihan strategi kawasan K-line ialah ia menggabungkan amplitud dan perubahan arah aliran harga, serta penukaran sentimen membeli dan menjual, menyediakan strategi perdagangan kuantitatif yang agak lengkap. Kelebihannya termasuk:

  • Ia menyediakan cara yang mudah dan intuitif untuk mengenal pasti kemungkinan pembalikan arah aliran, membantu peniaga memahami arah aliran pasaran dengan lebih baik.
  • Gabungan kawasan K-line dan penunjuk KDJ meningkatkan kebolehpercayaan dan ketepatan strategi.
  • Ia sangat fleksibel dan boleh melaraskan parameter mengikut keadaan pasaran untuk memenuhi keperluan dagangan yang berbeza.

Risiko strategi kawasan K-line

Walaupun strategi kawasan candlestick mempunyai kelebihan tertentu, ia juga mempunyai beberapa risiko, termasuk:

  • Menetapkan ambang mungkin memerlukan sedikit pengalaman dan pelarasan, dan jika ia tidak ditetapkan dengan betul, ia boleh membawa kepada salah menilai arah aliran pasaran.
  • Ketepatan penunjuk KDJ dipengaruhi oleh turun naik pasaran dan bunyi bising, dan isyarat palsu mungkin berlaku.
  • Prestasi strategi mungkin berbeza-beza di bawah keadaan pasaran yang berbeza dan memerlukan pengoptimuman dan pelarasan yang berterusan.

Arah pengoptimuman strategi kawasan K-line

Untuk mengoptimumkan strategi kawasan K-line, arahan berikut boleh dipertimbangkan:

  • Pengoptimuman parameter: Laraskan dan optimumkan ambang dan parameter penunjuk KDJ secara berterusan untuk menyesuaikan diri dengan keadaan pasaran dan keperluan dagangan yang berbeza.
  • Pengurusan Risiko: Laksanakan strategi pengurusan risiko yang berkesan, termasuk peraturan henti rugi dan ambil untung, untuk mengurangkan risiko kerugian.
  • Gabungan pelbagai strategi: Gabungkan strategi kawasan K-line dengan strategi lain untuk meningkatkan prestasi strategi perdagangan komprehensif.
  • Pemantauan dan pelarasan masa nyata: Pantau prestasi strategi secara kerap dan buat pelarasan dan penambahbaikan berdasarkan keadaan sebenar.

Laksanakan strategi ini menggunakan JavaScript

  • Kira luas batang lilin

  • Isyarat untuk membuka kedudukan panjang:

(1) “Kawasan garis-K” arah aliran menurun mencapai ambang, yang boleh diwujudkan sebelum ini

(2) Nilai penunjuk KDJ lebih besar daripada 80

  • Isyarat untuk membuka kedudukan pendek:

(1) “Kawasan garis-K” arah aliran menaik mencapai ambang, yang boleh diwujudkan sebelum ini

(2) Nilai penunjuk KDJ kurang daripada 20

  • Keluar panjang/pendek: ATR menjejaki stop loss dan take profit

Pelaksanaan Kod

// 参数
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)
    }
}

Logik strategi adalah sangat mudah:

  1. Pertama, beberapa pembolehubah dan parameter global ditakrifkan, termasuk:

Parameter strategi

  • maPeriod: Tempoh purata bergerak.
  • ambang: Ambang yang digunakan untuk menentukan masa untuk membeli atau menjual.
  • jumlah: Jumlah setiap transaksi.

Pembolehubah global

  • c: Objek carta garis K, digunakan untuk melukis carta.
  • openPrice: merekodkan harga pembukaan.
  • tradeState: merekodkan status transaksi, yang boleh menjadi “NULL” (kedudukan kosong), “BELI” (beli) atau “JUAL” (jual).

Fungsi Pengiraan

  • Fungsi calculateKLineArea: Fungsi ini digunakan untuk mengira kawasan antara harga dan purata bergerak sepanjang tempoh masa pada carta candlestick, dan mengembalikan nilai kawasan, indeks candlestick bagi cross-up terakhir silangan dan indeks candlestick bagi lintasan silang ke bawah yang terakhir. Nilai ini digunakan dalam keputusan seterusnya untuk menentukan masa untuk membeli dan menjual.

Fungsi gelung utama

  • Fungsi onTick: Ini ialah fungsi pelaksanaan strategi utama Berikut ialah operasi dalam fungsi:

a. Dapatkan data K-line terkini dan pastikan bilangan K-line tidak kurang daripada maPeriod, jika tidak rekod status dan kembalikan.

b. Kira purata bergerak ma dan penunjuk ATR, serta penunjuk KDJ.

c. Dapatkan maklumat kawasan, indeks K-line silang terakhir, dan indeks K-line silang terakhir dari areaInfo.

d. Gunakan objek carta candlestick c untuk melukis garisan candlestick dan penunjuk, dan isikannya dengan warna yang berbeza mengikut hubungan antara harga dan purata bergerak.

e. Tentukan masa pembelian dan penjualan berdasarkan syarat:

Jika tradeState ialah “NULL”, dan kawasannya kurang daripada -ambang dan nilai candlestick KDJ lebih daripada 70, operasi belian dilakukan. Jika tradeState ialah “NULL”, dan kawasan lebih besar daripada ambang dan nilai candlestick KDJ kurang daripada 30, laksanakan operasi jual. f. Tetapkan syarat stop loss dan take profit dan tutup kedudukan jika syarat dipenuhi:

Jika ia dalam keadaan beli, kedudukan ditutup apabila harga lebih rendah daripada harga penutupan hari dagangan sebelumnya tolak ATR hari sebelumnya. Jika ia dalam keadaan jualan, kedudukan ditutup apabila harga lebih tinggi daripada harga penutupan hari dagangan sebelumnya ditambah dengan ATR hari sebelumnya. fungsi utama: Ini adalah titik masuk pelaksanaan utama, menyemak sama ada nama pertukaran mengandungi “_Niaga hadapan”, jika disertakan, melontar pengecualian, sebaliknya memasuki gelung tak terhingga, melaksanakan fungsi onTick dalam setiap gelung dan tidur selama 1 saat.

Secara umum, strategi ini bergantung terutamanya pada carta garis K dan penunjuk teknikal untuk membuat keputusan membeli dan menjual, sambil menggunakan strategi henti rugi dan ambil untung untuk mengurus risiko. Sila ambil perhatian bahawa ini hanyalah contoh strategi dan penggunaan sebenar perlu diselaraskan dan dioptimumkan berdasarkan keadaan pasaran dan keperluan khusus.

Model ini mudah dilaksanakan menggunakan JavaScript pada FMZ.COM tanpa menggunakan banyak baris kod. Dan perwakilan grafik kawasan garis-K mudah dicapai menggunakan fungsi KLineChart. Strategi ini direka untuk pasaran spot mata wang kripto dan menggunakan templat “Perpustakaan Dagangan Spot Mata Wang Digital” Membuat pesanan menggunakan fungsi yang terkandung dalam templat juga sangat mudah, mudah digunakan dan difahami.

Ujian Balik Strategi

Idea perdagangan alternatif–Strategi perdagangan kawasan K-line

Idea perdagangan alternatif–Strategi perdagangan kawasan K-line

Saya secara rawak memilih tempoh masa ujian balik Walaupun saya tidak kehilangan wang, saya tidak mengumpul keuntungan secara berterusan, jadi masalah pengeluaran masih agak besar. Perlu ada arah dan ruang pengoptimuman lain untuk strategi ini. Kepada yang berminat boleh cuba upgrade strategi ini.

Idea perdagangan alternatif–Strategi perdagangan kawasan K-line

Melalui strategi ini, di samping mempelajari idea perdagangan yang lebih alternatif, kami juga mempelajari cara melukis carta mewakili kawasan yang dilampirkan oleh garis K dan purata bergerak, dsb.

ringkaskan

Strategi kawasan K-line ialah strategi dagangan berdasarkan amplitud arah aliran harga dan penunjuk KDJ Ia membantu pedagang meramalkan arah aliran pasaran dengan menganalisis kawasan antara garis K dan purata bergerak serta penukaran sentimen jual beli. Walaupun terdapat risiko tertentu, melalui pengoptimuman dan pelarasan berterusan, strategi ini boleh menyediakan alat dagangan yang berkuasa untuk membantu peniaga menghadapi turun naik pasaran dengan lebih baik. Adalah penting bahawa pedagang harus menyesuaikan parameter dan peraturan strategi mereka secara fleksibel mengikut situasi dan keadaan pasaran khusus untuk mencapai prestasi dagangan yang lebih baik.