3
fokus pada
1444
Pengikut

Pengenalan terperinci tentang strategi frekuensi tinggi untuk mata uang digital

Dibuat di: 2023-03-10 10:09:13, diperbarui pada: 2024-11-11 22:39:27
comments   13
hits   11533

Pengenalan terperinci tentang strategi frekuensi tinggi untuk mata uang digital

[TOC] Saya menulis artikel pada tahun 2020 yang memperkenalkan strategi frekuensi tinggi, https://www.fmz.com/digest-topic/6228. Meskipun mendapat banyak perhatian, namun tidak ditulis secara mendalam. Lebih dari dua tahun telah berlalu dan pasar telah berubah. Setelah artikel itu diterbitkan, strategi frekuensi tinggi saya mampu menghasilkan uang secara stabil dalam waktu lama, tetapi keuntungannya lambat laun menurun dan bahkan terhenti di satu titik. Dalam beberapa bulan terakhir, saya telah menghabiskan banyak upaya untuk renovasi dan saat ini saya mampu menghasilkan sejumlah uang. Artikel ini akan memperkenalkan ide-ide saya untuk strategi frekuensi tinggi dan beberapa kode yang disederhanakan secara lebih rinci, yang dapat menjadi titik awal diskusi. Semua orang dipersilakan untuk berkomunikasi dan memberikan masukan.

Kondisi untuk perdagangan frekuensi tinggi

  • Untuk akun yang menerima potongan harga, dengan mengambil Binance sebagai contoh, potongan harga maker saat ini adalah 0,5% dari 100.000. Jika volume transaksi harian adalah 100 juta U, potongan harga akan menjadi 5.000 U. Tentu saja, biaya pengambil masih didasarkan pada tarif VIP, jadi jika strategi tidak mengharuskan penerimaan pesanan, level VIP akan berdampak kecil pada strategi frekuensi tinggi. Secara umum, berbagai tingkat pertukaran memiliki nilai rabat yang berbeda, dan mengharuskan mempertahankan volume transaksi yang lebih tinggi. Dahulu kala, ketika pasar beberapa mata uang berfluktuasi sangat besar, masih ada keuntungan bahkan tanpa rabat. Dengan meningkatnya sirkulasi internal, rabat menyumbang sebagian besar keuntungan, dan bahkan sepenuhnya bergantung pada rabat. Pedagang frekuensi tinggi mengejar Nilai tertinggi.

  • kecepatan. Alasan mengapa strategi frekuensi tinggi disebut frekuensi tinggi adalah karena sangat cepat. Bergabung dengan server colo bursa untuk mendapatkan latensi terendah dan koneksi paling stabil juga menjadi salah satu syarat sirkulasi internal. Konsumsi waktu internal dari strategi tersebut juga harus serendah mungkin. Artikel ini akan memperkenalkan kerangka kerja websocket yang saya gunakan, yang menggunakan eksekusi bersamaan.

  • Pasar yang tepat. Perdagangan frekuensi tinggi dikenal sebagai permata perdagangan kuantitatif. Saya yakin banyak pedagang terprogram telah mencobanya, tetapi kebanyakan orang mungkin berhenti karena mereka tidak menghasilkan uang dan tidak dapat menemukan cara untuk meningkatkannya. Alasan utamanya mungkin bahwa mereka mencari jalan yang salah. Pasar perdagangan. Pada tahap awal strategi, seseorang harus mencari pasar yang relatif mudah untuk menghasilkan uang dari perdagangan, sehingga akan ada keuntungan dan umpan balik mengenai perbaikan, yang akan kondusif bagi kemajuan strategi. Jika Anda memulai di pasar yang paling kompetitif dan bersaing dengan banyak pesaing potensial, Anda akan kehilangan uang tidak peduli seberapa keras Anda mencoba dan Anda tidak akan mampu bertahan lebih lama lagi. Saya merekomendasikan pasangan perdagangan kontrak berjangka yang baru saja terdaftar. Saat ini, tidak banyak pesaing, terutama ketika volume perdagangan relatif besar. Ini adalah waktu termudah untuk menghasilkan uang. BTC dan ETH memiliki volume perdagangan terbesar dan transaksi paling aktif, tetapi keduanya juga paling sulit untuk bertahan.

  • Hadapi persaingan secara langsung. Setiap pasar perdagangan berubah secara dinamis. Tidak ada strategi perdagangan yang dapat berhasil sekali dan untuk selamanya. Hal ini bahkan lebih jelas terlihat dalam perdagangan frekuensi tinggi. Memasuki pasar ini berarti bersaing secara langsung dengan sekelompok pedagang yang paling cerdas dan paling tekun. Dalam pasar yang jumlah-nolnya, makin banyak Anda memperoleh penghasilan, makin sedikit penghasilan orang lain. Semakin lambat Anda masuk, akan semakin sulit. Mereka yang sudah ada di pasar juga harus terus meningkatkan kemampuan karena mereka dapat tersingkir kapan saja. Tiga atau empat tahun lalu seharusnya menjadi kesempatan terbaik. Akhir-akhir ini, aktivitas pasar mata uang digital secara keseluruhan telah menurun, dan sekarang sangat sulit bagi pemula untuk terlibat dalam perdagangan frekuensi tinggi.

