Pengantar Strategi Perdagangan Frekuensi Tinggi Rincian untuk Cryptocurrencies

Penulis:Penemu Kuantitas, Dibuat: 2023-03-19 19:56:11, Diperbarui: 2023-09-18 19:55:58

img

Saya menulis sebuah artikel pada tahun 2020 memperkenalkan strategi perdagangan frekuensi tinggi (https://www.fmz.com/digest-topic/6228Meskipun mendapat perhatian, itu tidak sangat mendalam. Dua setengah tahun telah berlalu sejak itu, dan pasar telah berubah. Setelah saya menerbitkan artikel itu, strategi frekuensi tinggi saya mampu menghasilkan keuntungan yang stabil untuk waktu yang lama, tetapi keuntungan secara bertahap menurun dan bahkan berhenti pada satu titik. Dalam beberapa bulan terakhir, saya telah meluangkan waktu untuk memperbaikinya, dan masih dapat menghasilkan beberapa keuntungan kecil.

Kondisi untuk perdagangan frekuensi tinggi

Rekening rebate Komisi

menggunakan Binance sebagai contoh, saat ini menawarkan rebate pembuat sebesar 0,05% untuk setiap 100.000 unit yang diperdagangkan. Jika volume perdagangan harian adalah 100 juta U, rebate adalah 5.000 U. Tentu saja, biaya penerima masih tergantung pada tingkat VIP, jadi jika strategi tidak perlu menerima pesanan, tingkat VIP memiliki sedikit efek pada strategi frekuensi tinggi.

Kecepatan

Perdagangan frekuensi tinggi disebut demikian karena kecepatan yang cepat. Bergabung dengan server colocation bursa perdagangan dan mendapatkan latensi terendah dan koneksi paling stabil telah menjadi salah satu kondisi persaingan. Waktu pemrosesan internal strategi juga harus sesingkat mungkin.

Pasar yang cocok

Perdagangan frekuensi tinggi dianggap sebagai permata di mahkota perdagangan kuantitatif, dan saya percaya bahwa banyak pedagang algoritmik telah mencobanya, tetapi kebanyakan orang seharusnya berhenti karena mereka tidak bisa menghasilkan uang dan tidak dapat menemukan cara untuk meningkatkan. Alasan utama mungkin karena mereka memilih pasar perdagangan yang salah. Pada tahap awal strategi, pasar yang relatif mudah harus ditargetkan untuk perdagangan untuk menghasilkan keuntungan dan menerima umpan balik untuk perbaikan, yang kondusif bagi kemajuan strategi. Jika Anda memulai di pasar yang paling kompetitif dan bersaing dengan banyak lawan, Anda akan kehilangan uang tidak peduli seberapa keras Anda mencoba, dan Anda akan segera menyerah. Saya merekomendasikan memulai dengan pasangan perdagangan kontrak abadi yang baru diluncurkan, di mana ada lebih sedikit pesaing, terutama yang memiliki volume perdagangan yang relatif besar, sehingga lebih mudah menghasilkan uang. BTC dan ETH memiliki volume perdagangan tertinggi dan paling aktif, tetapi mereka juga paling sulit untuk bertahan hidup.

Menghadapi persaingan secara langsung

Pasar untuk setiap perdagangan terus berubah, dan tidak ada strategi perdagangan yang bisa menjadi solusi satu kali. Ini bahkan lebih jelas dalam perdagangan frekuensi tinggi, di mana memasuki pasar berarti bersaing langsung dengan pedagang paling cerdas dan paling rajin. Dalam pasar permainan jumlah nol, semakin banyak yang Anda hasilkan, semakin sedikit yang lainnya hasilkan. Semakin lambat Anda masuk, semakin sulit, dan mereka yang sudah berada di pasar harus terus meningkat dan dapat dihilangkan kapan saja. Tiga atau empat tahun yang lalu mungkin adalah kesempatan terbaik, tetapi dengan penurunan keseluruhan aktivitas di pasar mata uang digital baru-baru ini, menjadi sangat sulit bagi pemula untuk mulai melakukan perdagangan frekuensi tinggi.

Prinsip Perdagangan Frekuensi Tinggi

Ada beberapa strategi perdagangan frekuensi tinggi, seperti arbitrage frekuensi tinggi, yang melibatkan menemukan peluang arbitrage melalui ini atau bursa lain, memanfaatkan kesempatan untuk memakan pesanan di depan yang lain dan menghasilkan keuntungan dengan keuntungan kecepatan; perdagangan tren frekuensi tinggi, yang melibatkan keuntungan dari tren jangka pendek; dan pembuatan pasar, yang melibatkan penempatan pesanan di kedua sisi perdagangan beli dan jual, mengendalikan posisi dengan baik dan menghasilkan keuntungan melalui potongan komisi. Strategi saya menggabungkan tren dan pembuatan pasar, pertama mengidentifikasi tren dan kemudian menempatkan pesanan, menjual segera setelah eksekusi dan tidak memegang posisi persediaan. Di bawah ini adalah pengenalan kode strategi.

Arsitektur Strategi

Kode berikut didasarkan pada arsitektur dasar kontrak abadi Binance dan terutama berlangganan perdagangan aliran pesanan kedalaman websocket dan informasi posisi. Karena data pasar dan informasi akun berlangganan secara terpisah, membaca (-1) perlu terus digunakan untuk menentukan apakah informasi terbaru telah diperoleh. Di sini, EventLoop (1000) digunakan untuk menghindari loop mati langsung dan mengurangi beban sistem. EventLoop (1000) memblokir sampai ada wss atau pengembalian tugas bersamaan, dengan timeout 1000ms.

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()
    }
    // need 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 is the pair of symbol
    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 yang disebutkan sebelumnya, strategi frekuensi tinggi saya memerlukan pertama mengidentifikasi tren sebelum melakukan perdagangan beli dan jual. Menghakimi tren jangka pendek terutama didasarkan pada data transaksi, yaitu, aggTrade yang terdaftar, yang mencakup arah, harga, kuantitas, dan waktu transaksi. Perdagangan beli dan jual terutama mengacu pada kedalaman dan volume transaksi. Berikut adalah indikator rinci yang perlu dipertimbangkan, yang sebagian besar dibagi menjadi dua kelompok untuk membeli dan menjual dan dihitung secara dinamis dalam jendela waktu tertentu. Jendela waktu strategi saya adalah dalam 10 detik.

  • Volume perdagangan rata-rata per transaksi, yang merupakan koleksi transaksi dalam arah yang sama, harga, dan pesanan yang berbeda dalam 100ms. Ini mencerminkan ukuran pesanan beli dan jual dan memiliki bobot yang tinggi. Jika volume perdagangan pesanan beli lebih besar dari pesanan jual, dapat diasumsikan bahwa pasar didominasi oleh pembeli.
  • Frekuensi pesanan atau interval pesanan, juga berdasarkan data transaksi, volume transaksi rata-rata sebelumnya tidak mempertimbangkan konsep waktu dan tidak sepenuhnya akurat. Jika pesanan dalam satu arah memiliki volume transaksi rata-rata kecil tetapi frekuensi tinggi, itu juga berkontribusi pada kekuatan arah itu. Volume transaksi rata-rata * frekuensi pesanan mewakili total volume transaksi pada interval yang tetap dan dapat digunakan untuk perbandingan langsung.
  • Spread rata-rata, yang merupakan perbedaan antara harga jual dan harga beli. Harga beli dan jual rata-rata, yang menghitung harga rata-rata transaksi beli dan jual masing-masing dan membandingkannya dengan harga terakhir.

