Settrade Open API: ย้ายจาก Amibroker/VBA มา Python — และทำไมโค้ดที่ส่งคำสั่งซื้อขายต้องเริ่มใน sandbox เสมอ
API ทางการของฝั่งซื้อขายหุ้นและ TFEX ในไทย: SDK รองรับ Python, Amibroker และ Excel · SDK v2 บน PyPI ออกรุ่นล่าสุด 2.2.1 (2 ต.ค. 2025) · มี sandbox ให้ทดลองส่งคำสั่งโดยไม่ใช้เงินจริง สรุปจากซอร์สโค้ด SDK จริง และเช็กลิสต์ model risk ก่อนปล่อยโค้ดที่แตะบัญชีซื้อขาย
โดย วรัญชัย ยิ่งคำนึง (Boom) · เผยแพร่ครั้งแรก · ตรวจทานล่าสุด
Terminal ของผมไม่ได้ส่งคำสั่งซื้อขาย — มันอ่านเอกสาร แต่คนที่สร้าง fintech ในไทยจำนวนมากจะเจอคำถามนี้เร็วหรือช้า: "ถ้า product ต้องแตะบัญชีซื้อขาย ช่องทางทางการคืออะไร" คำตอบคือ Settrade Open API และบทความนี้คือสิ่งที่ผมอยากรู้ก่อนเขียนบรรทัดแรก: มันคืออะไร หน้าตาโค้ดจริงเป็นยังไง และต้องระวังอะไรในฐานะคนทำ model risk
บทความเดิมเมื่อมิถุนายนเน้นการย้ายจาก Amibroker/VBA มา Python เวอร์ชันนี้เขียนใหม่ให้เป็นความรู้พื้นฐานของคนสร้าง product พร้อมตรวจกับซอร์สโค้ด SDK จริง
Settrade Open API คืออะไร และรองรับภาษาอะไรบ้าง?
Settrade Open API ให้ SDK สำหรับสร้างแอปพลิเคชันซื้อขายอัตโนมัติ (developer.settrade.com) โดย repo ตัวอย่างทางการระบุว่ารองรับ 3 ภาษา:
| ภาษา | เหมาะกับ |
|---|---|
| Python | ระบบที่ต้องต่อกับข้อมูล/บริการอื่น ทดสอบอัตโนมัติ และดูแลระยะยาว |
| Amibroker Formula Language (AFL) | คนที่มีกลยุทธ์อยู่ใน Amibroker แล้ว |
| Visual Basic (Excel) | งานเล็กที่อยู่ใน spreadsheet |
ถ้าคุณจะสร้าง product ไม่ใช่แค่สคริปต์ส่วนตัว Python คือทางที่ต่อกับเครื่องมืออื่นได้กว้างที่สุด และ AI agent ช่วยเขียน/ทดสอบได้ดีที่สุด
หน้าตาโค้ดจริงของ SDK v2 เป็นยังไง?
ผมดาวน์โหลด settrade-v2 รุ่น 2.2.1 จาก PyPI มาเปิดดูซอร์สโค้ดตรงๆ คลาสหลักที่ใช้เข้าระบบคือ Investor ซึ่งรับพารามิเตอร์แบบนี้:

class Investor(_BaseUser):
def __init__(
self,
app_id: str,
app_secret: str,
app_code: str,
broker_id: str,
is_auto_queue: bool = False,
):
จากนั้นเรียก investor.Equity(account_no) หรือ investor.Derivatives(account_no) เพื่อทำงานกับบัญชีหุ้นหรืออนุพันธ์ ส่วนค่า app_id กับ app_secret ได้จากการสร้าง Application ใน developer portal — เก็บไว้ในที่เก็บความลับ ห้ามฝังในโค้ดหรือ commit เข้า git (หลักเดียวกับที่ harness ของผมบังคับด้วย hook ใน บทความเรื่อง harness)
ในซอร์สโค้ดยังมีการแยก 2 สภาพแวดล้อม คือ prod และ uat ชัดเจน ซึ่งเป็นสิ่งที่ product ที่ดีควรทำเหมือนกัน: โค้ดชุดเดียว สลับปลายทางด้วยการตั้งค่า ไม่ใช่แก้โค้ด
SDK อัปเดตบ่อยแค่ไหน?

