avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Ide perdagangan alternatif--strategi perdagangan area K-line

Dibuat di: 2023-11-03 17:12:42, diperbarui pada: 2024-11-08 09:08:54
comments   0
hits   1617

Ide perdagangan alternatif–strategi perdagangan area K-line

Melihat ide perdagangan yang tidak terlalu bisa diandalkan - strategi perdagangan area K-line, dalam artikel ini kita akan membahas ide ini dan mencoba menerapkan skrip ini.

Ide utama dari strategi wilayah K-line

Strategi area garis K adalah strategi perdagangan yang didasarkan pada hubungan area antara garis harga K dan rata-rata pergerakan. Gagasan utamanya adalah memprediksi kemungkinan tren harga saham dengan menganalisis amplitudo dan perubahan tren harga, serta konversi sentimen beli dan jual, untuk menentukan waktu pembukaan dan keluar posisi. Strategi ini mengandalkan area antara candlestick dan moving average, serta nilai indikator KDJ, untuk menghasilkan sinyal perdagangan long dan short.

Prinsip strategi area K-line

Area kandil merujuk pada ruang antara kandil harga dan rata-rata bergerak, yang dihitung dengan cara mengurangi nilai rata-rata bergerak dari harga penutupan setiap batang lalu menjumlahkannya. Ketika harga naik dalam jangka waktu yang lama dan dengan amplitudo yang besar, maka luas garis K akan semakin besar, sedangkan pada pasar yang sedang volatil atau pembalikan setelah volatilitas, maka luas garis K akan semakin kecil. . Sesuai dengan prinsip “semuanya berjalan ke arah ekstrem yang berlawanan”, semakin besar tren naik dan semakin lama waktunya, semakin besar pula area garis K yang sesuai, dan semakin besar pula kemungkinan pembalikan, seperti pegas, semakin lama diregangkan, makin besar pula gaya pantulnya. Oleh karena itu, ambang batas untuk area garis K ditetapkan. Ketika ambang batas ini tercapai, tren harga dapat berakhir dan kemungkinan pembalikan menjadi lebih besar.

Untuk mengonfirmasi lebih lanjut bahwa tren akan segera berbalik, indikator KDJ diperkenalkan untuk menilai konversi sentimen beli dan jual. Pengaturan ambang batas dan nilai indikator KDJ dari strategi ini dapat disesuaikan menurut keadaan dan kebutuhan spesifik untuk meningkatkan akurasi strategi.

Keuntungan strategi area K-line

Keuntungan dari strategi area K-line adalah menggabungkan amplitudo dan perubahan tren harga, serta konversi sentimen beli dan jual, sehingga memberikan strategi perdagangan kuantitatif yang relatif lengkap. Keunggulannya antara lain:

  • Ini menyediakan cara yang sederhana dan intuitif untuk mengidentifikasi kemungkinan pembalikan tren, membantu pedagang lebih memahami tren pasar.
  • Kombinasi indikator area garis K dan KDJ meningkatkan keandalan dan akurasi strategi.
  • Sangat fleksibel dan dapat menyesuaikan parameter sesuai dengan kondisi pasar untuk memenuhi kebutuhan perdagangan yang berbeda-beda.

Risiko strategi wilayah K-line

Meskipun strategi area candlestick memiliki beberapa kelebihan, namun strategi ini juga memiliki beberapa risiko, antara lain:

  • Menetapkan ambang batas mungkin memerlukan beberapa pengalaman dan penyesuaian, dan jika tidak ditetapkan dengan benar, hal itu dapat menyebabkan kesalahan penilaian tren pasar.
  • Keakuratan indikator KDJ dipengaruhi oleh fluktuasi dan kebisingan pasar, dan sinyal palsu dapat terjadi.
  • Kinerja suatu strategi dapat bervariasi dalam kondisi pasar yang berbeda dan memerlukan pengoptimalan dan penyesuaian yang konstan.

Arah optimalisasi strategi kawasan K-line

Untuk mengoptimalkan strategi kawasan K-line, arah berikut dapat dipertimbangkan:

  • Optimalisasi parameter: Terus sesuaikan dan optimalkan parameter ambang batas dan indikator KDJ untuk beradaptasi dengan berbagai kondisi pasar dan kebutuhan perdagangan.
  • Manajemen Risiko: Terapkan strategi manajemen risiko yang efektif, termasuk aturan stop-loss dan take-profit, untuk mengurangi risiko kerugian.
  • Kombinasi multi-strategi: Gabungkan strategi area K-line dengan strategi lain untuk meningkatkan kinerja strategi perdagangan yang komprehensif.
  • Pemantauan dan penyesuaian waktu nyata: Pantau kinerja strategi secara berkala dan buat penyesuaian serta perbaikan berdasarkan kondisi aktual.

Terapkan strategi ini menggunakan JavaScript

  • Hitunglah luas kandil tersebut

  • Sinyal untuk membuka posisi panjang:

(1) Area “garis K” dari tren penurunan mencapai ambang batas, yang dapat ditetapkan sebelum

(2) Nilai indikator KDJ lebih besar dari 80

  • Sinyal untuk membuka posisi short:

(1) Area “garis K” dari tren naik mencapai ambang batas, yang dapat ditetapkan sebelum

(2) Nilai indikator KDJ kurang dari 20

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

Implementasi Kode

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

Logika strateginya sangat sederhana:

  1. Pertama, beberapa variabel dan parameter global didefinisikan, termasuk:

Parameter strategi

  • maPeriod: Periode rata-rata pergerakan.
  • ambang batas: Ambang batas yang digunakan untuk menentukan kapan akan membeli atau menjual.
  • jumlah: Jumlah setiap transaksi.

Variabel global

  • c: Objek bagan garis K, digunakan untuk menggambar bagan.
  • openPrice: mencatat harga pembukaan.
  • tradeState: mencatat status transaksi, yang bisa berupa “NULL” (posisi kosong), “BUY” (beli) atau “SELL” (jual).

Fungsi Perhitungan

  • fungsi calculateKLineArea: Fungsi ini digunakan untuk menghitung area antara harga dan moving average selama periode waktu tertentu pada grafik candlestick, dan mengembalikan nilai area, indeks candlestick dari cross-up terakhir dan indeks candlestick dari moving average terakhir. silang ke bawah Nilai-nilai ini digunakan dalam keputusan selanjutnya untuk menentukan kapan akan membeli dan menjual.

Fungsi loop utama

  • Fungsi onTick: Ini adalah fungsi eksekusi strategi utama. Berikut ini adalah operasi dalam fungsi tersebut:

a. Dapatkan data K-line terbaru dan pastikan jumlah K-line tidak kurang dari maPeriod, jika tidak, catat statusnya dan kembalikan.

b. Hitung moving average ma dan indikator ATR atr, serta indikator KDJ.

c. Dapatkan informasi area, indeks garis K cross-up terakhir, dan indeks garis K cross-down terakhir dari areaInfo.

d. Gunakan objek grafik candlestick c untuk menggambar garis candlestick dan indikator, lalu isi dengan warna yang berbeda sesuai dengan hubungan antara harga dan moving average.

e. Menentukan waktu pembelian dan penjualan berdasarkan kondisi:

Jika tradeState adalah “NULL”, dan areanya kurang dari -threshold dan nilai candlestick KDJ lebih besar dari 70, maka operasi beli dilakukan. Jika tradeState adalah “NULL”, dan areanya lebih besar dari ambang batas dan nilai kandil KDJ kurang dari 30, jalankan operasi jual. f. Tetapkan kondisi stop loss dan take profit dan tutup posisi jika kondisinya terpenuhi:

Jika dalam keadaan beli, posisi ditutup ketika harga lebih rendah dari harga penutupan hari perdagangan sebelumnya dikurangi ATR hari sebelumnya. Apabila dalam kondisi jual, posisi ditutup bila harga lebih tinggi dari harga penutupan hari perdagangan sebelumnya ditambah ATR hari sebelumnya. fungsi utama: Ini adalah titik masuk eksekusi utama, memeriksa apakah nama pertukaran berisi “_“Futures”, jika disertakan, akan memunculkan pengecualian, jika tidak akan memasuki loop tak terhingga, mengeksekusi fungsi onTick di setiap loop, dan tidur selama 1 detik.

Secara umum, strategi ini terutama mengandalkan grafik K-line dan indikator teknis untuk membuat keputusan membeli dan menjual, sambil menggunakan strategi stop-loss dan take-profit untuk mengelola risiko. Harap dicatat bahwa ini hanyalah contoh strategi dan penggunaan aktual perlu disesuaikan dan dioptimalkan berdasarkan kondisi pasar dan kebutuhan spesifik.

Model ini mudah diimplementasikan menggunakan JavaScript di FMZ.COM tanpa menggunakan banyak baris kode. Dan representasi grafis dari area garis K mudah dicapai menggunakan fungsi KLineChart. Strategi ini dirancang untuk pasar spot mata uang kripto dan menggunakan templat “Digital Currency Spot Trading Library”. Menempatkan pesanan menggunakan fungsi yang dirangkum dalam templat juga sangat sederhana, mudah digunakan, dan dipahami.

Pengujian Ulang Strategi

Ide perdagangan alternatif–strategi perdagangan area K-line

Ide perdagangan alternatif–strategi perdagangan area K-line

Saya memilih periode waktu pengujian ulang secara acak. Meskipun saya tidak kehilangan uang, saya tidak mengumpulkan keuntungan secara terus-menerus, jadi masalah penarikan masih cukup besar. Seharusnya ada arah pengoptimalan lain dan ruang untuk strategi ini. Mereka yang tertarik dapat mencoba meningkatkan strategi ini.

Ide perdagangan alternatif–strategi perdagangan area K-line

Melalui strategi ini, selain mempelajari ide perdagangan yang lebih alternatif, kami juga belajar cara menggambar grafik; menggambarkan area yang dibatasi oleh garis K dan rata-rata pergerakan; menggambar indikator KDJ, dll.

Meringkaskan

Strategi area K-line adalah strategi perdagangan yang didasarkan pada amplitudo tren harga dan indikator KDJ. Strategi ini membantu para pedagang memprediksi tren pasar dengan menganalisis area antara K-line dan moving average serta konversi sentimen beli dan jual. Meskipun ada risiko tertentu, melalui pengoptimalan dan penyesuaian berkelanjutan, strategi ini dapat menyediakan alat perdagangan yang ampuh untuk membantu pedagang mengatasi fluktuasi pasar dengan lebih baik. Penting bagi pedagang untuk secara fleksibel menyesuaikan parameter dan aturan strategi mereka sesuai dengan situasi dan kondisi pasar tertentu untuk mencapai kinerja perdagangan yang lebih baik.