ดึงข้อมูลกองทุนด้วย SEC API ด้วย Python

NUTHDANAI WANGPRATHAM
QUANT I LOVE U
Published in
Sep 27, 2022

การลงทุนในกองทุนเป็นที่การลงทุนที่เข้าถึงได้ง่ายแต่การวิเคราะห์การลงทุนในกองทุนการเป็นเรื่องที่ไม่ยากเลย แต่เราจะเอาข้อมูลมาจากไหนแหละก็มาจาก SEC API ไง

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

เนื่องจาก Sec API มีข้อจำกัดที่เรียกได้สูงสุด 5 ครั้งต่อ 1 วิ ดังนั้นเราต้องสร้าง RateLimiter

# 1 วิ เรียกได้ 5 ครั้งclass RateLimiter:def __init__(self, headers):headers = headersreturn@rate_limited(1500, 300)def call_get_api(self, url):response = requests.get(url, headers=headers)if response.status_code != 200:print('Cannot call API: {}'.format(response.status_code))return responselimiter = RateLimiter(headers)

การจะดึงข้อมูลกองทุนได้เราต้องมีรหัสกองกองแต่การที่จะมีรหัสกองเราต้องมีรหัส บลจ ก่อน ดังนั้นเราต้องดึงรายชื่อ amc เป็นอันดับแรก

req = requests.get(f'https://api.sec.or.th/FundFactsheet/fund/amc', headers = headers)amc = pd.read_json(req.content)

หลังจากนั้นเราก็จะสามารถดึงรายชื่อกองทุน

all_funds = pd.DataFrame(columns=['proj_id', 'proj_abbr_name','proj_name_en', 'proj_name_th','unique_id'])for unique_id in amc.unique_id:req = requests.get(f'https://api.sec.or.th/FundFactsheet/fund/amc/{unique_id}', headers = headers)projects = pd.read_json(req.content)all_funds = all_funds.append(projects[['proj_id', 'proj_abbr_name','proj_name_en', 'proj_name_th','unique_id']])

URL ของ Fact Sheet และรายงานประจำปีของกองทุน

proj_id = "M0000_2553"req = limiter.call_get_api(url=f'https://api.sec.or.th/FundFactsheet/fund/{proj_id}/URLs')temp_data = json.loads(req.content)

ประเภทกองทุนตามนโยบายกองทุน

#  ประเภทกองทุนตามนโยบายกองทุนproj_id = "M0000_2553"req = limiter.call_get_api(url=f'https://api.sec.or.th/FundFactsheet/fund/{proj_id}/policy')temp_data = json.loads(req.content)

ใครอยากดึงข้อมูลอื่นๆลองไปดู code ผมได้

https://colab.research.google.com/drive/18POtkFwmCGj905tLYZIhVQJLRuhkaAlQ?usp=sharing

--

--

NUTHDANAI WANGPRATHAM
QUANT I LOVE U

I am a learner and have a multipotential life. You can contact me at nutdnuy@gmail.com