Prinsip frekuensi tinggi

Ada banyak jenis strategi frekuensi tinggi

  • Lindung nilai frekuensi tinggi: menemukan peluang lindung nilai melalui bursa ini atau bursa lainnya, dan memanfaatkan kecepatan untuk mengambil pesanan terlebih dahulu dan mendapatkan keuntungan
  • Tren frekuensi tinggi, untung dari tren jangka pendek
  • Pembuat pasar menempatkan pesanan pada sisi beli dan jual, mengendalikan posisi mereka, dan memperoleh laba dengan mendapatkan komisi.
  • Masih banyak lagi yang tidak diuraikan satu per satu.

Strategi saya adalah gabungan dari tren dan penentu pasar. Pertama-tama saya menentukan tren, kemudian menempatkan pesanan, dan segera menempatkan pesanan jual setelah transaksi selesai. Saya tidak memiliki posisi inventaris. Kode strategi diperkenalkan di bawah ini.

Kerangka Strategi

Kode berikut ini didasarkan pada arsitektur dasar kontrak berjangka panjang Binance dan terutama berlangganan informasi pasar perdagangan arus pesanan mendalam websocket dan informasi posisi. Karena informasi pasar dan informasi akun didaftarkan secara terpisah, maka perlu menggunakan read(-1) secara terus-menerus untuk menentukan apakah informasi terkini diperoleh. EventLoop(1000) digunakan di sini untuk menghindari loop tak terbatas secara langsung dan mengurangi beban sistem. EventLoop(1000) akan diblokir hingga wss atau tugas bersamaan kembali, dengan batas waktu 1000 ms.

var datastream = null
var tickerstream = null
var update_listenKey_time = 0

function ConncetWss(){
    if (Date.now() - update_listenKey_time < 50*60*1000) {
        return
    }
    if(datastream || tickerstream){
        datastream.close()
        tickerstream.close()
    }
    //需要APIKEY
    let req = HttpQuery(Base+'/fapi/v1/listenKey', {method: 'POST',data: ''}, null, 'X-MBX-APIKEY:' + APIKEY) 
    let listenKey = JSON.parse(req).listenKey
    datastream = Dial("wss://fstream.binance.com/ws/" + listenKey + '|reconnect=true', 60)
    //Symbols是设定的交易对
    let trade_symbols_string = Symbols.toLowerCase().split(',')
    let wss_url = "wss://fstream.binance.com/stream?streams="+trade_symbols_string.join(Quote.toLowerCase()+"@aggTrade/")+Quote.toLowerCase()+"@aggTrade/"+trade_symbols_string.join(Quote.toLowerCase()+"@depth20@100ms/")+Quote.toLowerCase()+"@depth20@100ms"
    tickerstream = Dial(wss_url+"|reconnect=true", 60)
    update_listenKey_time = Date.now()
}

