# แหล่งข้อมูลและขอบเขต — ฉบับตรวจ 6

เอกสารทฤษฎียังใช้แหล่งที่ Nuth ระบุหรือแนบมา ข้อมูลราคาเปลี่ยนจาก Yahoo Finance (^GSPC) เป็น SPY จาก Webull OpenAPI ตามคำขอวันที่ 28 กันยายน 2026 ให้ Backtest ใช้ข้อมูลที่ดึงด้วย Webull API ไม่ได้เพิ่มแหล่งอ้างอิงทฤษฎีใหม่

1. [Robo Trade Notes](https://nutdnuy.github.io/robo-trade-notes/) — รูปแบบเว็บไซต์และลำดับบทเรียน
2. [Introduction of Backtest](https://nutdnuy.github.io/robo-trade-notes/chapter-13.html) — ความต่อเนื่องเรื่อง Backtest, Tear Sheet, ผลตอบแทน ความเสี่ยง ต้นทุน และ Benchmark ใช้สำเนาต้นฉบับในโปรเจกต์ Robo Trade Notes ประกอบการตรวจ
3. **Yves Hilpisch, Python for Algorithmic Trading: From Idea to Cloud Deployment** — ไฟล์ `python for algorithmic trading book (js).pdf` ที่ Nuth แนบ เลขหน้าด้านล่างคือลำดับหน้า PDF เริ่มที่ 1 ไม่ใช่เลขหน้าพิมพ์
4. ภาพหน้าจอที่ Nuth แนบ เวลา 16.37.31 และ 16.37.37 วันที่ 26 กันยายน 2569 — ใช้อ้างอิงรูปแบบตาราง Risk and Return Metrics และกราฟ Drawdowns สองพอร์ต ไม่ได้นำตัวเลขในภาพมาใช้เป็นข้อมูลหรืออ้างผลของกลยุทธ์

## ตำแหน่งที่ตรวจในหนังสือ

| หน้า PDF | ประเด็น | การนำมาใช้และข้อแตกต่าง |
| --- | --- | --- |
| 83–85 | สร้างสถานะจาก SMA, เลื่อนสถานะด้วย `.shift(1)`, ผลตอบแทนสะสมและการแปลงความผันผวนเป็นรายปี | ใช้รองรับหลักที่ต้องแยกเวลารู้สัญญาณออกจากเวลารับผลตอบแทน กฎ EMA 20/200 และซื้อขายที่แท่งถัดไปเป็นกติกาที่กำหนดในบทนี้เอง |
| 94 | ต้นทุนตามสัดส่วนมูลค่าซื้อขาย | ตัวอย่างนี้กำหนด 10 bps ต่อด้าน และหักตอนคำสั่งเกิดจริง |
| 156 | จำนวนการเปลี่ยนสถานะและผลจากต้นทุน | ไม่เท่ากับจำนวน round-trip trades และไม่ใช้ prediction hit ratio ของหนังสือเป็น Win Rate รายเทรด |
| 277–278 | ผลตอบแทนแบบ log, mean, volatility และ Sharpe | บทนี้ใช้ simple daily net returns, sample SD และ 252 ช่วงต่อปี พร้อมระบุสูตรเอง ไม่คัดตัวเลขผลทดสอบในหนังสือ |
| 279–280 | จุดสูงสุดสะสม การลดจากยอด และระยะเวลาระหว่างการกลับถึงยอด | หนังสือแสดง drawdown magnitude บวก; บทนี้ใช้ค่าลบในกราฟ และแยกช่วงยังไม่ฟื้นเมื่อจบการทดสอบ |

## สูตรที่ยังขาดแหล่งอธิบายโดยตรง

แหล่งที่ให้มายังไม่มีคำอธิบายครบสำหรับ **Payoff Ratio, Expectancy, Profit Factor และ Sortino Ratio ตามนิยามในบท** รวมทั้งข้อตกลงครบถ้วนของสถิติรายการซื้อขายที่ปิดแล้ว จึงไม่อ้างว่าสูตรเหล่านี้มาจากหนังสือ บทนี้ระบุนิยามและตัวหารอย่างเปิดเผย พร้อมตรวจจากเลขคณิตและโค้ดของตัวอย่าง หากต้องการเอกสารรองรับนิยามเหล่านี้เพิ่มเติม ต้องใช้เอกสารที่ Nuth ระบุเพิ่ม

Sortino ใช้ MAR รายวัน, downside squared deviations หารด้วยจำนวนวันทั้งหมด และ Sharpe ใช้ค่าเฉลี่ยผลตอบแทนส่วนเกิน ไม่ใช่ CAGR ซอฟต์แวร์ที่ใช้ข้อตกลงต่างกันอาจให้ผลต่างกัน ภาพตารางที่แนบไม่ระบุสูตรหรือข้อมูลต้นทาง จึงใช้ยืนยันนิยามและตัวเลขไม่ได้

## ที่มาของข้อมูลและภาพ

[Webull Thailand · List Stock Historical Bars](https://developer.webull.co.th/apis/docs/reference/trade-api/historical-bars) เป็นแหล่งราคา ดึงด้วย `webull_data.py --fetch --environment production` ผ่าน `webull-openapi-python-sdk` 3.0.0 `get_batch_history_bar` (`POST /market-data/stocks/bars/list`) พารามิเตอร์ symbols `SPY`, category `US_ETF`, timespan `D`, count 1,200, `real_time_required=True`, trading_sessions `RTH` ดึงวันที่ 28 กันยายน 2026 ได้ 5,467 แท่ง ช่วง 2005-01-03 ถึง 2026-09-25

หน้าอ้างอิงของ Webull Thailand ไม่ได้ระบุพารามิเตอร์ช่วงวันที่ แต่ SDK 3.0.0 มีช่อง `end_time` และเซิร์ฟเวอร์รับค่านี้ สคริปต์จึงขอหน้าถัดไปด้วย `end_time` ก่อนแท่งที่เก่าที่สุด และหยุดพร้อมแจ้งหากเซิร์ฟเวอร์ไม่ใช้ค่านี้ วันซื้อขายตรงกับปฏิทินของดัชนี S&P 500 จาก Yahoo Finance ที่บทเคยใช้ทุกวันในช่วง 2005-02-24 ถึง 2026-09-25 ไม่มีวันขาด

ช่วงทดสอบคือ 2006-09-26 ถึง 2026-09-25 รวม 5,031 แท่งรายวัน ข้อมูลก่อนหน้า 400 วันเริ่ม 2005-02-24 ใช้เตรียม EMA และไม่นับผลตอบแทน แถวก่อนหน้านั้นเก็บไว้ตามที่ดึงมาแต่ไม่ได้ใช้ ไม่เติมวันหยุดและไม่สร้างราคาแทน

SDK ระบุว่าแท่งรายวันเป็นราคาที่ปรับย้อนหลัง อัตราส่วนราคาปิด SPY ต่อ ^GSPC เพิ่มจาก 0.0694 (2006-09-26) เป็น 0.0996 (2026-09-25) สอดคล้องกับการรวมเงินปันผลไว้ในราคา ผลจึงใกล้ผลตอบแทนรวมของ SPY ไม่ใช่ดัชนีราคา ยังไม่รวมภาษีหัก ณ ที่จ่ายของเงินปันผล การจำลองซื้อ SPY เป็นเศษหน่วยด้วยเงินตั้งต้น 100,000 USD ไม่มีการแปลงเงินบาท

EMA เริ่มจากราคาปิดแรกในช่วงเตรียม ตรวจสัญญาณหลังปิดและซื้อขายที่ราคาเปิดวันถัดไป วันแรกใช้สัญญาณจากช่วงเตรียม ต้นทุน 10 bps ต่อด้าน ดอกเบี้ยเงินสดและ risk-free/MAR เป็นศูนย์ตามสมมติฐาน ปิดสถานะสุดท้ายที่ราคาปิดวันสิ้นข้อมูลพร้อมต้นทุน และระบุ forced_end Benchmark ถือ SPY ด้วยทุนและอัตราต้นทุนเดียวกัน

เก็บไฟล์ที่ดึงได้ใน `data/spy-webull-daily.csv` พร้อมพารามิเตอร์ วิธีแบ่งหน้า เวลาดึง และ SHA-256 ใน `data/provenance.json` ไม่ได้เก็บ JSON ดิบที่ API ตอบกลับ สคริปต์ตรวจเปรียบเทียบ OHLC ทุกแถวกับไฟล์นี้ ตรวจวันที่ซ้ำ ลำดับเวลา และค่า EMA ยังไม่ได้ยืนยันราคาทุกวันกับผู้ให้บริการรายที่สอง

`ema-bars.csv` เก็บราคาเต็มความละเอียด; `trades.csv` และ `equity-daily.csv` เป็นผลจาก backtest เดียวกัน; `ema-results.json` เก็บผลคำนวณ; `ema-data.json` ปัดราคาสำหรับวาดภาพเท่านั้น กราฟ SVG และห้องทดลองอ่านข้อมูลนี้ ส่วนตัวเลื่อน Expectancy เป็นการสำรวจสมการ ไม่ได้เปลี่ยนรายการซื้อขายหรือรัน EMA ใหม่

ไม่ได้รวม PDF ส่วนตัวหรือภาพหน้าจอที่แนบไว้ในชุดดาวน์โหลด ไม่ได้ตรวจ QuantStats หรืออ้างพฤติกรรมของไลบรารีภายนอกใดเพิ่มเติม

## นิยามและกราฟที่เพิ่มจากคอมเมนต์ฉบับตรวจ 6

กราฟการแจกแจงใช้กำไรขาดทุนสุทธิรายเทรดครบ 17 รายการ แท่งนับช่วงกว้างเท่ากัน 50,000 USD พร้อมจุดรายเทรด ไม่มีการ fit การแจกแจงทฤษฎีหรือสร้างข้อมูลเพิ่ม กราฟ Cumulative Return ใช้ `equity / initial_equity - 1` ของพอร์ตทั้งสองหลังต้นทุน

บทนี้กำหนด Drawdown period เป็นยอดเดิมถึงจุดต่ำสุด, Recovery period เป็นจุดต่ำสุดถึงวันแรกที่กลับถึงยอดเดิม และ Underwater period เป็นยอดเดิมถึงวันที่กลับถึงยอดเดิม ใช้ผลต่างดัชนีวันซื้อขาย ไม่บวกวันเริ่มซ้ำ ชื่อเหล่านี้เป็นข้อตกลงที่ระบุในบท ไม่อ้างว่าเป็นชื่อมาตรฐานเดียวกันของทุกโปรแกรม หรือว่าหนังสือใช้คำทั้งสามตรงกัน
