4.2 Cara menerapkan perdagangan strategis dalam bahasa JavaScript

Penulis:Kebaikan, Dibuat: 2019-04-27 11:53:15, Diperbarui:

Ringkasan

Dalam artikel sebelumnya, kami memperkenalkan pengetahuan dasar yang ketika menggunakan JavaScript untuk menulis sebuah program, termasuk tata bahasa dasar dan bahan.

Pengenalan Strategi

Bollinger Band adalah salah satu indikator teknis yang paling umum digunakan, diciptakan oleh John Bollinger pada tahun 1980-an. Secara teori, harga selalu berfluktuasi di sekitar rentang nilai tertentu.

Metode perhitungan adalah menggunakan prinsip statistik, pertama menghitung deviasi standar harga untuk periode waktu, dan kemudian menambahkan atau mengurangi 2 kali deviasi standar rata-rata bergerak untuk menemukan interval terpercaya harga. Jenis dasar adalah saluran strip yang terdiri dari tiga jalur rel (rel tengah, rel atas, rel bawah). rel tengah adalah harga rata-rata, dan rel atas dan rel bawah mewakili garis tekanan dan garis dukungan harga, masing-masing. Seperti yang ditunjukkan di bawah:

img

Karena konsep standar deviasi, lebar Bollinger Band disesuaikan secara dinamis berdasarkan fluktuasi harga baru-baru ini. Ketika fluktuasi kecil, Bollinger Band akan lebih sempit; jika tidak fluktuasi akan lebih besar dan Bollinger Band akan lebih luas. Ketika saluran BOLL berubah dari sempit ke lebar, harga secara bertahap kembali ke rata-rata. Ketika saluran BOLL berubah dari lebar ke sempit, itu berarti bahwa harga pasar mulai berubah. Jika harga melintasi rel atas, itu berarti bahwa daya beli meningkat. Jika harga turun melintasi rel bawah, itu menunjukkan bahwa daya jual meningkat.

Metode Perhitungan Indikator Bollinger Band

Di antara semua indikator teknis, metode perhitungan Bollinger Band adalah salah satu yang paling rumit, yang memperkenalkan konsep standar deviasi dalam statistik, yang melibatkan perhitungan lintasan tengah (MB ), lintasan atas (UP) dan lintasan bawah (DN).

  • Rel tengah = rata-rata bergerak sederhana dari periode waktu N

  • Rel atas = rel tengah + penyimpangan standar periode waktu K × N

  • Rel bawah = rel tengah − penyimpangan standar periode waktu K × N

function main( ) { // program entry
    while (true) { // enter the loop
        exchange.SetContactType('this_week'); // set contact type
        var records = exchange.GetRecods(); // get the k line array
        var boll = TA.B0LL(records, 50); // get the 50-cycle BOLL indicator array
        var top = boll[0]; // get the upper-rail BOLL indicator array
        var ma = boll[l]; // get the middle-rail BOLL indicator array
        var bottom = boll[2]; // get the lower-rail BOLL indicator array
        Log(top); // print the upper-rail BOLL indicator array to the log
        Log(ma); // print the middle-rail BOLL indicator array to the log
        Log(bottom);// print the lower-rail BOLL indicator array to the log
    }
}

Logika strategi

Bollinger Bands digunakan dalam berbagai cara dan dapat digunakan sendiri atau dalam kombinasi dengan indikator lain. Dalam bagian ini dari tutorial kita akan menggunakannya dengan cara yang paling mudah, yaitu: Ketika harga menembus rel atas, buka posisi panjang; ketika harga menembus rel bawah, buka posisi pendek.

img

Jika harga kembali ke rel tengah Bollinger Band setelah membuka posisi panjang, kami percaya bahwa kekuatan daya beli melemah, atau kekuatan daya jual menguat, oleh karena itu, di sinilah sinyal posisi penutupan masuk. logika yang sama untuk posisi pendek.

