Tarixi kriptovalyuta məlumatlarını necə əldə etmək olar

Mübadilə API-ləri vasitəsilə dəqiqəyə qədər OHLC məlumatlarını yükləyin

YENİLƏMƏK:

Bu mövzuya olan ümumi maraqdan ötrü, Bitfinex Exchange API-dən bütün OHLC məlumatlarını özündə cəmləşdirən bir verilənlər bazası yaratdım və ümumi məlumat bazası olaraq Kaggle-a yüklədim.

giriş

Alqoritmik ticarət, kripto-valyuta bazarlarının sürətli və dəyişkən mühitində hərəkət etmək üçün populyar bir yoldur. Bununla birlikdə, avtomatlaşdırılmış ticarət strategiyasını həyata keçirmək çətindir və bir çox arxa test tələb edir, bu da bir çox tarixi məlumat tələb edir. Tarixi kripto valyutası məlumatlarını verən bir neçə qaynaq mövcud olsa da, əksəriyyətinin çatışmazlıqları var. Bunlar ya bahalıdır, yalnız aşağı müvəqqəti çözünürlüklü məlumatlar verir (gündəlik) və ya məhdud sayda valyuta cütlüyündə məhdud müddətləri əhatə edir. Burada 1 dəqiqəlik qətnamə ilə tarixi Açıq, Yüksək, Aşağı, Yaxın (OHLC) məlumat əldə etməyin sehrli bir vəzifə olmadığını görəcəyik. Bu tapşırıq bir neçə satır Python kodunda pulsuz olaraq həyata keçirilə bilər.

Mübadilə ilə əlaqə qurun

Bu təlimatda Bitfinex Exchange API-dən tarixi məlumatlar əldə etmək üçün istifadə edəcəyik. Bununla birlikdə, yanaşma oxşar bir API təmin edən hər hansı bir mübadilə üçün işləməlidir. Ayrıca, bu kodun işləməsi üçün Bitfinex hesabına ehtiyacınız yoxdur, çünki yalnız ümumi API son nöqtələrini istifadə edirik. Bir API-nin nə olduğunu və necə istifadə edəcəyinizi bilmirsinizsə, Bitfinex API sənədlərinə baxın. Axı, bu da alqoritminizin sonradan mübadilə ilə qarşılıqlı əlaqələndirəcəyi interfeysdir. Ancaq narahat olmayın, Bitfinex API üçün Python interfeysini özünüz yazmalı deyilsiniz. Onsuz da bir neçə tətbiq var, bunlardan biri də bu müştəridir. Ən asan quraşdırma pip vasitəsilə həyata keçirilir:

>>> pip bitfinex-tencar quraşdırın

Git quraşdırılmışsa, müştərini quraşdırmaq üçün yalnız aşağıdakı əmrləri işə sala bilərsiniz. Unutmayın hedef qovluğunuzla.

>>> Git klonu https://github.com/akcarsten/bitfinex_api.git >>> piton /Setup.py yükləyin

Git yükləməmisinizsə, GitHub səhifəsindəki anbarı klonlaya bilərsiniz. Sonra klonladığınız qovluğa gedin və aşağıdakıları edin:

>>> python setup.py quraşdırın

Hər iki halda da Bitfinex istemcisi Python paylamanıza quraşdırılacaq.

API Client istifadə

Bitfinex API sənədlərinə baxsanız v1 və v2 olmaqla iki API versiyasının olduğunu görərsiniz. Hər ikisi də yeni quraşdırdığınız müştəridə tətbiq olunur. Lakin burada yalnız v2 API istifadə olunur. Bitfinex API istemcisini idxal etdikdən sonra aşağıdakı kodu çalıştırarak v2 API nümunəsi yaratmalısınız. Diqqət yetirin ki, burada açarları təqdim etmirik, ona görə də yalnız ümumi son nöqtələrə çıxış əldə edə bilərik. Kod işlədikdən sonra bir mesaj görünəcək.

