Idea Perdagangan Alternatif - Strategi Perdagangan Kawasan K-Line

Penulis:Lydia, Dicipta: 2023-11-06 13:33:17, Dikemas kini: 2024-01-01 12:20:19

img

Melihat idea perdagangan yang tidak begitu boleh dipercayai strategi perdagangan kawasan K-line, dalam artikel ini, kita akan meneroka konsep dan cuba melaksanakan skrip.

Idea Utama Strategi Kawasan K-Line

Strategi kawasan K-garis adalah strategi perdagangan berdasarkan hubungan kawasan antara garis K harga dan purata bergerak. Idea utamanya adalah untuk meramalkan kemungkinan trend harga saham dengan menganalisis besar dan perubahan trend harga, serta perubahan sentimen membeli dan menjual, dengan itu menentukan bila untuk membuka kedudukan dan keluar. Strategi ini bergantung pada kawasan antara garis K dan purata bergerak, serta nilai dari penunjuk KDJ, untuk menjana isyarat perdagangan panjang dan pendek.

Prinsip Strategi Kawasan K-Line

Kawasan garis K merujuk kepada kawasan ruang antara garis K harga dan purata bergerak, dikira dengan mengurangkan nilai purata bergerak dari harga penutupan setiap bar dan kemudian mengjumlahkannya. Apabila terdapat peningkatan harga yang besar dalam jangka masa yang lama, kawasan garis K akan menjadi lebih besar, sementara semasa pasaran yang tidak menentu atau selepas pembalikan volatiliti, kawasan garis K lebih kecil. Menurut prinsip apa yang naik mesti turun, apabila trend menaik menjadi lebih besar dan berlangsung lebih lama, kawasan garis K yang sesuai juga meningkat; dengan itu peningkatan kebarangkalian pembalikan - seperti musim bunga yang melonjak dengan lebih banyak kekuatan apabila diregangkan lebih jauh. Oleh itu, menetapkan ambang untuk kawasan garis K ini dapat menunjukkan apabila harga mungkin telah mencapai puncak mereka dan mungkin akan berbalik.

Untuk mengesahkan lagi pembalikan trend yang akan datang, kami memperkenalkan penggunaan penunjuk KDJ yang membantu menentukan perubahan sentimen membeli atau menjual. ambang strategi dan nilai untuk penunjuk ini boleh disesuaikan mengikut keadaan dan keperluan tertentu untuk meningkatkan ketepatan.

Kelebihan Strategi Kawasan K-Line

Kelebihan strategi kawasan K-line terletak pada gabungan besar dan perubahan trend harga, serta perubahan sentimen membeli dan menjual, menyediakan strategi perdagangan kuantitatif yang agak lengkap.

  • Ia menyediakan kaedah yang mudah dan intuitif untuk mengenal pasti kemungkinan pembalikan trend, membantu peniaga memahami lebih baik trend pasaran.
  • Dengan menggabungkan kawasan garis K dan penunjuk KDJ, ia meningkatkan kebolehpercayaan dan ketepatan strategi.
  • Fleksibiliti yang tinggi membolehkan penyesuaian parameter mengikut keadaan pasaran untuk memenuhi keperluan perdagangan yang berbeza.

Risiko Strategi Kawasan K-Line

Walaupun strategi kawasan garis K mempunyai kelebihan tertentu, ia juga membawa beberapa risiko, termasuk:

  • Penetapan ambang mungkin memerlukan pengalaman dan penyesuaian.
  • Ketepatan penunjuk KDJ dipengaruhi oleh turun naik pasaran dan bunyi bising, yang boleh menyebabkan isyarat palsu.
  • Prestasi strategi boleh berbeza di bawah keadaan pasaran yang berbeza dan memerlukan pengoptimuman dan penyesuaian berterusan.

Arah Pengoptimuman Strategi Kawasan K-Line

Untuk mengoptimumkan strategi kawasan garis K, pertimbangkan arah berikut:

  • Pengoptimuman parameter: Sentiasa menyesuaikan dan mengoptimumkan nilai ambang dan parameter penunjuk KDJ untuk menyesuaikan diri dengan keadaan pasaran dan keperluan perdagangan yang berbeza.
  • Pengurusan risiko: Melaksanakan strategi pengurusan risiko yang berkesan, termasuk peraturan berhenti kerugian dan mengambil keuntungan, untuk mengurangkan risiko kerugian.
  • Gabungan pelbagai strategi: Gabungkan strategi kawasan K-line dengan strategi lain untuk meningkatkan prestasi strategi perdagangan komprehensif.
  • Pemantauan dan penyesuaian masa nyata: Memantau prestasi strategi secara berkala, menyesuaikan dan meningkatkan berdasarkan situasi sebenar.

Melaksanakan Strategi Menggunakan JavaScript

  • Mengira Kawasan Garis K

  • Isyarat pembukaan kedudukan panjang:

    (1) Kawasan K-garis trend menurun mencapai ambang, ia boleh ditetapkan terlebih dahulu.

    (2) Nilai penunjuk KDJ adalah lebih besar daripada 80.

  • Isyarat pembukaan kedudukan pendek:

    (1) Kawasan K-line trend menaik mencapai ambang, ia boleh ditetapkan terlebih dahulu.

    (2) Nilai penunjuk KDJ kurang daripada 20.

  • Keluar untuk kedudukan Long/Short: ATR menyusul stop loss dan mengambil keuntungan.

