Rumah >pembangunan bahagian belakang >Tutorial Python >Dapatkan transaksi sejarah Binance dengan mudah menggunakan Python
Memandangkan sesetengah strategi memerlukan tahap data teknikal tertentu, manakala yang lain mungkin hanya mengambil masa sejam dari masa anda, prosesnya tidak selalu mudah, dan infrastruktur, ketersediaan dan Elemen seperti kesambungan boleh berbeza-beza bergantung pada jenis data.
Tetapi mengapa artikel ini hanya mengenai mendapatkan data "urus niaga", dan mengapa kami menggunakan API Binance? Anda mungkin mempunyai beberapa soalan tentang kandungan artikel saya.
Saya akan mengatakan bahawa titik akhir data dagangan tersedia terutamanya pada 99.99% pertukaran. Ia berbutir halus, memberikan perincian yang cukup (dalam beberapa kes yang sangat khusus) untuk menguji balik strategi perdagangan frekuensi tinggi (HFT), dan boleh digunakan sebagai asas lilin OHLC (1S hingga 24H atau lebih jika anda mahu).
Data dagangan adalah universal dan membolehkan sejumlah besar percubaan menggunakan strategi dengan frekuensi yang berbeza.
Mengapa memilih Binance?
Itu hanya kerana ia adalah salah satu pertukaran yang saya cenderung untuk berundur kerana jumlah yang banyak.
Kami akan mencipta skrip Python yang menerima pasangan simbol, tarikh mula dan tarikh tamat sebagai argumen baris arahan. Ia mengeluarkan fail CSV yang mengandungi semua transaksi ke cakera. Proses ini boleh dijelaskan secara terperinci melalui langkah berikut:
1. Menghuraikan simbol, tarikh_mula dan tarikh_akhir.
2. Dapatkan transaksi pertama yang berlaku pada tarikh mula untuk mendapatkan trade_id transaksi pertama.
3. Gelung untuk mendapatkan 1000 transaksi setiap permintaan (had API Binance) sehingga tarikh_akhir dicapai.
4. Akhir sekali, simpan data ke cakera. Sebagai contoh, kami menyimpannya sebagai CSV, tetapi anda mempunyai pilihan lain dan tidak semestinya menyimpannya sebagai CSV.
5. Kami akan menggunakan panda, permintaan, masa, sistem dan masa tarikh. Dalam coretan kod, pengesahan ralat tidak akan ditunjukkan kerana ia tidak menambah sebarang nilai pada perihalan.
Skrip akan menggunakan parameter berikut:
1 simbol: simbol pasangan dagangan, ditakrifkan oleh Binance. Ini boleh ditanya di sini atau disalin daripada URL aplikasi web Binance (tidak termasuk aksara _).
- tarikh_mula dan tarikh_akhir: Jelas sekali. Format yang dijangkakan ialah mm/dd/yyyy, atau %m/%d/%Y menggunakan slanga Python.
Untuk mendapatkan parameter, kami akan menggunakan sys fungsi terbina dalam (tiada yang menarik di sini), dan untuk menghuraikan tarikh kami akan menggunakan pustaka datetime.
Kami akan menambah satu hari dan menolak satu mikrosaat supaya bahagian masa tarikh_akhir sentiasa pada 23:59:59.999, yang menjadikan mendapatkan selang intrahari lebih praktikal .
Menggunakan API Binance dan menggunakan titik akhir aggTrades kita boleh mendapatkan sehingga 1000 transaksi dalam satu permintaan jika kita menggunakan parameter mula dan tamat kemudian Selang antara mereka adalah paling lama satu jam.
Selepas beberapa kegagalan, dengan menggunakan pemerolehan selang masa (pada satu ketika atau yang lain kecairan akan menjadi gila dan saya akan kehilangan beberapa dagangan yang berharga) saya memutuskan Cuba strategi from_id.
Akan menjadi titik akhir yang dipilih oleh aggTrades kerana ia mengembalikan dagangan termampat. Dengan cara ini kami tidak akan kehilangan sebarang maklumat berharga.
Dapatkan jumlah transaksi yang dimampatkan. Dagangan yang dilaksanakan pada masa yang sama daripada pesanan yang sama pada harga yang sama akan mengagregatkan kuantiti.
Strategi from_id adalah seperti ini:
Kami ingin mendapatkan tarikh_mula transaksi pertama dengan menghantar selang tarikh ke titik akhir. Selepas itu, kami akan mendapat 1000 transaksi bermula dari ID transaksi yang pertama diambil. Kami kemudiannya akan menyemak sama ada transaksi terakhir berlaku selepas tarikh_akhir kami.
Jika ya, kami telah mengulangi semua tempoh masa dan boleh menyimpan hasilnya ke fail. Jika tidak, kami mengemas kini pembolehubah from_id untuk mendapatkan ID transaksi terakhir dan memulakan gelung sekali lagi.
Mula-mula, kami mencipta tarikh_akhir_baru. Ini kerana kami menggunakan aggTrades dengan menghantar parameter startTime dan endTime.
Kini kita hanya perlu mengetahui nombor transaksi pertama tempoh tersebut, jadi kita akan menambah 60 saat. Dalam pasangan mata wang kecairan rendah, parameter ini boleh diubah, kerana urus niaga tidak dijamin berlaku pada hari pertama permintaan.
Kemudian, huraikan tarikh menggunakan fungsi pembantu kami untuk menukar tarikh kepada perwakilan milisaat Unix menggunakan fungsi calendar.timegm. Fungsi timegm ialah fungsi pilihan kerana ia menyimpan tarikh dalam UTC. Jawapan kepada permintaan
ialah senarai objek perdagangan yang diisih mengikut tarikh, dalam format berikut:
Jadi memandangkan kami memerlukan ID transaksi pertama, kami akan mengembalikan nilai respons tersebut[0]["a"].
Memandangkan kami mempunyai ID transaksi pertama, kami boleh mengambil 1000 transaksi pada satu masa sehingga tarikh_akhir dicapai. Kod berikut akan dipanggil dalam gelung utama kami. Ia akan melaksanakan permintaan kami menggunakan parameter from_id, membuang parameter startDate dan endDate.
Kini, ini ialah gelung utama kami yang akan melaksanakan permintaan dan mencipta DataFrame kami.
Kami menyemak sama ada current_time mengandungi tarikh transaksi yang paling baru diambil lebih besar daripada to_date, jika ya kami:
Selepas memasang DataFrame, kami perlu melakukan pembersihan data yang mudah. Kami akan mengalih keluar urus niaga dengan pemangkasan pendua dan urus niaga yang berlaku selepas to_date (kami menghadapi masalah ini kerana kami mendapat sebahagian besar daripada 1000 transaksi, oleh itu, kami dijangka melaksanakan beberapa urus niaga selepas tarikh tamat sasaran).
Kami boleh merangkum fungsi pemangkasan kami:
dan melakukan pembersihan data kami:
Kini kita boleh menyimpannya ke fail menggunakan kaedah to_csv berikut:
Kita juga boleh menggunakan stor data lain Mekanik, seperti sebagai Artik.
Apabila menggunakan strategi dagangan adalah penting untuk kami mempercayai data kami. Kami boleh melakukan ini dengan mudah dengan data transaksi yang diambil dengan menggunakan pengesahan berikut:
Dalam coretan kod kami menukar DataFrame ini kepada tatasusunan NumPy dan mengulangi baris dengan baris, menyemak sama ada ID transaksi ditambah 1 untuk setiap baris.
ID transaksi Binance dinomborkan secara berperingkat dan dicipta untuk setiap simbol, jadi mudah untuk mengesahkan bahawa data itu betul.
PS: Langkah pertama dalam mencipta strategi dagangan yang berjaya ialah memiliki data yang betul.
Atas ialah kandungan terperinci Dapatkan transaksi sejarah Binance dengan mudah menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!