function ReadWss(){
    let data = datastream.read(-1)
    let ticker = tickerstream.read(-1)
    while(data){
        data = JSON.parse(data)
        if (data.e == 'ACCOUNT_UPDATE') {
            updateWsPosition(data)
        }
        if (data.e == 'ORDER_TRADE_UPDATE'){
            updateWsOrder(data)
        }        
        data = datastream.read(-1)
    }
    while(ticker){
        ticker = JSON.parse(ticker).data
        if(ticker.e == 'aggTrade'){
            updateWsTrades(ticker)
        }
        if(ticker.e == 'depthUpdate'){
            updateWsDepth(ticker)
        }
        ticker = tickerstream.read(-1)
    }
    makerOrder()
}

function main() {
    while(true){
        ConncetWss()
        ReadWss()
        worker()
        updateStatus()
        EventLoop(1000)
    }
}

Indikator Strategi

Seperti disebutkan sebelumnya, strategi frekuensi tinggi saya mengharuskan penentuan tren sebelum melakukan pembelian dan penjualan. Tren jangka pendek terutama dinilai berdasarkan data transaksi setiap transaksi, yaitu aggTrade dalam langganan, yang mencakup arah transaksi, harga, kuantitas, waktu transaksi, dll. Acuan utama untuk membeli dan menjual adalah kedalaman dan volume perdagangan. Berikut ini adalah pengenalan terperinci tentang indikator-indikator yang perlu diperhatikan. Sebagian besar indikator dibagi menjadi dua kelompok: beli dan jual, dan dihitung secara dinamis dalam rentang waktu tertentu. Rentang waktu strategi saya adalah dalam 10 detik.

  • Volume transaksi rata-rata setiap transaksi. Volume transaksi adalah kumpulan berbagai order dengan arah dan harga yang sama dalam 100 ms, yang mencerminkan ukuran order beli dan jual. Data ini memiliki bobot yang lebih tinggi. Dapat diasumsikan bahwa jika volume transaksi order beli lebih besar daripada order jual, maka pasar digerakkan oleh Pembeli.
  • Frekuensi order atau interval order juga didasarkan pada data transaksi. Rata-rata volume transaksi sebelumnya tidak mempertimbangkan konsep waktu dan tidak sepenuhnya akurat. Jika volume order dalam satu arah rata-rata kecil tetapi frekuensinya tinggi, itu juga berkontribusi untuk Kekuatan arah ini. Volume rata-rata*Frekuensi pesanan menunjukkan volume total pada interval tetap dan dapat digunakan untuk perbandingan langsung. Peristiwa kedatangan pesanan sesuai dengan distribusi Poisson, yang dapat digunakan untuk memperkirakan jumlah total pesanan yang tiba dalam interval waktu tertentu dan memberikan referensi untuk lokasi pesanan yang tertunda.
  • Rata-rata spread pasar relatif mudah dipahami, yaitu selisih jual dikurangi selisih beli. Sebagian besar harga pasar saat ini memiliki perbedaan harga sebesar 1 tick. Jika perbedaan harga menjadi lebih besar, sering kali berarti tren pasar telah muncul.
  • Harga beli dan jual rata-rata dihitung dengan cara merata-ratakan harga setiap transaksi dan membandingkannya dengan harga terkini. Jika harga pesanan beli terkini lebih besar daripada harga pesanan beli rata-rata, dapat ditentukan secara awal bahwa terobosan telah terjadi.

Logika Strategi

Menentukan tren jangka pendek

//bull代表短期看涨,bear短期看跌
let bull =  last_sell_price > avg_sell_price && last_buy_price > avg_buy_price &&
            avg_buy_amount / avg_buy_time > avg_sell_amount / avg_sell_time;
let bear =  last_sell_price < avg_sell_price && last_buy_price < avg_buy_price && 
            avg_buy_amount / avg_buy_time < avg_sell_amount / avg_sell_time;

Apabila harga jual terakhir lebih besar dari harga jual rata-rata, harga beli terakhir lebih besar dari harga beli rata-rata, dan nilai order beli interval tetap lebih besar dari nilai order jual, maka dinilai bullish jangka pendek. . Sebaliknya, ia bersikap bearish.

Harga pesanan