Logika Strategi

Menghakimi Tren Jangka Pendek

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;

Jika harga jual terakhir lebih besar dari harga jual rata-rata dan harga jual terakhir lebih besar dari harga jual rata-rata dan nilai pesanan beli lebih besar dari nilai pesanan jual pada interval tertentu, maka dianggap sebagai pasar bullish jangka pendek.

Menempatkan Pesan

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, metode lama untuk mengulangi kedalaman ke jumlah yang diperlukan masih digunakan. Dengan asumsi bahwa pesanan beli yang dapat dieksekusi untuk 10 koin dalam waktu 1 detik dan tanpa mempertimbangkan situasi pesanan baru, harga jual ditetapkan pada posisi di mana pesanan beli

dengan volume 10 koin dapat memukul. ukuran jendela waktu tertentu perlu diatur oleh diri sendiri.

Jumlah pesanan

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

Rasio ini mewakili proporsi tetap dari jumlah pesanan jual terakhir, mewakili jumlah pesanan beli sebagai proporsi tetap dari jumlah pesanan jual terakhir. Ini memungkinkan strategi untuk menyesuaikan ukuran pesanan sesuai dengan aktivitas pembelian dan penjualan saat ini.

Ketentuan Pemesanan

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 rata-rata dalam spread, dan hanya ketika perbedaan beli dan jual dalam menempatkan pesanan lebih besar dari kelipatan tertentu dari nilai ini dan pasar bullish akan pesanan beli ditempatkan. Jika memegang posisi pendek, posisi juga akan ditutup untuk menghindari memegang posisi untuk waktu yang lama. hanya pembuat pesanan dapat ditempatkan untuk memastikan bahwa pesanan dipenuhi, dan ID pesanan khusus dapat digunakan untuk menghindari menunggu pengembalian pesanan.

