Modul Python untuk mendapatkan data saham/mata uang kripto dari Alpha Vantage API
Alpha Vantage memberikan API gratis untuk data keuangan waktu nyata dan indikator keuangan yang paling banyak digunakan dalam format json atau pandas sederhana. Modul ini mengimplementasikan antarmuka python ke API gratis yang disediakan oleh Alpha Vantage. Ini memerlukan kunci API gratis, yang dapat diminta dari http://www.alphavantage.co/support/#api-key. Anda dapat melihat semua panggilan API yang tersedia di dokumentasi API mereka.
Untuk akses tanpa kode ke data pasar keuangan, Anda juga dapat mempertimbangkan Wisesheets atau Google Sheet Add-on resmi atau Add-on Microsoft Excel dari Alpha Vantage. Lihat panduan ini untuk mengetahui beberapa tip umum dalam bekerja dengan data pasar keuangan.
Untuk menginstal paket gunakan:
pip install alpha_vantage
Atau instal dengan dukungan pandas, cukup instal pandas juga:
pip install alpha_vantage pandas
Jika Anda ingin menginstal dari sumber, gunakan:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
Untuk mendapatkan data dari API, cukup impor perpustakaan dan panggil objek dengan kunci API Anda. Selanjutnya, bersiaplah untuk mendapatkan data keuangan real-time yang mengagumkan, gratis. Kunci API Anda juga dapat disimpan dalam variabel lingkungan ALPHAVANTAGE_API_KEY
.
from alpha_vantage . timeseries import TimeSeries
ts = TimeSeries ( key = 'YOUR_API_KEY' )
# Get json object with the intraday data and another with the call's metadata
data , meta_data = ts . get_intraday ( 'GOOGL' )
Untuk menanyakan data dari bulan tertentu dalam riwayat, Anda dapat menggunakan parameter 'bulan' untuk berbagai fitur.
from alpha_vantage . timeseries import TimeSeries
from alpha_vantage . techindicators import TechIndicators
ts = TimeSeries ( key = 'YOUR_API_KEY' )
ti = TechIndicators ( key = 'YOUR_API_KEY' )
# Get json object with the 30-min interval intraday data and another with the call's metadata for January, 2014.
data , meta_data = ts . get_intraday ( 'GOOGL' , month = '2014-01' , interval = '30min' )
#Get json object with the 30-min interval simple moving average (SMA) values and another with the call's metadata for January, 2014.
data , meta_data = ti . get_sma ( 'GOOGL' , month = '2014-01' , interval = '30min' )
Anda juga bisa mendapatkan kunci dari rapidAPI. Gunakan kunci rapidAPI Anda untuk variabel kunci, dan setel rapidapi=True
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
Secara internal terdapat penghitung percobaan ulang, yang dapat digunakan untuk meminimalkan kesalahan koneksi (jika API tidak dapat merespons tepat waktu), defaultnya disetel ke 5 tetapi dapat ditingkatkan atau dikurangi kapan pun diperlukan.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
Pustaka mendukung pemberian hasilnya sebagai kamus json (default), kerangka data pandas (jika terpasang) atau csv, cukup berikan parameter output_format='pandas' untuk mengubah format output untuk semua panggilan API di kelas tertentu. Harap perhatikan bahwa beberapa panggilan API tidak mendukung format csv (yaitu ForeignExchange and TechIndicators
) karena titik akhir API juga tidak mendukung format panggilannya.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
Bingkai data pandas yang diberikan melalui panggilan, dapat memiliki pengindeksan string tanggal atau pengindeksan bilangan bulat (secara default pengindeksan adalah 'tanggal'), bergantung pada kebutuhan Anda, Anda dapat menggunakan keduanya.
# For the default date string index behavior
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' , indexing_type = 'date' )
# For the default integer index behavior
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' , indexing_type = 'integer' )
Struktur bingkai data diberikan melalui panggilan pada alpha vantage rest API. Nama kolom bingkai data adalah nama yang diberikan oleh struktur datanya. Misalnya panggilan berikut:
from alpha_vantage . timeseries import TimeSeries
from pprint import pprint
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ts . get_intraday ( symbol = 'MSFT' , interval = '1min' , outputsize = 'full' )
pprint ( data . head ( 2 ))
Akan mengakibatkan:
Header dari data ditentukan dari Alpha Vantage (di versi sebelumnya, angka di header telah dihapus, namun dalam jangka panjang lebih baik memiliki data persis seperti yang dihasilkan Alpha Vantage.)
Dengan menggunakan dukungan pandas, kita dapat memplot nilai intra-menit untuk saham 'MSFT' dengan cukup mudah:
from alpha_vantage . timeseries import TimeSeries
import matplotlib . pyplot as plt
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ts . get_intraday ( symbol = 'MSFT' , interval = '1min' , outputsize = 'full' )
data [ '4. close' ]. plot ()
plt . title ( 'Intraday Times Series for the MSFT stock (1 min)' )
plt . show ()
Memberi kami sebagai keluaran:
Dengan cara yang sama kita bisa membuat panda memetakan indikator teknis seperti Bollinger Bands®
from alpha_vantage . techindicators import TechIndicators
import matplotlib . pyplot as plt
ti = TechIndicators ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ti . get_bbands ( symbol = 'MSFT' , interval = '60min' , time_period = 60 )
data . plot ()
plt . title ( 'BBbands indicator for MSFT stock (60 min)' )
plt . show ()
Memberi kami sebagai keluaran:
Kami juga dapat memplot harga mata uang kripto seperti BTC:
from alpha_vantage . cryptocurrencies import CryptoCurrencies
import matplotlib . pyplot as plt
cc = CryptoCurrencies ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = cc . get_digital_currency_daily ( symbol = 'BTC' , market = 'CNY' )
data [ '4b. close (USD)' ]. plot ()
plt . tight_layout ()
plt . title ( 'Daily close value for bitcoin (BTC)' )
plt . grid ()
plt . show ()
Memberi kami sebagai keluaran:
Titik akhir pertukaran asing tidak memiliki metadata, sehingga hanya tersedia dalam format json dan panda (menggunakan format 'csv' akan menimbulkan Kesalahan)
from alpha_vantage . foreignexchange import ForeignExchange
from pprint import pprint
cc = ForeignExchange ( key = 'YOUR_API_KEY' )
# There is no metadata in this call
data , _ = cc . get_currency_exchange_rate ( from_currency = 'BTC' , to_currency = 'USD' )
pprint ( data )
Memberi kami sebagai keluaran:
{
'1. From_Currency Code': 'BTC',
'2. From_Currency Name': 'Bitcoin',
'3. To_Currency Code': 'USD',
'4. To_Currency Name': 'United States Dollar',
'5. Exchange Rate': '5566.80500105',
'6. Last Refreshed': '2017-10-15 15:13:08',
'7. Time Zone': 'UTC'
}
Mulai versi 2.2.0 dan seterusnya, dukungan asyncio kini akan tersedia. Ini hanya untuk python versi 3.5+. Jika Anda tidak memiliki 3.5+, kode akan rusak.
Sintaksnya sederhana, cukup tandai metode Anda dengan kata kunci async
, dan gunakan kata kunci await
.
Berikut adalah contoh perulangan for untuk mendapatkan banyak simbol secara asinkron. Ini sangat meningkatkan kinerja program dengan banyak panggilan API.
import asyncio
from alpha_vantage . async_support . timeseries import TimeSeries
symbols = [ 'AAPL' , 'GOOG' , 'TSLA' , 'MSFT' ]
async def get_data ( symbol ):
ts = TimeSeries ( key = 'YOUR_KEY_HERE' )
data , _ = await ts . get_quote_endpoint ( symbol )
await ts . close ()
return data
loop = asyncio . get_event_loop ()
tasks = [ get_data ( symbol ) for symbol in symbols ]
group1 = asyncio . gather ( * tasks )
results = loop . run_until_complete ( group1 )
loop . close ()
print ( results )
Kami telah menulis artikel yang lebih mendalam untuk menjelaskan asyncio bagi mereka yang belum pernah menggunakannya tetapi ingin belajar tentang asyncio, konkurensi, dan multi-threading. Lihat di sini: Mana yang Harus Anda Gunakan: Pemrograman Asynchronous atau Multi-Threading?
Saya telah menambahkan repositori dengan contoh di notebook python untuk melihat penggunaan perpustakaan dengan lebih baik: https://github.com/RomelTorres/av_example
Untuk menjalankan pengujian, Anda harus mengekspor kunci API terlebih dahulu agar pengujian dapat menggunakannya untuk dijalankan, pengujian juga memerlukan panda, mock, dan nose.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
Dokumentasi kode dapat ditemukan di https://alpha-vantage.readthedocs.io/en/latest/
Berkontribusi selalu diterima. Cukup hubungi kami untuk mengetahui cara terbaik Anda dapat berkontribusi, menambahkan terbitan, atau membuat PR.
Anda dapat menghubungi/mengikuti tim Alpha Vantage di salah satu platform berikut:
Jika Anda menyukai atau menggunakan proyek ini, pertimbangkan untuk menunjukkan dukungan Anda dengan membintanginya.
??-??