โซลูชันที่ง่ายดายในการเข้าถึงข้อมูลพื้นฐานโดยใช้โค้ดน้อยลง

การแนะนำ

ข้อมูลทางการเงินที่เพียงพอและเชื่อถือได้ถือเป็นสิ่งสำคัญมากสำหรับเทรดเดอร์เนื่องจากจะส่งผลต่อการตัดสินใจลงทุนของพวกเขาในวงกว้าง ดังนั้นกระบวนการรวบรวมข้อมูลจึงได้รับการพิจารณาและดำเนินการโดยผู้ค้าอย่างจริงจังเพื่อเพิ่มความได้เปรียบในตลาดให้สูงสุด

ขณะนี้ สามารถดึงข้อมูลทางการเงินโดยใช้ python ได้สองวิธี วิธีแรกคือการใช้ API ทางการเงินที่นำเสนอโดยผู้ให้บริการหลายราย และทำการเรียก API เพื่อรับข้อมูลที่ต้องการ วิธีที่สองคือการใช้แพ็คเกจ/ไลบรารีหลามโอเพ่นซอร์สเพื่อดึงข้อมูล

คนส่วนใหญ่ชอบวิธีที่สองในการดึงข้อมูลซึ่งก็คือผ่านแพ็คเกจหลามแบบโอเพ่นซอร์ส สาเหตุหลักมาจากการที่การรับข้อมูลโดยใช้ API ทางการเงินต้องใช้ความพยายามมากกว่าการใช้แพ็คเกจโอเพ่นซอร์ส และสิ่งนี้ทำหน้าที่เป็นอุปสรรคสำหรับโปรแกรมเมอร์มือใหม่

ในบทความนี้ เราจะมุ่งเน้นไปที่แพ็คเกจ Python ชื่อ eod ที่ช่วยในกระบวนการรวบรวมข้อมูลโดยการให้ข้อมูลทางการเงินประเภทต่างๆ ที่เชื่อถือได้ เพื่อเป็นการไม่ให้เสียเวลา เรามาดำดิ่งสู่บทความกันดีกว่า!

อี๊ด

ก่อนที่จะข้ามไปยังส่วนการเขียนโปรแกรม สิ่งสำคัญคือต้องรู้เกี่ยวกับแพ็คเกจที่เราจะใช้ในบทความนี้ eod เป็นไลบรารี Python แบบโอเพ่นซอร์สที่รองรับข้อมูลตลาดจำนวนมหาศาล ทำให้เทรดเดอร์ทุกคนสามารถเข้าถึงได้ แพ็คเกจนี้ได้รับการพัฒนาโดย EOD Historical Data APIs ("EODHD APIs") ซึ่งเป็นผู้เล่นหลักในแวดวงผู้ให้บริการ API ทางการเงิน พวกเขาสร้างโปรเจ็กต์โอเพ่นซอร์สนี้โดยมีจุดประสงค์เพื่อให้โปรแกรมเมอร์มือใหม่สามารถโต้ตอบกับ API ของตนได้ง่ายขึ้นมาก

มีข้อดีหลักสองประการของการใช้แพ็คเกจ eod ประการแรก สามารถดึงข้อมูลในลักษณะที่ตรงไปตรงมาและต้องใช้การเขียนโค้ดน้อยมากเพื่อทำงานให้เสร็จ ประการที่สอง เนื่องจากแพ็คเกจได้รับการสนับสนุนโดย "API ทางการเงินของ EODHD" ผู้ใช้จึงสามารถเข้าถึงข้อมูลตลาดที่หลากหลายตั้งแต่ข้อมูลพื้นฐานไปจนถึงข้อมูลเฉพาะและสำคัญ

การใช้งานหลาม

ในส่วนนี้ เราจะพูดถึงการเขียนโค้ดใน Python เพื่อแยกข้อมูลตลาดต่างๆ เช่น ข้อมูลพื้นฐาน ข้อมูลราคาในอดีตหรือ ณ สิ้นวัน ข้อมูลระหว่างวัน และข้อมูลเรียลไทม์ ต่อไปนี้เป็นโครงร่างพื้นฐานของส่วนนี้เพื่อให้ติดตามผลได้ง่าย:

