3
fokus pada
1287
Pengikut

Sistem ujian belakang frekuensi tinggi berdasarkan transaksi melalui transaksi dan kecacatan ujian belakang K-line

Dicipta dalam: 2020-06-04 16:48:02, dikemas kini pada: 2024-12-10 20:32:01
comments   7
hits   4587

Sistem ujian belakang frekuensi tinggi berdasarkan transaksi melalui transaksi dan kecacatan ujian belakang K-line

saya di siniStrategi lindung nilai pelbagai mata wang Binance short over-rising long over-slumpingEnjin ujian belakang juga dikeluarkan pada masa yang sama. Laporan pertama mengesahkan keberkesanan strategi berdasarkan ujian belakang K-line selama satu jam. Walau bagaimanapun, masa dorman sebenar strategi awam ialah 1s, yang merupakan strategi frekuensi yang sangat tinggi Jelas sekali mustahil untuk mendapatkan hasil yang tepat dengan ujian belakang dengan K-line setiap jam. Kemudian ditambahUjian belakang garisan minitAkibatnya, keuntungan ujian belakang telah meningkat dengan banyak, tetapi masih mustahil untuk menentukan parameter yang harus digunakan dalam situasi peringkat kedua, dan pemahaman keseluruhan strategi tidak begitu jelas. Sebab utama adalah kelemahan penting ujian belakang berasaskan K-line.

Masalah dengan ujian belakang K-line

Pertama sekali, apakah K-line sejarah? Data K-line termasuk empat harga: pembukaan tinggi dan penutupan rendah, dua masa mula dan volum dagangan julat. Kebanyakan platform dan rangka kerja kuantitatif adalah berdasarkan ujian belakang K-line, dan platform kuantitatif FMZ juga menyediakan ujian belakang peringkat semak. Ujian belakang K-line adalah sangat pantas dan tidak ada masalah dalam kebanyakan kes, tetapi ia juga mempunyai kelemahan yang sangat serius, terutamanya apabila menguji balik strategi pelbagai pelbagai dan strategi frekuensi tinggi, hampir mustahil untuk membuat kesimpulan yang betul.

Yang pertama ialah isu masa Masa harga tertinggi dan terendah data K-line tidak diberikan, jadi tidak perlu mempertimbangkannya Tetapi harga pembukaan dan penutupan yang paling penting tidak bermula dari pembukaan dan masa tutup. Walaupun untuk produk dagangan yang kurang popular, selalunya tiada dagangan selama lebih daripada sepuluh saat Apabila kami menguji strategi berbilang produk, kami sering menganggap bahawa harga pembukaan dan penutupan mereka adalah serentak Ini juga merupakan asas untuk menguji semula harga penutup.

Bayangkan menggunakan garis minit untuk menguji arbitraj dua jenis Perbezaan harga biasanya 10 yuan Sekarang didapati bahawa pada 10:01, harga penutupan kontrak A ialah 100 dan kontrak B ialah 112. Perbezaan harga. ialah 12 yuan Jadi strategi mula melindung nilai Pada masa ini, perbezaan harga kembali, dan strategi memperoleh keuntungan pulangan sebanyak 2 yuan.

Situasi sebenar mungkin pada 10:00:45, kontrak A menjana urus niaga sebanyak 100 yuan, dan tiada urus niaga selepas itu Pada 10:00:58, kontrak B menghasilkan urus niaga sebanyak 112 yuan. kedua-dua harga tidak wujud, berapakah harga pasaran pada masa ini, dan berapa banyak perbezaan harga yang boleh diperolehi dengan melindung nilai? Tidak ada cara untuk mengetahui. Satu senario yang mungkin ialah: pada 10:00:58, harga bid-ask kontrak A ialah 101.9-102.1, dan tiada perbezaan harga 2 yuan sama sekali. Ini akan sangat mengelirukan pengoptimuman strategi kami.

Isu kedua ialah padanan. Padanan sebenar mengutamakan harga dan masa. Jika pembeli melebihi harga yang diminta, urus niaga secara amnya akan diselesaikan terus pada harga yang diminta. Jika tidak, ia akan memasuki buku pesanan dan menunggu. Data K-line jelas tidak mempunyai harga beli dan jual, dan adalah mustahil untuk mensimulasikan padanan pada tahap terperinci.