Kondisi perdagangan

  • Posisi panjang terbuka: Jika tidak ada posisi, dan harga penutupan lebih besar dari rel atas.

  • Posisi pendek: Jika tidak ada posisi, dan harga penutupan lebih rendah dari rel bawah.

  • Tutup Posisi Panjang: Jika memegang posisi panjang, dan harga penutupan kurang dari rel tengah,

  • Tutup Posisi Pendek: Jika memegang posisi pendek, dan harga penutupan lebih besar dari rel tengah,

Pelaksanaan kode strategi

Untuk mencapai strategi, pertama kita perlu mempertimbangkan data apa yang kita butuhkan? melalui API mana untuk mendapatkan? kemudian bagaimana menghitung logika perdagangan? akhirnya, cara mana untuk menempatkan pesanan? mari kita menerapkannya langkah demi langkah:

Langkah 1: Gunakan Kerangka Strategi CTA

Kerangka kerja yang disebut CTA Strategy adalah seperangkat kerangka kerja standar yang dirancang secara resmi oleh FMZ Quant. Dengan menggunakan kerangka kerja ini, Anda dapat mengabaikan masalah pemrograman sepele dan fokus langsung pada logika pemrograman.

function main() {
    $.CTA("this_week", function(st) {
        // write your strategy here
    })
}

Di atas adalah kerangka strategi CTA menggunakan alat FMZ Quant. Ini adalah format kode tetap, dan semua kode logika perdagangan dimulai dari baris 3. Selain kebutuhan untuk memodifikasi kode varietas yang digunakan, tidak diperlukan perubahan lain di tempat lain.

Perhatikan bahwa kode varietas perdagangan di atas adalah this_week yang berarti mewakili menggunakan k-line mingguan, data perdagangan menggunakan data mingguan.

Langkah 2: Dapatkan semua jenis data

Dari logika strategi trading kita, kita pertama-tama perlu mendapatkan status posisi saat ini, dan kemudian membandingkan harga penutupan dengan rel atas, tengah dan bawah indikator Bollinger Band.

  • Dapatkan data garis K

Yang pertama adalah untuk mendapatkan array data K-line dan harga penutupan K-line sebelumnya, dengan array K-line, kita dapat menghitung indikator Bollinger Band. dapat ditulis seperti ini:

function main() {
    $.CTA("this_week", function(st) {

        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price

    })
}

Seperti yang ditunjukkan di atas:

Garis 4: Dapatkan array garis K, yang merupakan format tetap.

Garis 5: Filter panjang garis K, karena parameter untuk menghitung indikator Bollinger Band adalah 20, ketika garis K kurang dari 20, tidak mungkin untuk menghitung indikator Bollinger Band. Jadi di sini kita perlu menyaring panjang garis K. Jika garis K kurang dari 20, itu akan kembali langsung dan terus menunggu garis K berikutnya.

Garis 6 : Dari array K-line yang diperoleh, pertama-tama dapatkan objek dari K-line sebelumnya, dan kemudian dapatkan harga penutupan dari objek ini.

Elemen array K-line adalah semua objek, objek berisi harga pembukaan, tertinggi, terendah dan penutupan; juga volume perdagangan dan waktu.

Misalnya, untuk mendapatkan harga penutupan, cukup tambahkan ". " diikuti oleh nama atribut (r[r.length - 2].Close).

  • Dapatkan data waktu garis K