1. Importing Packages
2. API Key Activation
3. Fundamental Data
4. Historical Data
5. Intraday Data
6. Real-time Data

สองหัวข้อแรกส่วนใหญ่เกี่ยวข้องกับการตั้งค่าสภาพแวดล้อมการเขียนโปรแกรม Python และหัวข้อที่เหลือเกี่ยวข้องกับกระบวนการแยกข้อมูล

จากหัวข้อที่สาม กระบวนการเพิ่มเติม เช่น การวิเคราะห์ข้อมูลเกี่ยวกับข้อมูลที่แยกออกมา จะดำเนินการเพื่อให้สรุปการใช้งานจริงของข้อมูลที่ได้รับ ไม่จำเป็นต้องปฏิบัติตามขั้นตอนเพิ่มเติมแต่ขอแนะนำอย่างยิ่งให้ดำเนินการดังกล่าว

เนื่องจากแต่ละหัวข้อมีคำอธิบายเชิงลึกและกระบวนการเขียนโค้ดที่ครอบคลุม บทความนี้จึงถูกแบ่งออกเป็นส่วนต่างๆ เห็นได้ชัดว่าบทความนี้เป็นส่วนแรกของซีรีส์ที่เราจะเน้นเฉพาะการดึงข้อมูลพื้นฐานเท่านั้น และหัวข้อที่เหลือจะกล่าวถึงในส่วนต่อๆ ไป อย่างที่บอกไปแล้ว มาเขียนโค้ดกันดีกว่า!

การนำเข้าแพ็คเกจ

ขั้นตอนแรกและสำคัญที่สุดในการตั้งค่าสภาพแวดล้อมการเขียนโค้ดคือการนำเข้าแพ็คเกจที่จำเป็น ในบทความนี้ เราจะใช้แพ็คเกจที่แตกต่างกันเจ็ดแพ็คเกจ ได้แก่ eod สำหรับการดึงข้อมูลทางการเงิน, pandas สำหรับการจัดการข้อมูล, matplotlib สำหรับการแสดงภาพข้อมูล, datetime สำหรับการทำงานกับวันที่และเวลา, time สำหรับฟังก์ชันที่เกี่ยวข้องกับเวลาเฉพาะ, termcolor สำหรับการปรับแต่ง ผลงานที่พิมพ์ออกมา และสุดท้าย mplfinance สำหรับการแสดงภาพข้อมูลทางการเงิน รหัสต่อไปนี้จะนำเข้าแพ็คเกจที่กล่าวถึงทั้งหมดไปยังสภาพแวดล้อมหลามของเรา:

from eod import EodHistoricalData
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
import time
from termcolor import colored as cl 
import mplfinance as mf
plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = [20, 10]

จากโค้ดที่แสดงข้างต้น เป็นที่น่าสังเกตว่านอกเหนือจากการนำเข้าแพ็คเกจที่จำเป็นแล้ว เรายังทำการเปลี่ยนแปลงบางอย่างกับการตั้งค่าเริ่มต้นของแพ็คเกจ matplotlib เพื่อปรับแต่งธีมและขนาดของการแสดงภาพ นี่เป็นขั้นตอนเสริมที่ดำเนินการเพื่อตกแต่งแปลงที่จะสร้างขึ้นในบทความนี้

นอกจากนี้ หากคุณยังไม่ได้ติดตั้งแพ็คเกจที่นำเข้าใดๆ ตรวจสอบให้แน่ใจว่าได้ติดตั้งโดยใช้คำสั่ง pip ในเทอร์มินัลของคุณ

การเปิดใช้งานคีย์ API

จำเป็นต้องลงทะเบียนคีย์ EODHD API กับแพ็คเกจเพื่อใช้ฟังก์ชันต่างๆ หากคุณไม่มีคีย์ EODHD API ขั้นแรก ให้ไปที่ "เว็บไซต์" ของพวกเขา จากนั้น เสร็จสิ้นกระบวนการ "ลงทะเบียน" เพื่อสร้างบัญชี EODHD และสุดท้าย ไปที่หน้า ""การตั้งค่า" ซึ่งคุณสามารถทำได้ ค้นหาคีย์ EODHD API ลับของคุณ สิ่งสำคัญคือต้องแน่ใจว่าคีย์ API ลับนี้จะไม่เปิดเผยต่อใครก็ตาม คุณสามารถเปิดใช้งานคีย์ API ได้โดยทำตามรหัสนี้:

api_key = '<YOUR API KEY>'
client = EodHistoricalData(api_key)

รหัสค่อนข้างง่าย ในบรรทัดแรก เรากำลังจัดเก็บคีย์ EODHD API ลับไว้ใน api_key จากนั้นในบรรทัดที่สอง เรากำลังใช้คลาส EodHistoricalData ที่ได้รับจากแพ็คเกจ eod เพื่อเปิดใช้งานคีย์ API และจัดเก็บการตอบสนองไว้ในตัวแปร client

โปรดทราบว่าคุณต้องแทนที่ <YOUR API KEY> ด้วยคีย์ EODHD API ลับของคุณ นอกเหนือจากการจัดเก็บคีย์ API พร้อมข้อความโดยตรงแล้ว ยังมีวิธีอื่นๆ สำหรับการรักษาความปลอดภัยที่ดีขึ้น เช่น การใช้ตัวแปรสภาพแวดล้อม และอื่นๆ

การดึงข้อมูลพื้นฐาน

ข้อมูลพื้นฐานประกอบด้วยข้อมูลทั่วไปเกี่ยวกับสถานะทางการเงินและตำแหน่งของตราสารทุน ข้อมูลประเภทนี้มีบทบาทสำคัญในกระบวนการวิเคราะห์และช่วยยืนยันการตัดสินใจลงทุนของเทรดเดอร์ ข้อมูลพื้นฐานของตราสารทุนใดๆ สามารถดึงออกมาได้อย่างง่ายดายโดยใช้รหัสต่อไปนี้:

ticker = 'AAPL.US'
aapl_f_info = client.get_fundamental_equity(ticker)
aapl_f_info_keys = list(aapl_f_info.keys())
for i in range(len(aapl_f_info_keys)):
    print(cl(f'{i+1}. {aapl_f_info_keys[i]}', attrs = ['bold']))

ในบรรทัดแรกของโค้ด เรากำลังสร้างตัวแปรเพื่อจัดเก็บสัญลักษณ์ของ Equity ที่เราสนใจที่จะแยกออกมา ซึ่งในกรณีของเราคือ Apple จากนั้น เมื่อใช้ฟังก์ชัน get_fundamental_equity ที่ได้รับจากแพ็คเกจ eod เราจะดึงข้อมูลพื้นฐานของ Apple

ฟังก์ชันนี้ประกอบด้วยพารามิเตอร์สองตัว: ticker และ filter_ ในโค้ดข้างต้น จะใช้เฉพาะฟิลด์ ticker ที่รับสัญลักษณ์ของหุ้นเป็นอินพุต ซึ่งในกรณีของเราคือ Apple (AAPL.US) ฟิลด์ filter_ จะถูกนำมาใช้ในส่วนนี้ของบทความนี้

สุดท้ายนี้ เราจะจัดเก็บการตอบกลับไว้ในตัวแปร aapl_f_info นอกเหนือจากโค้ดสองบรรทัดนี้ ส่วนที่เหลือเป็นทางเลือกและเขียนเพื่อสร้างเอาต์พุตต่อไปนี้:

1. General
2. Highlights
3. Valuation
4. SharesStats
5. Technicals
6. SplitsDividends
7. AnalystRatings
8. Holders
9. InsiderTransactions
10. ESGScores
11. outstandingShares
12. Earnings
13. Financials

ผลลัพธ์ที่ผลิตข้างต้นคือรายการรายละเอียดทั้งหมดที่มีอยู่ในข้อมูลพื้นฐานที่แยกออกมาของ Apple เห็นได้ชัดว่าข้อมูลพื้นฐานให้ข้อมูลในปริมาณที่เพียงพอแก่ผู้ใช้ ตั้งแต่รายละเอียดทั่วไปไปจนถึงการเงินของบริษัทและแม้แต่ธุรกรรมภายใน

แต่บางคนอาจรู้สึกหนักใจเล็กน้อยกับข้อมูลขนาดใหญ่ เนื่องจากพวกเขาต้องการเพียงรายละเอียดเฉพาะของบริษัทเท่านั้น นี่คือจุดที่พารามิเตอร์ filter_ ที่เรากล่าวถึงก่อนหน้านี้เข้ามามีบทบาท

