โมดูล Python เพื่อรับข้อมูลหุ้น/สกุลเงินดิจิทัลจาก Alpha Vantage API
Alpha Vantage มอบ API ฟรีสำหรับข้อมูลทางการเงินแบบเรียลไทม์และตัวชี้วัดทางการเงินที่ใช้มากที่สุดในรูปแบบ json หรือ pandas แบบธรรมดา โมดูลนี้ใช้อินเทอร์เฟซ Python กับ API ฟรีที่ Alpha Vantage มอบให้ ต้องใช้คีย์ API ฟรีซึ่งสามารถขอได้จาก http://www.alphavantage.co/support/#api-key คุณสามารถดูการเรียก API ทั้งหมดที่มีอยู่ในเอกสารประกอบ API
สำหรับการเข้าถึงข้อมูลตลาดการเงินโดยไม่ต้องใช้รหัส คุณอาจลองใช้ Wisesheets หรือ Add-on อย่างเป็นทางการของ Google Sheet หรือ Microsoft Excel Add-on โดย 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 )
ภายในมีตัวนับการลองใหม่ซึ่งสามารถใช้เพื่อลดข้อผิดพลาดในการเชื่อมต่อ (ในกรณีที่ API ไม่สามารถตอบสนองได้ทันเวลา) ค่าเริ่มต้นตั้งไว้ที่ 5 แต่สามารถเพิ่มหรือลดได้ทุกเมื่อที่ต้องการ
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
ไลบรารีรองรับการให้ผลลัพธ์เป็นพจนานุกรม json (ค่าเริ่มต้น), pandas dataframe (หากติดตั้ง) หรือ csv เพียงส่งพารามิเตอร์ output_format='pandas' เพื่อเปลี่ยนรูปแบบของเอาต์พุตสำหรับการเรียก API ทั้งหมดในคลาสที่กำหนด โปรดทราบว่าการเรียก API บางอย่างไม่รองรับรูปแบบ csv (ได้แก่ ForeignExchange and TechIndicators
) เนื่องจากจุดสิ้นสุด API ก็ไม่รองรับรูปแบบในการเรียกเช่นกัน
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
กรอบข้อมูล 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' )
โครงสร้างเฟรมข้อมูลกำหนดโดยการเรียก API ส่วนที่เหลือของ alpha vantage ชื่อคอลัมน์ของกรอบข้อมูลเป็นชื่อที่กำหนดโดยโครงสร้างข้อมูล ตัวอย่างเช่น การโทรต่อไปนี้:
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 เป็นต้นไป การสนับสนุน asyncio จะพร้อมใช้งานแล้ว นี่เป็นเพียงสำหรับ python เวอร์ชัน 3.5+ เท่านั้น หากคุณไม่มี 3.5+ โค้ดจะใช้งานไม่ได้
ไวยากรณ์นั้นเรียบง่าย เพียงทำเครื่องหมายวิธีการของคุณด้วยคีย์เวิร์ด async
และใช้คีย์เวิร์ด await
นี่คือตัวอย่างของ for loop เพื่อรับสัญลักษณ์หลายตัวแบบไม่ซิงโครนัส สิ่งนี้ช่วยปรับปรุงประสิทธิภาพของโปรแกรมที่มีการเรียก 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 )
เราได้เขียนบทความเชิงลึกมากขึ้นเพื่ออธิบาย asyncio สำหรับผู้ที่ไม่เคยใช้ แต่ต้องการเรียนรู้เกี่ยวกับ asyncio การเห็นพร้อมกัน และ multi-threading ลองดูที่นี่: คุณควรใช้แบบไหน: การเขียนโปรแกรมแบบอะซิงโครนัสหรือมัลติเธรด
ฉันได้เพิ่มพื้นที่เก็บข้อมูลพร้อมตัวอย่างในสมุดบันทึกหลามเพื่อให้เห็นการใช้งานไลบรารีได้ดีขึ้น: 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 ได้บนแพลตฟอร์มใด ๆ ต่อไปนี้:
หากคุณชอบหรือใช้โปรเจ็กต์นี้ ลองแสดงการสนับสนุนด้วยการติดดาว
-