>>> Bitfinex idxal >>> # v2 API-nin API nümunəsini yaradın >>> api_v2 = bitfinex.bitfinex_v2.api_v2 ()

Və bu, məlumat üçün giriş qapımızdır. Sənədlərdən bilirik ki, ümumi son nöqtələrdən birinə Şamlar deyilir və bütün birjalarda gördüyünüz şam qrafiklərinin arxasındakı məlumatları qaytarır. Bu tip məlumatlara aşağıdakı məlumatlar, açılış, bağlanış, yüksək və aşağı qiymətlər və ticarət həcmi üçün zaman damgası daxildir. OHLC məlumatları olaraq da bilinir. Müştəri tərəfindən bu son nöqtə ilə qarşılıqlı əlaqə qurmağın ən asan yolu, standart parametrlərlə zəng etməkdir.

>>> nəticə = api_v2.candles ()

Yuxarıdakı sətirdə USD qiyməti olan Bitcoin qiyməti üçün son 1000 dəqiqəlik OHLC məlumatları göstərilir. Yaxşı ki, yaxşıdır, amma daha erkən bir müddət və ya fərqli bir valyuta cütlüyü ilə maraqlana bilərik. Bu vəziyyətdə tam istədiyimizi əldə etmək üçün əlavə parametrlər təqdim edə bilərik. Və bu parametrlər:

  • Simvol: valyuta cütü, standart: BTCUSD
  • İnterval: müvəqqəti çözünürlük, məs., 1 dəqiqəlik OHLC məlumatları üçün 1 m
  • limit: qaytarılmış məlumat nöqtələrinin sayı, standart: 1000
  • başlanğıc: 1970-ci ildən bəri millisekundlarla intervalın başlama vaxtı
  • Son: 1970-ci ildən bəri millisekundlarla intervalın bitmə vaxtı

Beləliklə, bu məlumatla ilk sorğunu apara bilərik. Aşağıdakı kod, Bitcoin qiymətinin 2018-ci ilin aprel ayının ilk iki günü üçün ABŞ dollarındakı 1 dəqiqəlik OHLC məlumatlarını qaytarır.

>>> idxal vaxtı >>> idxal vaxtı
>>> # Sorğu parametrlərini təyin edin >>> cüt = 'btcusd' # Valyuta cütlüyü >>> bin_size = '1m' # Bu dəqiqələri qaytarır >>> limit = 1000 # Maksimum 1000 məlumat nöqtəsi istəyirik
>>> # Başlama tarixini təyin edin >>> t_start = datetime.datetime (2018, 4, 1, 0, 0) >>> t_start = time.mktime (t_start.timetuple ()) * 1000
>>> # Bitmə tarixini təyin edin >>> t_stop = datetime.datetime (2018, 4, 2, 0, 0) >>> t_stop = time.mktime (t_stop.timetuple ()) * 1000
>>> Nəticə = api_v2.candles (simvol = cüt, interval = bin_size, >>> limit = limit, start = t_start, end = t_stop)

Daha uzun müddət aralıqlarla tarixi məlumatların toplanması

Mükəmməldir, amma yenə də bir problem var: API yalnız maksimum 1000 məlumat nöqtəsini qaytarır. Beləliklə, maraq müddətini 2018-ci ilin aprel ayının hamısına qədər uzatsaydıq, 1 dəqiqəlik bir qətnamə ilə əldə edə bilməzdik. Bu məhdudiyyətdən keçmək üçün böyük sorğumuzu bir neçə kiçik suala ayıran bir funksiya yazmalıyıq. Bitfinex API-yə müraciətlərin sayının məhdud olduğunu da nəzərə almalıyıq. Hal-hazırda bu limit dəqiqədə 60 zəngdir, yəni hər sorğudan sonra növbəti işə başlamazdan əvvəl ən azı 1 saniyə gözləməliyik. Əmin olmaq üçün aşağıdakı xüsusiyyət 2 saniyə gözləyəcək, ancaq istəsən bunu dəyişdirə bilərsiniz.