Karena ini adalah strategi intraday, kita perlu menutup semua posisi sebelum waktu tertentu ((sebagian besar bursa perdagangan crypto biasanya buka 24/7), jadi kita harus menilai apakah garis K saat ini dekat dengan waktu tertentu ketika kita harus berhenti berdagang atau istirahat. Jika dekat dengan waktu penutupan garis K, tutup semua posisi. Jika tidak, lanjutkan strategi.

function main() {
    $.CTA("this_week", function(st) {

        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price

        var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
        var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
    })
}

Seperti yang ditunjukkan di atas:

Garis 8: dapatkan objek atribut timestamp K baris dan kemudian buat objek waktu ((new Date (timestamp)).

Garis 9: Hitung jam dan menit sesuai dengan objek waktu, dan tentukan apakah waktu garis K saat ini adalah 14:45.

  • Dapatkan data posisi

Informasi posisi adalah kondisi yang sangat penting dalam strategi perdagangan kuantitatif. Ketika kondisi perdagangan ditetapkan, perlu untuk menilai apakah akan menempatkan pesanan dengan status posisi dan jumlah posisi. Misalnya ketika kondisi untuk membuka posisi panjang ditetapkan, jika ada posisi holding, tidak menempatkan pesanan; jika tidak ada posisi holding, menempatkan pesanan. seperti ini:

function main() {
    $.CTA("this_week", function(st) {

        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price

        var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
        var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours

        var mp = st.position.amount; // get the holding position information

    })
}

Seperti yang ditunjukkan di atas:

Garis 11: Dapatkan status posisi saat ini. Jika ada posisi panjang, nilainya adalah 1; jika ada posisi pendek, nilainya adalah -1; jika tidak ada posisi, nilainya adalah 0.

  • Dapatkan data Bollinger Band

Selanjutnya kita perlu menghitung nilai rel atas, tengah dan bawah dari indikator Bollinger Band. kita perlu mendapatkan array Boolean terlebih dahulu, dan kemudian mendapatkan nilai rel atas, tengah, dan bawah dari array ini. di FMZ quant tool, sangat sederhana untuk mendapatkan array Boolean, hanya hubungi Bollinger Band API secara langsung, itu adalah array dua dimensi.

adalah mudah untuk memahami array dua dimensi, yang merupakan array dalam array. urutan untuk mendapatkan nilai adalah: pertama mendapatkan array yang ditentukan dalam array, dan kemudian mendapatkan elemen yang ditentukan dari array yang ditentukan, seperti yang ditunjukkan di bawah ini:

var arr = [[100, 200, 300],[10,20,30],[1,2,3]]; // this is a two-dimensional array
var test = arr[0]; //first obtain the specified array in the array and assign the value to variable "test"
var demo1 = test[0]; //then get a value from the test array
demo1; // the result is : 100

var demo2 = arr[0][0]; // you also can write like this
demo2; // the result is the same : 100

Di bawah ini, dari baris ke-13 sampai ke-19 mendapatkan bagian pengkodean rel Bollinger Band atas, tengah dan bawah, Di mana baris ke-13 menggunakan alat FMZ Quant API, yang dapat mengakses array Bollinger band secara langsung; baris ke-14 sampai baris ke-16 memperoleh array dua dimensi masing-masing untuk array rel atas, tengah dan bawah; baris ke-17 sampai baris ke-19 mendapatkan nilai spesifik dari array rel atas, tengah, dan bawah.

function main() {
    $.CTA("this_week", function(st) {

        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price

        var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
        var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours

        var mp = st.position.amount; // get the holding position information

        var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
        var upLine = boll[0]; // get the up-rail array
        var midLine = boll[1]; // get the middle-rail array
        var downLine = boll[2]; // get the lower-rail array
        var upPrice = upLine[upLine.length - 2];  // get the previous K-line upper rail value
        var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
        var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value

    })
}

Tahap 3: pemesanan dan perdagangan

Dengan data di atas, kita dapat menulis logika trading dan bagian penempatan order sekarang. juga sangat sederhana, yang paling umum digunakan adalah pernyataan if, yang dapat dijelaskan sebagai: jika kondisi 1 dan kondisi 2 benar, tempatkan order; jika kondisi 3 atau kondisi 4 benar, tempatkan order. seperti yang ditunjukkan di bawah ini:

function main() {
    $.CTA("this_week", function(st) {

        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price

        var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
        var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours

        var mp = st.position.amount; // get the holding position information

        var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
        var upLine = boll[0]; // get the up-rail array
        var midLine = boll[1]; // get the middle-rail array
        var downLine = boll[2]; // get the lower-rail array
        var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
        var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
        var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value

        if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
        if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
        if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
        if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.

    })
}

Pada gambar di atas, baris 21 sampai 24 adalah bagian dari kode logika perdagangan dan penempatan order. dari atas ke bawah mereka adalah: penutupan posisi panjang, penutupan posisi pendek, posisi panjang terbuka dan posisi pendek terbuka.

Ambil posisi open long sebagai contoh. Ini adalah pernyataan if. Jika hanya satu baris kode yang dijalankan dalam pernyataan ini, kurung keriting " {} " dapat dihilangkan. Pernyataan diterjemahkan ke dalam teks yang berarti: jika posisi saat ini adalah 0 dan harga penutupan lebih besar dari rel atas, dan waktu k-line tidak 14:45, maka " return 1 "

Anda mungkin menemukan bahwa baris-baris ini memiliki " return 1 " dan " return -1 ", yang merupakan format tetap, yang berarti: jika itu adalah arah pembelian, tulis " return 1 "; jika itu adalah arah penjualan, tulis " return -1 ".

Kode Strategi Lengkap

Pada titik ini, kode strategi lengkap ditulis. Jika kerangka kerja perdagangan, data perdagangan, logika perdagangan dan penempatan pesanan ditulis secara terpisah, itu sangat sederhana? Berikut ini adalah seluruh kode strategi ini:

function main() {
    $.CTA("this_week", function(st) {
        var r = st.records; // get the k line data
        if (r.length < 20) return; // filter the length of k line data
        var close = r[r.length - 2].Close; // get the previous k line closing price
        var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
        var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
        var mp = st.position.amount; // get the holding position information
        var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
        var upLine = boll[0]; // get the up-rail array
        var midLine = boll[1]; // get the middle-rail array
        var downLine = boll[2]; // get the lower-rail array
        var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
        var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
        var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
        if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
        if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
        if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
        if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.
    })
}

Ada dua hal yang perlu diperhatikan:

  1. Cobalah untuk (tetapi tidak harus) menulis logika strategi saat kondisi K-line saat ini ditetapkan, kemudian menempatkan order pada k-line berikutnya. atau kondisi k-line sebelumnya ditetapkan, menempatkan order pada k-line saat ini, dengan cara ini, hasil dari backtest dan kinerja pasar nyata tidak jauh berbeda.

  2. Secara umum, logika posisi penutupan harus ditulis di depan logika posisi pembukaan. Tujuan dari ini adalah untuk mencoba membuat logika strategi memenuhi harapan Anda. Misalnya, jika logika strategi hanya memenuhi situasi di mana ia perlu melakukan arah yang berlawanan dari perdagangan setelah hanya menutup posisi, aturan situasi semacam ini adalah untuk menutup posisi pertama dan kemudian membuka posisi baru. Jika kita menulis logika posisi penutupan di depan logika posisi pembukaan, itu akan sempurna memenuhi aturan ini.

Untuk meringkas

Di atas kita telah mempelajari setiap langkah pengembangan strategi perdagangan kuantitatif intraday yang lengkap, termasuk: pengenalan strategi, metode perhitungan indikator Bollinger, logika strategi, kondisi perdagangan, implementasi kode strategi, dll. Melalui kasus strategi ini, kita tidak hanya akrab dengan metode pemrograman alat FMZ Quant, tetapi juga dapat membangun beberapa strategi lain yang disesuaikan sesuai dengan template ini.

Strategi perdagangan kuantitatif tidak lebih dari ringkasan pengalaman atau sistem perdagangan subjektif. Jika kita menuliskan pengalaman atau sistem yang digunakan dalam perdagangan subjektif sebelum menulis strategi kuantitatif, dan kemudian menerjemahkannya ke dalam kode satu per satu, Anda akan menemukan bahwa menulis strategi kuantitatif akan jauh lebih mudah.

Pemberitahuan bagian berikutnya

Dalam pengembangan strategi perdagangan kuantitatif, jika hanya bisa memilih satu bahasa pemrograman, tanpa ragu, itu harus Python. Dari mendapatkan data untuk backtesting, bahkan bagian penempatan pesanan, Python telah mencakup seluruh rantai bisnis. Dalam bidang investasi kuantitatif keuangan, Python telah menempati posisi yang sangat penting, bagian berikutnya dari kursus kita akan mulai belajar bahasa Python.

Latihan setelah sekolah

  1. Cobalah untuk menggunakan pengetahuan dalam bagian ini untuk menerapkan strategi rata-rata bergerak ganda.

  2. Cobalah untuk menerapkan strategi indikator KDJ menggunakan bahasa JavaScript pada platform FMZ Quant.


Lebih banyak