Akhir sekali, terdapat kesan strategi itu sendiri ke atas pasaran Jika ia adalah backtest modal kecil, kesannya tidak akan ketara. Tetapi jika jumlah dagangan menyumbang sebahagian besar, ia akan memberi kesan kepada pasaran. Bukan sahaja kegelinciran harga akan menjadi besar apabila urus niaga dilaksanakan serta-merta, tetapi jika pesanan belian anda dilaksanakan melalui ujian balik, ia sebenarnya akan mendahului urus niaga peniaga lain yang pada asalnya ingin membeli, dan kesan rama-rama akan memberi kesan ke atas pasaran. Kesan ini tidak boleh diukur dan kami hanya boleh mengatakan berdasarkan pengalaman bahawa perdagangan frekuensi tinggi hanya boleh menampung dana kecil.

Ujian belakang berdasarkan kedalaman dan tanda masa nyata

FMZ menyediakan ujian belakang masa nyata, yang boleh memperoleh kedalaman 20 peringkat sejarah sebenar, tanda tahap kedua masa nyata, data transaksi demi transaksi, dan berdasarkan ini,Fungsi main balik masa nyata. Jumlah data ujian belakang adalah sangat besar dan kelajuannya sangat perlahan, biasanya hanya dua hari. Untuk strategi atau strategi frekuensi yang agak tinggi yang memerlukan pertimbangan masa yang ketat, ujian belakang masa nyata diperlukan. Pasangan urus niaga dan tempoh masa yang dikumpul oleh FMZ tidak lama, tetapi terdapat lebih daripada 70 bilion data sejarah. Mekanisme pemadanan semasa ialah jika pesanan beli lebih besar daripada pesanan jual, ia akan dipadankan sepenuhnya dengan serta-merta tanpa mengira jumlahnya; Mekanisme ujian belakang sedemikian menyelesaikan dua masalah pertama ujian belakang K-line, tetapi ia masih tidak dapat menyelesaikan masalah terakhir. Dan kerana jumlah data adalah sangat besar, kelajuan ujian belakang dan julat masa adalah terhad.

Sistem ujian belakang frekuensi tinggi berdasarkan transaksi melalui transaksi dan kecacatan ujian belakang K-line

Mekanisme ujian balik berdasarkan aliran pesanan transaksi

Terdapat terlalu sedikit maklumat K-line dan kedalaman mungkin palsu, tetapi terdapat satu jenis data yang menggambarkan niat urus niaga sebenar pasaran dan mencerminkan sejarah transaksi yang paling sahih - iaitu, urus niaga mengikut transaksi. Artikel ini akan mencadangkan sistem ujian belakang frekuensi tinggi berdasarkan aliran pesanan, yang akan mengurangkan jumlah data untuk ujian belakang masa nyata dan mensimulasikan kesan volum dagangan pada pasaran pada tahap tertentu.