function updatePrice(depth, bid_amount, ask_amount) {

    let buy_price = 0
    let sell_price = 0
    let acc_bid_amount = 0
    let acc_ask_amount = 0

    for (let i = 0; i < Math.min(depth.asks.length, depth.bids.length); i++) {
        acc_bid_amount += parseFloat(depth.bids[i][1])
        acc_ask_amount += parseFloat(depth.asks[i][1])
        if (acc_bid_amount > bid_amount  && buy_price == 0) {
            buy_price = parseFloat(depth.bids[i][0]) + tick_size
        }
        if (acc_ask_amount > ask_amount  && sell_price == 0) {
            sell_price = parseFloat(depth.asks[i][0]) - tick_size
        }
        if (buy_price > 0 && sell_price > 0) {
            break
        }
    }
    return [buy_price, sell_price]
}

Di sini kita masih mengadopsi ide lama dan mengulang kedalaman ke jumlah yang dibutuhkan. Di sini kita berasumsi bahwa order beli 10 koin dapat dieksekusi dalam waktu 1 detik. Tanpa mempertimbangkan order tertunda baru, harga order jual ditetapkan ke posisi di mana pesanan beli 10 koin akan berhasil. Anda perlu mengatur sendiri jangka waktu spesifiknya.

Jumlah pesanan

let buy_amount = Ratio * avg_sell_amount / avg_sell_time
let sell_amount = Ratio * avg_buy_amount / avg_buy_time

Rasio adalah singkatan dari Rasio Tetap yang berarti jumlah pesanan beli merupakan rasio tetap dari jumlah pesanan jual terkini. Strategi ini dapat menyesuaikan ukuran pesanan secara adaptif berdasarkan aktivitas pembelian dan penjualan saat ini.

Kondisi pesanan

if(bull && (sell_price-buy_price) > N * avg_diff) {
    trade('buy', buy_price, buy_amount)
}else if(position.amount < 0){
    trade('buy', buy_price, -position.amount)
}
if(bear && (sell_price-buy_price) >  N * avg_diff) {
    trade('sell', sell_price, sell_amount)
}else if(position.amount > 0){
    trade('sell', sell_price, position.amount)
}

Di antara mereka, avg_diff adalah perbedaan harga pasar rata-rata. Perintah beli hanya akan ditempatkan ketika spread bid-ask lebih besar dari kelipatan tertentu dari nilai ini dan trennya bullish. Jika Anda menahan perintah short, posisi tersebut juga akan ditutup pada saat ini untuk menghindari penahanan pesanan jangka panjang. Anda dapat menempatkan order pembuat saja untuk memastikan order yang tertunda dieksekusi. Dan Anda dapat menggunakan ID pesanan khusus Binance, jadi Anda tidak perlu menunggu pesanan dikembalikan.

Arsitektur serentak

var tasks = []
var jobs = []

