وحدة Python للحصول على بيانات الأسهم/العملات المشفرة من Alpha Vantage API
توفر Alpha Vantage واجهة برمجة تطبيقات مجانية للبيانات المالية في الوقت الفعلي والمؤشرات المالية الأكثر استخدامًا بتنسيق json أو pandas البسيط. تطبق هذه الوحدة واجهة python لواجهة برمجة التطبيقات المجانية التي تقدمها Alpha Vantage. يتطلب مفتاح API مجانيًا، والذي يمكن طلبه من http://www.alphavantage.co/support/#api-key. يمكنك إلقاء نظرة على جميع استدعاءات واجهة برمجة التطبيقات المتوفرة في وثائق واجهة برمجة التطبيقات الخاصة بهم.
للوصول بدون تعليمات برمجية إلى بيانات السوق المالية، يمكنك أيضًا التفكير في أوراق الحكمة أو الوظيفة الإضافية الرسمية لجداول بيانات Google أو وظيفة Microsoft Excel الإضافية من Alpha Vantage. راجع هذا الدليل للحصول على بعض النصائح الشائعة حول التعامل مع بيانات السوق المالية.
لتثبيت الحزمة استخدم:
pip install alpha_vantage
أو قم بالتثبيت بدعم الباندا، ما عليك سوى تثبيت الباندا أيضًا:
pip install alpha_vantage pandas
إذا كنت تريد التثبيت من المصدر فاستخدم:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
للحصول على البيانات من واجهة برمجة التطبيقات (API)، ما عليك سوى استيراد المكتبة واستدعاء الكائن باستخدام مفتاح واجهة برمجة التطبيقات (API) الخاص بك. بعد ذلك، استعد لبعض البيانات المالية الرائعة والمجانية في الوقت الفعلي. قد يتم أيضًا تخزين مفتاح API الخاص بك في متغير البيئة 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' )
للاستعلام عن بيانات من شهر معين في التاريخ، يمكنك استخدام المعلمة "الشهر" لمختلف الميزات.
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' )
يمكنك أيضًا الحصول على مفتاح من RapidAPI. استخدم مفتاح RapidAPI الخاص بك للمتغير الرئيسي، وقم بتعيين rapidapi=True
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
يوجد داخليًا عداد إعادة المحاولة، والذي يمكن استخدامه لتقليل أخطاء الاتصال (في حالة عدم قدرة واجهة برمجة التطبيقات على الاستجابة في الوقت المناسب)، يتم تعيين الإعداد الافتراضي على 5 ولكن يمكن زيادته أو تقليله عند الحاجة.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
تدعم المكتبة إعطاء نتائجها كقواميس json (افتراضية)، أو pandas dataframe (إذا كانت مثبتة) أو csv، ما عليك سوى تمرير المعلمةput_format='pandas' لتغيير تنسيق الإخراج لجميع استدعاءات API في الفئة المحددة. يرجى ملاحظة أن بعض استدعاءات واجهة برمجة التطبيقات (API) لا تدعم تنسيق CSV (تحديدًا ForeignExchange and TechIndicators
) لأن نقطة نهاية واجهة برمجة التطبيقات (API) لا تدعم التنسيق في مكالماتها أيضًا.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
يمكن أن يحتوي إطار بيانات الباندا المقدم بواسطة المكالمة إما على فهرسة سلسلة تاريخ أو فهرسة عدد صحيح (افتراضيًا تكون الفهرسة هي "التاريخ")، اعتمادًا على احتياجاتك، يمكنك استخدام كليهما.
# 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' )
يتم توفير بنية إطار البيانات من خلال استدعاء واجهة برمجة التطبيقات alpha vantagerest API. أسماء أعمدة إطارات البيانات هي تلك التي توفرها بنية البيانات الخاصة بها. على سبيل المثال النداء التالي:
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 ))
سينتج عن:
يتم تحديد الرؤوس من البيانات من Alpha Vantage (في الإصدارات السابقة، تمت إزالة الأرقام الموجودة في الرؤوس، ولكن من الأفضل على المدى الطويل الحصول على البيانات تمامًا كما تنتجها Alpha Vantage.)
باستخدام دعم الباندا يمكننا رسم القيمة خلال الدقيقة لسهم "MSFT" بسهولة تامة:
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 ()
يعطينا الإخراج:
بنفس الطريقة التي يمكننا بها جعل حيوانات الباندا ترسم المؤشرات الفنية مثل 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 ()
يعطينا الإخراج:
يمكننا أيضًا رسم أسعار العملات المشفرة مثل 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 ()
يعطينا الإخراج:
لا تحتوي نقطة نهاية الصرف الأجنبي على بيانات وصفية، وبالتالي فهي متاحة فقط بتنسيق json وpandas (سيؤدي استخدام التنسيق "csv" إلى ظهور خطأ)
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 )
يعطينا الإخراج:
{
'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'
}
بدءًا من الإصدار 2.2.0 وما بعده، سيكون دعم المزامنة متاحًا الآن. هذا فقط لإصدارات بايثون 3.5+. إذا لم يكن لديك 3.5+، فسوف ينكسر الرمز.
بناء الجملة بسيط، ما عليك سوى تحديد الأساليب الخاصة بك باستخدام الكلمة الأساسية async
، واستخدام الكلمة الأساسية await
.
فيما يلي مثال على حلقة for للحصول على رموز متعددة بشكل غير متزامن. يؤدي هذا إلى تحسين أداء البرنامج بشكل كبير من خلال استدعاءات 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 )
لقد كتبنا مقالة أكثر تعمقًا لشرح عدم التزامن لأولئك الذين لم يستخدموه مطلقًا ولكنهم يريدون التعرف على عدم التزامن والتزامن والترابط المتعدد. تحقق من ذلك هنا: ما الذي يجب عليك استخدامه: البرمجة غير المتزامنة أم الخيوط المتعددة؟
لقد أضفت مستودعًا يحتوي على أمثلة في دفتر ملاحظات بيثون لرؤية استخدام المكتبة بشكل أفضل: https://github.com/RomelTorres/av_example
من أجل تشغيل الاختبارات، يجب عليك أولاً تصدير مفتاح واجهة برمجة التطبيقات (API) الخاص بك حتى يتمكن الاختبار من استخدامه للتشغيل، كما تتطلب الاختبارات الباندا والموك والأنف.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
يمكن العثور على وثائق الكود على https://alpha-vantage.readthedocs.io/en/latest/
المساهمة هي موضع ترحيب دائما. ما عليك سوى الاتصال بنا لمعرفة أفضل السبل التي يمكنك من خلالها المساهمة أو إضافة مشكلة أو إجراء علاقات عامة.
يمكنك الوصول إلى/متابعة فريق Alpha Vantage على أي من الأنظمة الأساسية التالية:
إذا أعجبك هذا المشروع أو استخدمته، فكر في إظهار دعمك من خلال تمييزه بنجمة.
؟؟-؟؟