Saya telah memuat turun rekod transaksi kontrak kekal Binance XTZ dalam 5 hari yang lalu (alamat muat turun: https://www.fmz.com/upload/asset/1ff487b007e1a848ead.csv Sebagai produk yang tidak begitu popular, terdapat 213,000 transaksi). jumlah Data, mari kita lihat komposisi data:

[['XTZ', 1590981301905, 2.905, 0.4, 'False\n'],
 ['XTZ', 1590981303044, 2.903, 3.6, 'True\n'],
 ['XTZ', 1590981303309, 2.903, 3.7, 'True\n'],
 ['XTZ', 1590981303738, 2.903, 238.1, 'True\n'],
 ['XTZ', 1590981303892, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305250, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305643, 2.903, 197.3, 'True\n'],

Data ialah senarai dua dimensi, diisih mengikut masa transaksi. Maksud khusus ialah: nama produk, harga urus niaga, cap masa transaksi, kuantiti urus niaga dan sama ada ia adalah transaksi pesanan jualan yang aktif. Terdapat pembeli dan penjual, dan setiap transaksi termasuk pembeli dan penjual Jika pembeli adalah pembuat pasaran dan penjual adalah pengambil, data terakhir adalah Benar.

Pertama, berdasarkan arah urus niaga, harga beli dan jual dalam pasaran boleh disimpulkan dengan agak tepat Jika ia adalah pesanan jual yang aktif, harga beli pada masa ini adalah harga transaksi Jika ia adalah pesanan belian yang aktif harga jual ialah harga transaksi Jika ada transaksi baru, sebut harga baru akan dikemas kini Jika tidak dikemas kini, keputusan sebelumnya akan dikekalkan. Adalah mudah untuk menyimpulkan bahawa pada saat akhir data di atas, harga belian ialah 2.903 dan harga jualan ialah 2.904.

Mengikut aliran pesanan, pemadanan boleh dilakukan seperti ini: mengambil pesanan beli sebagai contoh, harga ialah harga, kuantiti pesanan ialah jumlah, dan pesanan beli dan jual adalah bida dan tanya masing-masing. Jika harga lebih rendah daripada permintaan dan lebih tinggi daripada tawaran, ia mula-mula ditentukan untuk menjadi pembuat dan boleh dipadankan dengan pesanan dahulu, kemudian, dalam tempoh kewujudan pesanan, semua transaksi dengan harga transaksi lebih rendah daripada atau sama dengan harga akan dipadankan dengan pesanan ini (jika harga lebih rendah daripada permintaan, pesanan akan dipadankan dengan tawaran jika harga tawaran adalah sama atau lebih tinggi daripada harga tawaran, pesanan tidak boleh didagangkan dahulu . Semua pesanan dengan harga urus niaga yang lebih rendah daripada harga bida akan dipadankan dengan pesanan ini Harga yang sepadan ialah harga bida dan volum urus niaga ialah volum urus niaga sehingga pesanan itu dilaksanakan sepenuhnya atau dibatalkan. Jika harga lebih tinggi daripada permintaan, ia dianggap sebagai pengambil Selepas itu, semua transaksi dengan harga transaksi yang lebih rendah daripada atau sama dengan harga dalam tempoh kewujudan pesanan akan dipadankan dengan pesanan ini, dan harga yang sepadan akan. menjadi harga urus niaga transaksi. Perbezaan antara pembuat dan pengambil adalah kerana pertukaran pada dasarnya menggalakkan membuat pesanan dan menawarkan yuran transaksi keutamaan Untuk strategi frekuensi tinggi, perbezaan ini mesti diambil kira.

Adalah mudah untuk melihat masalah dengan jenis padanan ini Jika pesanan adalah pengambil, keadaan sebenar ialah ia boleh dilaksanakan dengan segera, dan bukannya menunggu pesanan baharu untuk memadankannya. Pertama sekali, kami tidak mengambil kira jumlah pesanan yang belum selesai Walaupun terdapat data, menilai secara langsung transaksi akan mengubah kedalaman dan menjejaskan pasaran. Pemadanan berdasarkan pesanan baharu adalah bersamaan dengan menggantikan pesanan sebenar dalam sejarah dengan pesanan anda Dalam apa jua keadaan, ia tidak akan melebihi had volum dagangan pasaran sendiri, dan keuntungan akhir tidak akan melebihi keuntungan maksimum yang dijana oleh pasaran. Beberapa mekanisme pemadanan juga mempengaruhi volum transaksi pesanan, yang seterusnya mempengaruhi pulangan strategi, dan secara kuantitatif mencerminkan kapasiti strategi. Tidak akan ada backtest tradisional di mana keuntungan akan digandakan jika jumlah dana digandakan.

Terdapat beberapa butiran kecil Jika harga belian pesanan adalah sama dengan harga beli satu, sebenarnya masih ada kebarangkalian bahawa ia akan dipadankan pada harga beli satu Ia perlu mempertimbangkan keutamaan pesanan yang belum selesai kebarangkalian transaksi, dsb. Ia agak rumit dan tidak akan dipertimbangkan di sini.

Kod yang sepadan

Objek pertukaran boleh merujuk kepada pengenalan pada permulaan, yang pada asasnya tidak berubah Hanya perbezaan antara yuran pembuat dan pengambil ditambah, dan kelajuan ujian belakang dioptimumkan. Yang berikut terutamanya akan memperkenalkan kod yang sepadan.

    symbol = 'XTZ'
    loop_time = 0
    intervel = 1000 #策略的休眠时间为1000ms
    init_price = data[0][2] #初始价格
    e = Exchange([symbol],initial_balance=1000000,maker_fee=maker_fee,taker_fee=taker_fee,log='') #初始化交易所
    depth = {'ask':data[0][2], 'bid':data[0][2]} #深度
    order = {'buy':{'price':0,'amount':0,'maker':False,'priority':False,'id':0},
             'sell':{'price':0,'amount':0,'maker':False,'priority':False,'id':0}} #订单
    for tick in data:
        price = int(tick[2]/tick_sizes[symbol])*tick_sizes[symbol] #成交价格
        trade_amount = tick[3] #成交数量
        time_stamp = tick[1] #成交时间戳
        if tick[4] == 'False\n':
            depth['ask'] = price
        else:
            depth['bid'] = price
        
        if depth['bid'] < order['buy']['price']:
            order['buy']['priority'] = True
        if depth['ask'] > order['sell']['price']:
            order['sell']['priority'] = True
        if price > order['buy']['price']:
            order['buy']['maker'] = True
        if price < order['sell']['price']:
            order['sell']['maker'] = True
        
        #订单网络延时也可以作为撮合条件之一,这里没考虑
        cond1 = order['buy']['priority'] and order['buy']['price'] >= price and order['buy']['amount'] > 0
        cond2 = not order['buy']['priority'] and order['buy']['price'] > price and order['buy']['amount'] > 0
        cond3 = order['sell']['priority'] and order['sell']['price'] <= price and order['sell']['amount'] > 0
        cond4 = not order['sell']['priority'] and order['sell']['price'] < price and order['sell']['amount'] > 0

        if cond1 or cond2:
            buy_price = order['buy']['price'] if order['buy']['maker'] else price
            e.Buy(symbol, buy_price, min(order['buy']['amount'],trade_amount), order['buy']['id'], order['buy']['maker'])
            order['buy']['amount'] -= min(order['buy']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})
        if cond3 or cond4:
            sell_price = order['sell']['price'] if order['sell']['maker'] else price
            e.Sell(symbol, sell_price, min(order['sell']['amount'],trade_amount), order['sell']['id'], order['sell']['maker'])
            order['sell']['amount'] -= min(order['sell']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})

        if time_stamp - loop_time > intervel:
            order = get_order(e,depth,order) #交易逻辑,这里未给出
            loop_time += int((time_stamp - loop_time)/intervel)*intervel

Beberapa butiran untuk diperhatikan:

  • 1. Apabila terdapat transaksi baharu, anda mesti memadankan pesanan dahulu, dan kemudian membuat pesanan berdasarkan harga terkini.
  • 2. Setiap pesanan mempunyai dua sifat: pembuat - sama ada pembuat, keutamaan - keutamaan yang sepadan Mengambil pesanan beli sebagai contoh, apabila harga belian kurang daripada harga permintaan, ia ditandakan sebagai pembuat, dan apabila pesanan belian. harga beli adalah lebih besar daripada harga beli, ia ditandakan sebagai pesanan belian padanan keutamaan, keutamaan menentukan sama ada harga adalah sama dengan harga bida atau tidak, dan pembuat menentukan yuran pengendalian.
  • 3. Pembuat dan keutamaan pesanan dikemas kini Sebagai contoh, jika pesanan belian yang besar diletakkan melebihi harga pasaran, apabila harga yang lebih besar daripada harga bida muncul, jumlah dagangan yang tinggal akan menjadi pembuat.
  • 4. Selang strategi adalah perlu, yang boleh mewakili kelewatan pasaran.

Strategi Grid Ujian Belakang

Akhirnya, kami telah mencapai peringkat ujian belakang sebenar Kami akan menguji salah satu strategi grid paling klasik untuk melihat sama ada ia mencapai keputusan yang diharapkan. Prinsip strategi ialah setiap kali harga naik sebanyak 1%, kami mengadakan pesanan pendek dengan nilai tertentu (atau sebaliknya, mengadakan pesanan lama), mengira pesanan beli dan jual, dan letakkannya terlebih dahulu. Kod tidak akan dikeluarkan. Bungkus semua kod ke dalamGrid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)Dalam fungsi, parameter ialah: pasangan dagangan, sisihan harga 1% daripada nilai pegangan, ketumpatan pesanan 0.3%, selang tidur dalam ms, yuran pembuat pesanan dan yuran pengambil pesanan.