ตามชื่อที่แนะนำ พารามิเตอร์ filter_ สามารถใช้เพื่อกรองข้อมูลพื้นฐานและแยกเฉพาะรายละเอียดที่ผู้ใช้ต้องการเท่านั้น ตัวอย่างเช่น หากบุคคลสนใจเฉพาะส่วนรายได้ของข้อมูลพื้นฐาน ก็สามารถดึงข้อมูลได้อย่างง่ายดายโดยทำตามโค้ดนี้:

earnings = client.get_fundamental_equity(ticker, filter_ = 'Earnings::History')
earnings_dates = list(earnings.keys())
cols = list(earnings[earnings_dates[0]].keys())
earnings_df = pd.DataFrame(columns = cols)
for i in range(len(earnings_dates)):
    data = earnings[earnings_dates[i]]
    earnings_df.loc[i] = data
earnings_df = earnings_df.drop('reportDate', axis = 1).set_index('date').dropna()
earnings_df = earnings_df.iloc[::-1]

บรรทัดที่ต้องการความสนใจมากที่สุดคือบรรทัดแรก มันคล้ายกับสิ่งที่เราทำก่อนหน้านี้มาก แต่การเปลี่ยนแปลงเพียงอย่างเดียวคือการเพิ่มพารามิเตอร์ filter_ ในฟังก์ชัน get_fundamental_equity พารามิเตอร์ filter_ ต้องการรูปแบบต่อไปนี้:

<MainCategory>::<SubCategory 1>::<SubCategory 2>....

ในที่นี้ <MainCategory> หมายถึงหมวดหมู่ใดหมวดหนึ่งจากสิบสามหมวดหมู่ที่เคยแสดงในผลลัพธ์ก่อนหน้านี้ และ <SubCategory> หมายถึงส่วนย่อยที่ปรากฏอยู่ภายในแต่ละหมวดหมู่หลัก ในโค้ดด้านบน เราระบุได้ถึง <SubCategory 1> แต่สามารถจำกัดให้แคบลงได้อีกตามส่วนย่อยที่เหลือ

บรรทัดโค้ดที่เหลือส่วนใหญ่จะมุ่งเน้นไปที่การทำงานกับข้อมูลที่แยกออกมา ซึ่งประกอบด้วยกระบวนการต่างๆ ของการล้างข้อมูล การจัดรูปแบบข้อมูล และการจัดการข้อมูล ผลลัพธ์สุดท้ายคือ Dataframe ของ Pandas ที่มีลักษณะดังนี้:

การวิเคราะห์ข้อมูล

ตอนนี้เรามีข้อมูลที่จัดรูปแบบอย่างดีแล้ว เรามาวิเคราะห์ข้อมูลกันดีกว่า ก่อนที่จะดำดิ่งลงสู่กระบวนการวิเคราะห์ข้อมูล จำเป็นที่เราจะต้องทำความเข้าใจเงื่อนไขที่มีอยู่ในดาต้าเฟรมให้ชัดเจนเสียก่อน

ประการแรก EPS หมายถึงกำไรต่อหุ้น ตามชื่อ มันเผยให้เห็นจำนวนเงินที่บริษัททำเงินได้จากหนึ่งหุ้น ในกรอบข้อมูล เรามีสามคอลัมน์ที่เกี่ยวข้องกับ EPS ได้แก่: epsActual , epsEstimate , epsDifference ชื่อของคอลัมน์นั้นอธิบายได้ในตัว ประการที่สอง

เปอร์เซ็นต์ที่น่าประหลาดใจ (surprisePercent) หมายถึงรายได้ที่ได้รับสูงกว่าประมาณการจริงของนักวิเคราะห์สำหรับไตรมาสหนึ่งๆ ตัวอย่างเช่น ในแถวที่สาม เราจะเห็นว่า surprisePercent เท่ากับ 10 ซึ่งหมายความว่ารายได้ของ Apple ในช่วงไตรมาสนั้นสูงกว่าประมาณการของนักวิเคราะห์ถึง 10%

