Boom Field Lab

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) · เผยแพร่ครั้งแรก · ตรวจทานล่าสุด

มือนักพัฒนาบนคีย์บอร์ดในห้องมืด หน้าจอเป็นบล็อกสีเบลอ พร้อมข้อความ ลองใน sandbox ก่อนเงินจริง

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 ซึ่งรับพารามิเตอร์แบบนี้:

การ์ดโค้ดจริงจาก SDK settrade_v2 รุ่น 2.2.1: คลาส Investor รับ app_id, app_secret, app_code, broker_id และ is_auto_queue ค่าเริ่มต้น False
signature ของ Investor จากไฟล์ settrade_v2/user.py ใน SDK รุ่น 2.2.1 (PyPI) · เปิดดูเมื่อ 27 ก.ย. 2026
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 อัปเดตบ่อยแค่ไหน?

เส้นเวลารุ่นของ SDK settrade-v2 บน PyPI: 2.1.4 มกราคม 2023, 2.1.5 กุมภาพันธ์ 2024, 2.2.0 เมษายน 2025, 2.2.1 ตุลาคม 2025
4 รุ่นล่าสุดของ settrade-v2 บน PyPI ตามวันที่อัปโหลด · ตรวจเมื่อ 27 ก.ย. 2026
รุ่นวันที่ออก (PyPI)
2.1.431 ม.ค. 2023
2.1.515 ก.พ. 2024
2.2.017 เม.ย. 2025
2.2.12 ต.ค. 2025

จังหวะออกรุ่นราวปีละครั้งบอกว่า ต้อง pin เวอร์ชัน ใน product และทดสอบซ้ำทุกครั้งที่อัปเกรด — API ที่แตะเงินไม่ควรอัปเดตแบบ "ลองดูใน production"

ทำไมต้องเริ่มใน sandbox เสมอ?

developer portal มีปุ่มลงทะเบียน sandbox ให้สร้าง Application ID และ Secret สำหรับทดลอง และ repo ตัวอย่างทางการใช้ค่า broker_id="SANDBOX" กับ app_code="SANDBOX" ในโค้ดตัวอย่าง นั่นแปลว่าคุณยิงคำสั่งซื้อขายทดลองได้โดยไม่แตะเงินจริงสักบาท

แผนภาพ 4 ขั้นก่อนแตะเงินจริง: เขียนและทดสอบใน sandbox, ทดสอบกรณีขอบเช่นคำสั่งซ้ำและตลาดปิด, คนตรวจโค้ดและขีดจำกัด, แล้วจึงใช้กับบัญชีของตัวเองในวงเงินเล็ก
เส้นทางที่ผมใช้กับโค้ดทุกชิ้นที่แตะเงิน · ไม่ใช่คำแนะนำการลงทุน

ในมุม model validation โค้ดที่ส่งคำสั่งซื้อขายคือโมเดลประเภทที่ ผิดแล้วเสียเงินทันที ไม่มีรอบให้แก้ตัว เช็กลิสต์ขั้นต่ำก่อนแตะบัญชีจริง:

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

AI agent ช่วยเขียนโค้ดเชื่อม API ได้เร็วมาก แต่ มันไม่ควรเป็นคนตัดสินว่าโค้ดพร้อมแตะเงิน — ด่านนั้นต้องเป็นคน ส่วนเรื่องความเสี่ยงของโมเดลที่ต้องออกแบบไว้ตั้งแต่ต้น อ่านต่อใน Model risk ที่ต้องออกแบบไว้ตั้งแต่วันแรก

เส้นที่ห้ามข้าม

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

สรุป

Settrade Open API คือทางทางการของไทยสำหรับโค้ดที่ต้องแตะการซื้อขาย SDK Python v2 ใช้งานจริงได้และแยก prod/uat ในตัว แต่สิ่งที่แยกระบบที่ปลอดภัยออกจากระบบที่เผาเงิน ไม่ใช่ SDK — คือวินัยทดสอบใน sandbox เพดานที่โค้ดข้ามไม่ได้ และคนที่ถือเบรกมือ

BOOM FIELD LAB

อยากเห็นว่าเครื่องมือพวกนี้ประกอบร่างเป็น Terminal จริงได้ยังไง?

Workshop 60 นาที — ดูการทำงานจริงบนหน้าจอ พร้อม workbook ให้ลงมือตาม ไม่ใช่สไลด์ทฤษฎี