Dalam tempoh lima hari yang lalu, pasaran XTZ berada dalam fasa yang tidak menentu, yang sangat sesuai untuk grid. Sistem ujian belakang frekuensi tinggi berdasarkan transaksi melalui transaksi dan kecacatan ujian belakang K-line

Kami mula-mula menguji semula kesan saiz kedudukan yang berbeza pada pulangan Pulangan yang diukur oleh mekanisme ujian belakang tradisional pasti akan meningkat secara berkadar dengan peningkatan dalam kedudukan.

e1 = Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e1.account['USDT'])
e2 = Grid('XTZ',1000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e2.account['USDT'])
e3 = Grid('XTZ',10000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e3.account['USDT'])
e4 = Grid('XTZ',100000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e4.account['USDT'])

Sebanyak empat kumpulan telah diuji balik, dengan nilai pegangan masing-masing 100, 1000, 10000, dan 100000, dan jumlah masa ujian belakang ialah 1.3s. Hasilnya adalah seperti berikut:

{'realised_profit': 28.470993031132966, 'margin': 0.7982662957624465, 'unrealised_profit': 0.0104554474048441, 'total': 10000028.481448, 'leverage': 0.0, 'fee': -0.3430967859046398, 'maker_fee': -0.36980249726699727, 'taker_fee': 0.026705711362357405}
{'realised_profit': 275.63148945320177, 'margin': 14.346335829979132, 'unrealised_profit': 4.4382117331794045e-14, 'total': 10000275.631489, 'leverage': 0.0, 'fee': -3.3102045933457784, 'maker_fee': -3.5800688964477048, 'taker_fee': 0.2698643031019274}
{'realised_profit': 2693.8701498889504, 'margin': 67.70120400534114, 'unrealised_profit': 0.5735269329348516, 'total': 10002694.443677, 'leverage': 0.0001, 'fee': -33.984021415250744, 'maker_fee': -34.879233866850974, 'taker_fee': 0.8952124516001403}
{'realised_profit': 22610.231198585603, 'margin': 983.3853688758861, 'unrealised_profit': -20.529965947304365, 'total': 10022589.701233, 'leverage': 0.002, 'fee': -200.87094000385412, 'maker_fee': -261.5849078470078, 'taker_fee': 60.71396784315319}