function worker(){
    let new_jobs = []
    for(let i=0; i<tasks.length; i++){
        let task = tasks[i]
        jobs.push(exchange.Go.apply(this, task.param))
    }
    _.each(jobs, function(t){
        let ret = t.wait(-1)
        if(ret === undefined){
            new_jobs.push(t)//未返回的任务下次继续等待
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
需要的任务参数写在param里
tasks.push({'type':'order','param': ["IO", "api", "POST","/fapi/v1/order",
        "symbol="+symbol+Quote+"&side="+side+"&type=LIMIT&timeInForce=GTX&quantity="+
        amount+"&price="+price+"&newClientOrderId=" + UUID() +"&timestamp="+Date.now()]})
*/

Pemantauan data

  • Penundaan. Pentingnya kecepatan strategi frekuensi tinggi telah ditekankan. Berbagai penundaan harus dipantau dan dicatat dalam strategi, seperti penempatan pesanan, pembatalan pesanan, pengembalian posisi, kedalaman, aliran pesanan, posisi, siklus keseluruhan, dll. Setiap penundaan yang tidak normal harus segera diperiksa dan cara harus ditemukan untuk memperpendek penundaan strategi keseluruhan.
  • Proporsi volume perdagangan, statistik menunjukkan proporsi volume perdagangan dalam total volume perdagangan. Jika proporsinya rendah, masih ada ruang untuk perbaikan. Pada waktu puncak, ada kemungkinan strategi menyumbang lebih dari 10% total volume perdagangan.
  • Tingkat pengembalian penutupan, tingkat pengembalian penutupan rata-rata statistik, adalah referensi paling penting untuk menilai apakah strategi itu efektif.
  • Rasio komisi adalah rasio komisi terhadap total pendapatan, yang mencerminkan ketergantungan strategi pada komisi. Pertukaran memiliki tingkat potongan harga yang berbeda-beda, dan strategi yang tidak menguntungkan dapat menjadi menguntungkan jika potongan harga satu tingkat lebih tinggi.
  • Proporsi order yang gagal. Order hanya ditempatkan dan dieksekusi. Karena keterlambatan dalam menempatkan order, order mungkin tidak ditempatkan. Jika proporsi ini tinggi, berarti kecepatan strategi tidak menguntungkan.
  • Proporsi order yang dieksekusi. Platform sering kali memiliki persyaratan untuk rasio eksekusi. Jika terlalu rendah, berarti strategi tersebut terlalu sering membatalkan order dan perlu diselesaikan.
  • Jarak rata-rata antara order beli dan jual. Data ini mencerminkan jarak antara order strategi dan harga pasar. Dapat dilihat bahwa sebagian besar order masih menempati posisi beli satu dan jual satu.

Saran lainnya

  • Dalam perdagangan berbagai mata uang, strategi frekuensi tinggi dalam artikel ini hanya mengacu pada pasar satu bursa, satu mata uang, dan satu pasar. Strategi ini memiliki keterbatasan besar dan tidak menguntungkan dalam banyak kasus dan untuk sebagian besar mata uang. Namun, strategi ini mustahil untuk memprediksi mata uang mana yang akan menguntungkan di masa mendatang. , sehingga Anda dapat memperdagangkan beberapa atau bahkan semua mata uang dan tidak kehilangan peluang apa pun. Bahkan di bawah batas frekuensi pertukaran, robot dapat memperdagangkan beberapa pasangan perdagangan. Tentu saja, untuk kecepatan terbaik, satu sub-akun dapat memperdagangkan satu pasangan perdagangan, dan satu server sesuai dengan satu robot, tetapi biayanya akan jauh lebih tinggi .
  • Tentukan jumlah pesanan dan ketentuan pesanan berdasarkan tingkat pengembalian. Perdagangan berbagai mata uang akan mengakibatkan tingginya biaya eksperimen. Jika pemantauan tidak menguntungkan, gunakan volume perdagangan minimum dan kurangi frekuensi perdagangan hingga strategi memantau tingkat pengembalian positif secara dinamis, lalu tingkatkan volume perdagangan secara bertahap untuk meningkatkan laba.
  • Dapatkan informasi lebih lanjut. Fitur lain dari perdagangan frekuensi tinggi adalah memproses data dalam jumlah lebih besar dan menggunakan lebih banyak informasi. Semua informasi pasar dari satu pasangan perdagangan dalam satu bursa harus dirujuk, dan swap terus-menerus juga dapat merujuk ke data spot, serta data pasangan perdagangan di bursa lain, atau bahkan data mata uang lain. Semakin banyak data, semakin lebih baik. Keuntungan yang sesuai juga lebih besar. Misalnya, Binance dapat berlangganan informasi pending order terbaik menurut Symbol. Karena kedalaman dan aliran order terpendek adalah 100 ms, hanya ini yang bersifat real-time, yang sangat berharga untuk strategi frekuensi tinggi.
  • Server Binance berada di AWS Tokyo, sedangkan server bursa lainnya berbeda. Silakan hubungi staf teknis bursa untuk keterangan lebih lanjut.
  • Kode strategi dalam artikel ini hanyalah contoh kode yang disederhanakan, yang menghapus banyak detail yang membosankan tetapi penting. Indikator yang digunakan hanya untuk referensi dan tidak boleh digunakan secara langsung. Ada banyak detail yang perlu diperhatikan saat benar-benar menjalankan strategi frekuensi tinggi, dan dibutuhkan kesabaran untuk memodifikasi dan memperbaikinya.