Pelaksanaan Kod

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

Logik strategi adalah sangat mudah:

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

Parameter Strategi

  • maPeriod: Tempoh purata bergerak.
  • Sempadan: Sempadan yang digunakan untuk menentukan masa pembelian atau penjualan.
  • jumlah: kuantiti untuk setiap transaksi.

Peralihan global

  • c: Objek carta K-line, digunakan untuk melukis carta.
  • openPrice: Mencatatkan harga pembukaan.
  • tradeState: Mencatatkan status dagangan, yang boleh menjadi NULL (posisi kosong), BUY atau SELL.

Mengira fungsi

  • fungsi calculateKLineArea: Ia digunakan untuk mengira kawasan antara harga dan garis purata bergerak pada carta K-line dalam tempoh tertentu, dan mengembalikan nilai kawasan, indeks garis K-line yang terakhir melintasi ke atas, dan indeks garis K-line yang terakhir melintasi ke bawah. Nilai ini digunakan dalam keputusan berikutnya untuk menentukan bila untuk membeli dan menjual.

Fungsi gelung utama

  • onTick fungsi: Ia adalah fungsi pelaksanaan strategi utama, dan berikut adalah operasi dalam fungsi:

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

    Mengira garis purata bergerak ma dan penunjuk ATR atr, serta penunjuk KDJ.

    c. Dapatkan maklumat kawasan dari areaInfo, indeks garis K yang terakhir, dan indeks garis K yang terakhir.

    d. Gunakan objek carta K-line c untuk melukis K-line dan garis penunjuk sambil mengisi warna yang berbeza berdasarkan hubungan hargas dengan garis purata bergerak.

    e. Menentukan masa membeli atau menjual mengikut syarat:

    Jika tradeState adalah NULL, dan kawasan adalah kurang daripada - ambang, dan nilai K KDJ adalah lebih besar daripada 70, melaksanakan operasi beli. Jika tradeState adalah NULL, dan kawasan lebih besar daripada ambang, dan nilai K KDJ adalah kurang daripada 30, pelaksanaan operasi jual. Jika syarat-syarat ini dipenuhi, tutup kedudukan:

    Jika ia berada dalam keadaan membeli, apabila harga jatuh di bawah harga penutupan hari dagangan terakhir dikurangkan hari sebelumnya's ATR (Average True Range), kedudukan ditutup. Jika ia berada dalam keadaan jual, apabila harga meningkat di atas harga penutupan hari dagangan terakhir ditambah hari sebelumnya ATR (Rentang Benar Purata), kedudukan ditutup.

    fungsi utama: Ini berfungsi sebagai titik kemasukan pelaksanaan utama. Ia memeriksa sama ada nama pertukaran mengandungi _Futures. Jika ya, pengecualian akan dilemparkan; jika tidak, ia memasuki gelung tanpa akhir di mana fungsi onTick dijalankan setiap saat.

Secara ringkasnya, strategi ini terutamanya bergantung kepada carta K-line dan penunjuk teknikal untuk membuat keputusan membeli atau menjual sementara juga menggunakan strategi stop-loss & take-profit untuk menguruskan risiko. Sila ambil perhatian bahawa ini hanya berfungsi sebagai contoh strategi yang perlu disesuaikan & dioptimumkan mengikut keadaan pasaran & keperluan khusus semasa penggunaan sebenar.

PadaFMZ.COM, menggunakan bahasa JavaScript tidak memerlukan banyak baris kod, sebaliknya, ia melaksanakan model ini dengan mudah. Dan dengan bantuan fungsi KLineChart, perwakilan grafik kawasan carta K-line juga dapat dicapai dengan mudah. Reka bentuk strategi memenuhi pasaran spot mata wang kripto dengan menggunakan Perpustakaan Dagangan Spot Mata Wang Digital templat untuk meletakkan pesanan melalui fungsi yang dikemas dalam templat, yang menjadikannya sangat mudah dan mudah difahami dan digunakan.

Ujian Kembali Strategi

img

img

Saya memilih tempoh backtesting secara rawak. Walaupun saya tidak kehilangan wang, saya juga tidak mengumpulkan keuntungan secara berterusan, dan isu penarikan adalah agak penting. Harus ada arah lain dan ruang untuk pengoptimuman untuk strategi. Mereka yang berminat boleh cuba menaik taraf strategi.

img img

Melalui strategi, kita bukan sahaja belajar idea perdagangan agak tidak konvensional, tetapi juga belajar bagaimana untuk merangka diagram; mewakili kawasan yang dikelilingi oleh K-garis dan garis purata bergerak; merangka penunjuk KDJ dan lain-lain.

Ringkasan

Strategi kawasan K-line adalah strategi perdagangan berdasarkan magnitud trend harga dan penunjuk KDJ. Ia membantu peniaga meramalkan trend pasaran dengan menganalisis kawasan antara garis K dan purata bergerak, serta perubahan sentimen membeli dan menjual. Walaupun terdapat risiko tertentu, strategi ini dapat menyediakan alat perdagangan yang kuat melalui pengoptimuman dan penyesuaian berterusan, membantu peniaga mengatasi lebih baik dengan turun naik pasaran. Selain itu, peniaga harus menyesuaikan parameter dan peraturan strategi dengan fleksibel mengikut situasi dan keadaan pasaran tertentu untuk mencapai prestasi perdagangan yang lebih baik.


Lebih lanjut