Arsitektur Simultan

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 = []
}

/*
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()]})
*/

Data yang Dipantau

  • Latensi: Pentingnya kecepatan strategi perdagangan frekuensi tinggi telah ditekankan. Strategi perlu memantau dan mencatat berbagai latensi, seperti penempatan pesanan, pembatalan pesanan, posisi kembali, kedalaman, aliran pesanan, siklus keseluruhan, dll. Setiap latensi abnormal perlu segera diselidiki dan cara untuk memperpendek keseluruhan strategi latensi harus ditemukan.
  • Proporsi volume: Statistik menunjukkan proporsi volume perdagangan terhadap total volume perdagangan. Jika proporsi rendah, masih ada ruang untuk perbaikan. Pada saat puncak, proporsi strategi dapat mencapai 10% atau lebih dari total volume perdagangan.
  • Tingkat keuntungan penutupan: Statistik menunjukkan rata-rata tingkat keuntungan penutupan, yang merupakan referensi terpenting untuk menilai apakah strategi tersebut efektif.
  • Rasio rebate: Statistik menunjukkan proporsi rebate terhadap total pendapatan, mencerminkan sejauh mana strategi bergantung pada rebate. Rasio kegagalan order: Order hanya ditempatkan dan diisi, tetapi karena keterlambatan dalam penempatan order, mereka mungkin tidak diisi.
  • Rasio eksekusi pesanan: Platform sering memiliki persyaratan untuk rasio eksekusi pesanan. Jika terlalu rendah, itu menunjukkan bahwa strategi membatalkan pesanan terlalu sering dan perlu diselesaikan. Jarak pesanan beli dan jual rata-rata: Data ini mencerminkan jarak antara penempatan pesanan strategi dan kedalaman pasar, dan sebagian besar pesanan masih menempati posisi pesanan beli dan jual.

Saran Lainnya

  • Perdagangan beberapa mata uang: Strategi frekuensi tinggi dalam artikel ini terbatas pada pertukaran tunggal, pasangan mata uang tunggal, dan kondisi pasar tunggal, dan memiliki keterkaitan penerapan. Sebagian besar mata uang tidak dapat menguntungkan, tetapi tidak mungkin untuk memprediksi mata uang mana yang akan menguntungkan di masa depan, sehingga perdagangan beberapa atau bahkan semua mata uang disarankan untuk tidak melewatkan peluang. Bahkan di bawah pembatasan frekuensi pertukaran, satu robot dapat memperdagangkan beberapa pasangan perdagangan. Tentu saja, untuk kecepatan terbaik, satu sub-akun dapat memperdagangkan satu pasangan perdagangan, satu server sesuai dengan satu robot, tetapi pendekatan ini akan memiliki biaya yang jauh lebih tinggi.
  • Menentukan ukuran pesanan dan kondisi berdasarkan profitabilitas. Perdagangan beberapa mata uang dapat mengakibatkan terlalu tinggi dari biaya mencoba, jadi jika pemantauan menunjukkan bahwa itu tidak menguntungkan, mengurangi frekuensi perdagangan dan menggunakan volume perdagangan minimum sampai strategi secara dinamis mendeteksi tingkat keuntungan positif dan kemudian secara bertahap meningkatkan volume perdagangan untuk meningkatkan profitabilitas.
  • Dapatkan informasi lebih lanjut: Karakteristik lain dari perdagangan frekuensi tinggi adalah bahwa ia menangani lebih banyak data dan menggunakan lebih banyak informasi. Semua data pasar untuk satu bursa dan pasangan mata uang harus dipertimbangkan, dan data abadi juga dapat merujuk pada data spot atau data untuk pasangan mata uang yang sama di bursa lain atau bahkan mata uang lain. Semakin banyak data, semakin besar keuntungan yang sesuai.

Berkaitan

Lebih banyak