| รุ่น | วันที่ออก (PyPI) |
|---|---|
| 2.1.4 | 31 ม.ค. 2023 |
| 2.1.5 | 15 ก.พ. 2024 |
| 2.2.0 | 17 เม.ย. 2025 |
| 2.2.1 | 2 ต.ค. 2025 |
จังหวะออกรุ่นราวปีละครั้งบอกว่า ต้อง pin เวอร์ชัน ใน product และทดสอบซ้ำทุกครั้งที่อัปเกรด — API ที่แตะเงินไม่ควรอัปเดตแบบ "ลองดูใน production"
ทำไมต้องเริ่มใน sandbox เสมอ?
developer portal มีปุ่มลงทะเบียน sandbox ให้สร้าง Application ID และ Secret สำหรับทดลอง และ repo ตัวอย่างทางการใช้ค่า broker_id="SANDBOX" กับ app_code="SANDBOX" ในโค้ดตัวอย่าง นั่นแปลว่าคุณยิงคำสั่งซื้อขายทดลองได้โดยไม่แตะเงินจริงสักบาท

ในมุม model validation โค้ดที่ส่งคำสั่งซื้อขายคือโมเดลประเภทที่ ผิดแล้วเสียเงินทันที ไม่มีรอบให้แก้ตัว เช็กลิสต์ขั้นต่ำก่อนแตะบัญชีจริง:
| คำถาม | ทำไม |
|---|---|
| ถ้าส่งคำสั่งซ้ำเพราะเน็ตหลุด จะเกิดอะไร | คำสั่งซ้ำ = ถือสถานะเกินที่ตั้งใจ |
| มีเพดานต่อคำสั่ง/ต่อวันที่โค้ดข้ามไม่ได้ไหม | บั๊กเดียวไม่ควรเผาทั้งพอร์ต |
| ตลาดปิด ราคาไม่มา หรือ API ตอบช้า โค้ดทำอะไร | กรณีขอบคือที่ที่ระบบพังจริง |
| ใครกดหยุดได้ และหยุดได้เร็วแค่ไหน | ระบบอัตโนมัติต้องมีเบรกมือ |
| log ทุกคำสั่งพร้อมเหตุผลไหม | ตรวจย้อนไม่ได้ = หาต้นเหตุไม่เจอ แก้ซ้ำไม่ได้ |
AI agent ช่วยเขียนโค้ดเชื่อม API ได้เร็วมาก แต่ มันไม่ควรเป็นคนตัดสินว่าโค้ดพร้อมแตะเงิน — ด่านนั้นต้องเป็นคน ส่วนเรื่องความเสี่ยงของโมเดลที่ต้องออกแบบไว้ตั้งแต่ต้น อ่านต่อใน Model risk ที่ต้องออกแบบไว้ตั้งแต่วันแรก
เส้นที่ห้ามข้าม
- ใช้กับ บัญชีของตัวเอง ในวงเงินที่รับได้ — การเขียนระบบส่งคำสั่งแทนเงินของคนอื่นเป็นเรื่องที่มีกฎหมายกำกับ ต้องมีใบอนุญาตที่เกี่ยวข้อง
- API คือเครื่องมือ ไม่ใช่กลยุทธ์ — การส่งคำสั่งได้อัตโนมัติไม่ได้ทำให้การตัดสินใจดีขึ้น
- ข้อมูลที่ได้ผ่าน API อยู่ภายใต้ข้อตกลงของโบรกเกอร์และผู้ให้บริการ — ตรวจสิทธิ์ก่อนเอาไปแสดงใน product (ดู ข้อมูลหุ้นไทยมาจากไหน)
สรุป
Settrade Open API คือทางทางการของไทยสำหรับโค้ดที่ต้องแตะการซื้อขาย SDK Python v2 ใช้งานจริงได้และแยก prod/uat ในตัว แต่สิ่งที่แยกระบบที่ปลอดภัยออกจากระบบที่เผาเงิน ไม่ใช่ SDK — คือวินัยทดสอบใน sandbox เพดานที่โค้ดข้ามไม่ได้ และคนที่ถือเบรกมือ