คอลัมน์ที่เราจะเน้นไปที่กระบวนการวิเคราะห์เป็นหลักคือคอลัมน์ที่เกี่ยวข้องกับ EPS ตอนนี้ เราจะไม่ดำเนินการวิเคราะห์ข้อมูลอย่างละเอียด แต่เพียงเพื่อให้ได้ข้อมูลคร่าวๆ และวิธีที่ดีที่สุดในการดำเนินการดังกล่าวคือการวิเคราะห์แนวโน้ม วิธีที่นิยมที่สุดในการวิเคราะห์แนวโน้มของข้อมูลคือการใช้การแสดงภาพข้อมูล รหัสต่อไปนี้จะสร้างแปลงที่แตกต่างกันสองแบบเพื่อให้เข้าใจข้อมูลได้ดีขึ้น:

earnings_df[['epsActual', 'epsEstimate', 'epsDifference']].plot()
plt.title('AAPL EARNINGS HISTORY')
earnings_df[['epsActual', 'epsEstimate', 'epsDifference']].cumsum().plot()
plt.title('AAPL EARNINGS HISTORY (CUMULATIVE)')

โค้ดนี้เรียบง่ายมากจนไม่จำเป็นต้องมีคำอธิบายเชิงลึก ในที่นี้ ทั้งแพ็คเกจ Pandas และ matplotlib ถูกใช้ในกระบวนการแสดงภาพ แม้ว่าหลายๆ คนจะเลือกใช้ matplotlib เพียงอย่างเดียวก็ตาม รหัสจะสร้างแผนภูมิเส้นสองเส้นที่มีลักษณะดังนี้:

รูปภาพทางด้านซ้ายเป็นแผนภูมิเส้นที่แสดงแนวโน้มของข้อมูลที่เกี่ยวข้องกับ EPS ที่แตกต่างกันสามรายการในช่วงหลายปีที่ผ่านมา และรูปภาพทางด้านขวาแสดงถึงตัวเลขรายได้สะสมของ Apple จากการสังเกตแผนภูมิทั้งสองนี้ ค่อนข้างชัดเจนว่ารายได้ของ Apple กำลังเคลื่อนไหวไปในทิศทางบวกที่แข็งแกร่ง และมีแนวโน้มว่าจะดำเนินต่อไปมากขึ้น

แต่สิ่งหนึ่งที่ต้องพิจารณาอย่างจริงจังคือการลดลงอย่างช้าๆ ของ epsDifference ซึ่งแสดงให้เห็นความแตกต่างระหว่างรายได้จริงที่ได้รับกับรายได้โดยประมาณของนักวิเคราะห์ ดังนั้นเมื่อ epsDifference แตะตัวเลขติดลบ แสดงว่ารายได้ที่แท้จริงของ Apple ไม่เป็นไปตามค่าที่คาดไว้ นี่อาจไม่เป็นปัญหาใหญ่นักแต่ถึงกระนั้นก็ปลอดภัยที่จะบอกว่ามันคุ้มค่าที่จะพิจารณา

หมายเหตุปิดท้าย

ในบทความนี้ เราได้เรียนรู้เกี่ยวกับแพ็คเกจใหม่ชื่อ eod และวิธีที่สามารถใช้เพื่อดึงข้อมูลพื้นฐานของหุ้นได้ เพื่อก้าวไปอีกขั้น เราได้ทำการวิเคราะห์ข้อมูลพื้นฐานเกี่ยวกับข้อมูลที่ดึงออกมาและรวบรวมข้อมูลเชิงลึกบางส่วนเกี่ยวกับแนวโน้มกำไรของหุ้น

บทความนี้จะดำเนินต่อไปในส่วนถัดไปเกี่ยวกับการค้นหาฟังก์ชันต่างๆ ของแพ็คเกจ eod และบทความถัดไปจะเน้นไปที่การดึงข้อมูลประวัติของสินทรัพย์โดยใช้แพ็คเกจนี้ ดังนั้นโปรดติดตามตอนต่อไปเร็วๆ นี้ ดังที่กล่าวไปแล้ว คุณได้มาถึงจุดสิ้นสุดของบทความแล้ว หวังว่าคุณจะได้เรียนรู้สิ่งใหม่ในวันนี้ ขอให้มีความสุขในการเขียนโค้ด!