Dapat dilihat bahawa keuntungan realisasi akhir masing-masing adalah 28.4%, 27.5%, 26.9% dan 22.6% daripada nilai kedudukan. Ini juga selaras dengan keadaan sebenar Lebih besar nilai kedudukan, lebih besar nilai pesanan tertunda, lebih besar kemungkinan transaksi separa akan berlaku, dan keuntungan realisasi akhir akan menjadi lebih kecil berbanding dengan. jumlah pesanan belum selesai. Angka berikut membandingkan pulangan relatif pegangan dengan nilai masing-masing 100 dan 10,000: Sistem ujian belakang frekuensi tinggi berdasarkan transaksi melalui transaksi dan kecacatan ujian belakang K-line

Kami juga boleh menguji balik kesan parameter berbeza pada pemulangan ujian balik, seperti ketumpatan pesanan, masa dorman, yuran pengendalian, dsb. Mengambil masa tidur sebagai contoh, tukarkannya kepada 100ms dan bandingkan dengan masa tidur 1000ms untuk melihat faedahnya. Keputusan ujian belakang adalah seperti berikut:

{'realised_profit': 29.079440803790423, 'margin': 0.7982662957624695, 'unrealised_profit': 0.0104554474048441, 'total': 10000029.089896, 'leverage': 0.0, 'fee': -0.3703702128662524, 'maker_fee': -0.37938946377435134, 'taker_fee': 0.009019250908098965}

Keuntungan telah meningkat sedikit Ini kerana strategi hanya meletakkan satu set pesanan Beberapa pesanan tidak boleh mendapat manfaat daripada harga yang turun naik kerana ia tidak boleh diubah mengikut masa. Ini juga menggambarkan kepentingan meletakkan berbilang kumpulan pesanan dalam strategi grid.

ringkaskan

Kertas ini secara inovatif mencadangkan sistem ujian belakang baharu berdasarkan aliran pesanan, yang sebahagiannya boleh mensimulasikan keadaan padanan pesanan belum selesai, menerima pesanan, urus niaga separa, kelewatan, dsb., dan sebahagiannya mencerminkan kesan dana strategi ke atas pulangan nilai untuk strategi lindung nilai, dan ujian belakang ketepatan tinggi menunjukkan arah untuk mengoptimumkan parameter strategi. Ia juga telah disahkan melalui dagangan sebenar jangka panjang. Ia juga lebih baik mengawal jumlah data yang diperlukan untuk ujian belakang, dan kelajuan ujian belakang juga sangat pantas.