pandas
CSV endpoint ของ Frankfurter โหลดเข้าสู่ DataFrame ได้โดยตรง การดึงข้อมูลอัตราแลกเปลี่ยนจึงใช้โค้ดเพียงบรรทัดเดียว เหตุผลที่ควรใช้แทนการดึงอัตราตลาดทั่วไปคือความสามารถในการทำซ้ำผลลัพธ์ (reproducibility): เพียงล็อกแหล่งข้อมูลเดียว ข้อมูลย้อนหลังจะคงอยู่ตามที่ประกาศจริง การทำ backtest วันนี้จึงได้ผลตรงกับที่เคยรันเมื่อปีที่แล้ว
เริ่มต้นอย่างรวดเร็ว
ชี้ read_csv ไปที่ CSV endpoint:
import pandas as pd
df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur,gbp")คุณจะได้ DataFrame ที่มีคอลัมน์ date,base,quote,rate แบ่งเป็นหนึ่งแถวต่อหนึ่งสกุลเงินปลายทาง
การแปลงจำนวนเงิน
ข้อมูล CSV ให้เฉพาะอัตราแลกเปลี่ยน ไม่ใช่ยอดเงินที่แปลงแล้ว ให้นำจำนวนเงินไปคูณกับคอลัมน์ rate หากต้องการค่าเดี่ยวโดยไม่ใช้ pandas ให้เรียก endpoint อัตราแลกเปลี่ยนรายคู่ด้วย requests:
import requests
rate = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur").json()["rate"]
total = 100 * rateการล็อกแหล่งข้อมูลทางการ
โดยค่าเริ่มต้นคุณจะได้รับอัตราเฉลี่ยรวมจากทุกแหล่งข้อมูล เพิ่ม providers เพื่อล็อกหน่วยงานเดียว ซึ่งช่วยให้ผลการวิเคราะห์ตรวจสอบย้อนกลับได้ เนื่องจากหลายเขตอำนาจศาลกำหนดให้ใช้อัตราที่ประกาศโดยธนาคารกลางของตนเองเมื่อแปลงยอดเงินตราต่างประเทศ
df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur&providers=ecb")ECB- อัตราอ้างอิงของธนาคารกลางยุโรป มาตรฐานสำหรับภาษีมูลค่าเพิ่มและศุลกากรในสหภาพยุโรป
NBP- ธนาคารแห่งชาติโปแลนด์ (Narodowy Bank Polski) สำหรับการคำนวณภาษีมูลค่าเพิ่มและภาษีเงินได้นิติบุคคลของโปแลนด์
CNB- อัตราประกาศของธนาคารแห่งชาติเช็ก ใช้สำหรับงานบัญชีและภาษีในสาธารณรัฐเช็ก
BCB- อัตรา PTAX ของธนาคารกลางบราซิล (Banco Central do Brasil) มาตรฐานอ้างอิงสำหรับสัญญาและภาษีในบราซิล
BANXICO- อัตรา FIX ของธนาคารกลางเม็กซิโก (Banco de México) สำหรับการชำระภาระผูกพันสกุลดอลลาร์สหรัฐ
ดูแหล่งข้อมูลทั้งหมด แหล่งข้อมูลที่ล็อกไว้จะอัปเดตตามตารางเวลาประกาศของหน่วยงานนั้นเอง อัตราล่าสุดจึงอาจตามหลังอัตราเฉลี่ยรวมอยู่หนึ่งวัน
ข้อมูลอนุกรมเวลาย้อนหลัง
ใช้ from สำหรับช่วงวันที่ และใช้ group=month เพื่อให้ได้ข้อมูลเดือนละหนึ่งแถว แปลงคอลัมน์วันที่และตั้งเป็นดัชนี จากนั้นนำไปพล็อตกราฟหรือทำ resample ได้ทันที ทั้งนี้ ข้อมูลย้อนหลังแบบอัตราเฉลี่ยรวมอาจขยับเล็กน้อยเมื่อมีข้อมูลใหม่เข้ามา จึงควรล็อกแหล่งข้อมูลสำหรับงานที่ต้องการความคงที่ของผลลัพธ์
df = pd.read_csv(
"https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd"es=gbp&providers=bbk&group=month",
parse_dates=["date"],
index_col="date",
)
df["rate"].plot() คิวรีนี้ดึงข้อมูลดอลลาร์สหรัฐเทียบกับปอนด์สเตอร์ลิงย้อนกลับไปถึงปี 1949 จากคลังข้อมูลของธนาคารกลางเยอรมนี (Deutsche Bundesbank) คุณจะเห็นอัตราผูกค่าเงินที่ $2.80 คงที่ต่อเนื่องหลายปีก่อนจะยุติลงในปี 1967 ข้อมูลย้อนหลังลึกๆ มาจากอัตราประกาศที่แฟรงก์เฟิร์ตของ Bundesbank ทั้งดอลลาร์เทียบกับมาร์กเยอรมันตั้งแต่ปี 1948 และคู่เงินดอลลาร์อื่นๆ ส่วนใหญ่ในช่วงปี 1949 ถึง 1970 จากนั้นธนาคารกลางยุโรปจึงรับช่วงต่อตั้งแต่ปี 1999 ดังนั้นหากต้องการอนุกรมเวลายุคปัจจุบันแบบต่อเนื่อง ให้ใช้อัตราเฉลี่ยรวมเริ่มต้นหรือระบุ providers=ecb