>>> def fetch_data (başlanğıc, dur, simvol, interval, tick_limit, addım): >>> # API nümunəsi yaradın >>> api_v2 = bitfinex.bitfinex_v2.api_v2 () >>> data = [] >>> start = başlanğıc - addım >>> başlanğıcda >> start = start + step >>> end = start + step >>> res = api_v2.candles (simvol = simvol, interval = interval, >>> limit = tick_limit, start = start, >>> end = end) >>> data.extend (res) >>> bedtime (2) >>> return data

Yuxarıda göstərilən funksiya ilə sorğuları daha uzun müddət aralıqlarla işləyə bilərik. Əlavə olaraq təmin etməli olduğumuz tək şey millisekundlarda addım ölçüsüdür. Kiçik sorğuların hər biri üçün bir çox məlumat nöqtəsini istəməyimiz lazımdır. Bu mahiyyət etibarilə əvvəllər müəyyənləşdirdiyimiz limitlə eynidir, lakin indi milisaniyələrdə. API-yə edilən zənglərin sayını azaltmaq üçün maksimumu seçməliyik, yəni 1 dəqiqəlik iş üçün 60000 * 1000 = 60000000 addım ölçüsü deməkdir.

>>> # Adım ölçüsünü təyin edin >>> time_step = 60000000
>>> # Başlama tarixini təyin edin >>> t_start = datetime.datetime (2018, 4, 1, 0, 0) >>> t_start = time.mktime (t_start.timetuple ()) * 1000
>>> # Bitmə tarixini təyin edin >>> t_stop = datetime.datetime (2018, 5, 1, 0, 0) >>> t_stop = time.mktime (t_stop.timetuple ()) * 1000
>>> pair_data = fetch_data (start = t_start, stop = t_stop, symbol = pair, >>> interval = bin_size, tick_limit = limit, >>> step = time_step)

Nəhayət, nəticələri bir pandas məlumat çərçivəsinə çevirə bilək ki, potensial dublikatları silə bilək, hər şeyin düzgün qaydada olduğundan əmin olaq və zaman damğasını oxunaqlı bir formata çevirə bilək.

>>> Pandaları pd olaraq idxal et >>> >>> # Pandalar məlumat çərçivələri yaradın və məlumatları təmizləyin / formatlayın >>> adlar = ['time', 'open', 'close', 'high', 'low', ' həcmi '] >>> df = pd.DataFrame (cüt_data, sütunlar = adlar) >>> df.drop_doplicates (inplace = True) >>> df [' time '] = pd.to_datetime (df [' time '], unit = 'ms') >>> df.set_index ('time', inplace = True) >>> df.sort_index (inplace = True)

Nəticə

Beləliklə, yüksək çözünürlüklü OHLC məlumatlarını əldə etmək əslində o qədər də çətin deyil. Bitfinex API-si ilə bunu neçə valyuta cütü ilə edə biləcəyimizi düşünürsünüzsə, aşağıdakı iki sətir kodunu işlədin.

>>> api_v1 = bitfinex.bitfinex_v1.api_v1 () >>> cütlər = api_v1.symbols ()

İndi hər bir valyuta cütü üçün bütün məlumatları toplayan və CSV sənədində saxlayan belə bir skript yaza bilərik. Bu yolla, Bitfinex mübadiləsinin bütün tarixi OHLC ticarət məlumatlarını 1 dəqiqəlik bir qətnamə ilə əldə edəcəksiniz və bu sizə avtomatlaşdırılmış ticarət strategiyası hazırlamağa kömək edəcəkdir. Bununla birlikdə, bütün məlumatların kompüterinizdə saxlanılması biraz vaxt alacaq. Buna görə sorğunuzu ya daha qısa bir müddətlə məhdudlaşdırmalısınız, ya da valyuta cütlərinizlə daha seçici olmalısınız.

Ümid edirəm bu kömək edir və kodu buradan yoxlaya, Twitter-də məni izləyə və ya LinkedIn vasitəsilə əlaqə qura bilərsiniz.