Robo Trade Notes · บทที่ 14 · เอกสารตรวจ

Performance Report
EMA20 / EMA200 · daily bars

ราคาจริง SPY รายวันจาก Webull OpenAPI · การซื้อขายและต้นทุนเป็นแบบจำลอง ราคาปรับย้อนหลังแล้วจึงสะท้อนเงินปันผล

2006-09-26 ถึง 2026-09-25 · 5031 วันซื้อขาย · 1 แท่งต่อวัน · EMA 20/200 วัน · เงินเริ่มต้น 100,000 USD · ต้นทุน 0.10% ต่อข้าง · long/cash · สัญญาณเมื่อแท่งปิด ส่งคำสั่งที่ราคาเปิดแท่งถัดไป

ผลตอบแทนและความเสี่ยงจากข้อมูลรายวัน

ตัวชี้วัดEMA20 / EMA200Buy & Hold
มูลค่าพอร์ตปลายงวด (USD)467,410.19837,456.17
Total Return367.41%737.46%
CAGR (เวลาตามปฏิทิน)8.02%11.21%
ความผันผวนต่อปีจากผลตอบแทนรายวัน13.07%19.44%
Sharpe Ratio (ต่อปี; risk-free = 0)0.660.65
Sortino Ratio (ต่อปี; MAR = 0)0.890.91
Maximum Drawdown รายวัน-26.67%-55.19%
ต้นทุนจริงที่หักในแบบจำลอง (USD)6,113.62938.19
ผลตอบแทนสะสม: EMA 20/200 เทียบกับซื้อแล้วถือ SPY
-109.3%119.6%348.6%577.5%806.5%จุดเริ่มต้น 0%2006-09-262011-09-222016-09-222021-09-212026-09-25

━ EMA20/EMA200 ━ Buy & Hold SPY

แกนนอน: วันที่ซื้อขาย 2006-09-26 ถึง 2026-09-25

ทั้งสองเส้นเริ่มที่ผลตอบแทนสะสม 0% จากเงินเริ่มต้นเท่ากัน ก่อนหักค่าซื้อครั้งแรก แกนตั้งคำนวณจากมูลค่าพอร์ตในวันนั้น ÷ เงินเริ่มต้น − 1 จึงอ่านได้ว่าเงินเพิ่มหรือลดจากจุดเริ่มต้นกี่เปอร์เซ็นต์ เส้นที่อยู่สูงกว่าให้ผลตอบแทนสะสมสูงกว่า ณ วันนั้น

เมื่อจบช่วงทดสอบ EMA ได้ 367.41% เทียบกับซื้อแล้วถือที่ 737.46% ตัวเลขเป็นผลหลังต้นทุนตามแบบจำลองเดียวกัน ช่วงที่ EMA ถือเงินสด เส้นจะราบเพราะสมมติว่าดอกเบี้ยเงินสดเป็นศูนย์ จึงอาจช่วยหลบการลงบางช่วงและพลาดการขึ้นบางช่วงได้ ต้องอ่านกราฟ Drawdown ประกอบเพื่อดูความเสี่ยงระหว่างทาง

Benchmark คือการถือ SPY ตั้งแต่วันแรกถึงวันสุดท้าย ราคาจาก Webull ปรับย้อนหลังแล้ว จึงสะท้อนเงินปันผลในราคา เส้นนี้เป็นผลตอบแทนสะสมตลอดช่วง ไม่ใช่ CAGR ต่อปี

เงินเริ่มต้นเท่ากัน แต่เส้นทางมูลค่าพอร์ตต่างกัน
-9,298219,640448,577677,515906,4522006-09-262011-09-222016-09-222021-09-212026-09-25

━ EMA20/EMA200 ━ Buy & Hold SPY

แกนนอน: วันที่ซื้อขาย 2006-09-26 ถึง 2026-09-25

Drawdown รายวันวัดระยะห่างจากจุดสูงสุดของแต่ละพอร์ต
-59.6%-44.7%-29.8%-14.9%0.0%2006-09-262011-09-222016-09-222021-09-212026-09-25

━ EMA20/EMA200 ━ Buy & Hold SPY

แกนนอน: วันที่ซื้อขาย 2006-09-26 ถึง 2026-09-25

Maximum Drawdown วัดจากมูลค่าพอร์ตสิ้นวัน จึงไม่เห็นจุดต่ำระหว่างวันทั้งหมด

ช่วงที่ขาดทุนลึกที่สุดใช้เวลาลงและฟื้นนานเท่าไร
มูลค่าพอร์ตเทียบยอดเดิม (%)-0.0%-7.3%-14.7%-22.0%-29.3%ยอดเดิม2020-02-19จุดต่ำสุด2020-03-12กลับถึงยอดเดิม2021-02-05Drawdown period: 16 วันซื้อขายRecovery period: 228 วันซื้อขายUnderwater period: 244 วันซื้อขาย

Maximum Drawdown = -26.67% บอกความลึกของการลดลงจากยอดเดิม ส่วนระยะเวลาทั้งสามบอกว่าเงินอยู่ต่ำกว่ายอดเดิมนานเพียงใด กราฟนี้ขยายเฉพาะรอบที่ขาดทุนลึกที่สุด โดยใช้ยอดเดิมของรอบนี้เป็น 0%

ยอดเดิมวันที่ 2020-02-19 → จุดต่ำสุดวันที่ 2020-03-12 → กลับถึงยอดเดิมวันที่ 2021-02-05: 16 + 228 = 244 วันซื้อขาย ช่วงฟื้นไม่ได้แปลว่าพอร์ตขึ้นทุกวัน เพียงวัดเวลาจากจุดต่ำสุดจนกลับถึงระดับเดิมเป็นครั้งแรก

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

สถิติรายเทรดหลังหักต้นทุน

จำนวนเทรดปิดครบ17
ชนะ / แพ้ / เสมอ8 / 9 / 0
Win Rate47.06%
Average Win (USD)54,513.21
Average Loss (USD; ขนาดบวก)7,632.83
Payoff Ratio7.14
Expectancy (USD ต่อเทรด)21,612.36
Profit Factor6.35
รายการส่งคำสั่งที่เกิดการซื้อ/ขาย34
ปิดสถานะบังคับปลายการทดสอบ1

จำนวนเทรดนับการเปิดจนปิดสถานะครบหนึ่งรอบ ส่วนจำนวนรายการซื้อขายนับการซื้อและขายแยกกัน

กำไร–ขาดทุนส่วนใหญ่กระจุกอยู่ที่ใด และไม้ใหญ่ดึงค่าเฉลี่ยอย่างไร
จำนวนเทรด0123456789-20,000 ถึง 0 USD: 9 เทรด90 ถึง 20,000 USD: 3 เทรด320,000 ถึง 40,000 USD: 0 เทรด40,000 ถึง 60,000 USD: 1 เทรด160,000 ถึง 80,000 USD: 1 เทรด180,000 ถึง 100,000 USD: 2 เทรด2100,000 ถึง 120,000 USD: 1 เทรด1-20,000020,00040,00060,00080,000100,000120,000กำไร–ขาดทุนสุทธิต่อเทรด (USD)จุดแต่ละจุด = หนึ่งเทรดที่ปิดครบT14: -19,355.85 USDT15: -10,957.99 USDT10: -10,630.73 USDT8: -7,906.56 USDT6: -6,770.33 USDT12: -4,846.07 USDT2: -4,211.48 USDT3: -2,949.61 USDT4: -1,066.90 USDT7: 4,420.04 USDT5: 8,956.07 USDT1: 10,637.89 USDT11: 56,768.93 USDT9: 65,226.19 USDT16: 86,160.58 USDT13: 86,263.07 USDT17: 117,672.92 USD0 USD0.00−Average Loss-7,632.83Average Win54,513.21

แท่งแสดงจำนวนเทรดในช่วงกำไร–ขาดทุนที่กว้างเท่ากัน ช่วงละ 20,000 USD ส่วนจุดด้านล่างแสดงกำไร–ขาดทุนจริงของแต่ละเทรดรวม 17 ไม้ การเลื่อนจุดขึ้นลงมีไว้แยกจุดที่อยู่ใกล้กัน ไม่ได้แสดงเวลา

ในชุดนี้ 12 จาก 17 ไม้อยู่ตั้งแต่ −20,000 จนถึงน้อยกว่า 20,000 USD ไม้กำไรที่มากที่สุด 2 ไม้คิดเป็น 46.76% ของกำไรสุทธิรวมเฉพาะฝั่งชนะ จึงควรตรวจว่าค่าเฉลี่ยถูกดึงโดยไม้ใหญ่เพียงไม่กี่ไม้หรือไม่

ด้านซ้ายของศูนย์คือเทรดที่ขาดทุน ด้านขวาคือเทรดที่ได้กำไร เส้น −Average Loss ใช้ค่าติดลบเพื่อวางตำแหน่งขาดทุนบนแกนนี้ ส่วนค่า Average Loss ในตารางรายงานเป็นขนาดบวก กราฟใช้ผลสุทธิหลังต้นทุน และนำเทรดที่บังคับปิดท้ายการทดสอบมารวมด้วย

ช่วงแต่ละแท่งรวมขอบซ้าย ไม่รวมขอบขวา ยกเว้นแท่งสุดท้ายที่รวมทั้งสองขอบ รูปทรงเปลี่ยนได้ตามความกว้างช่วง จึงควรอ่านจุดรายเทรดประกอบ และไม่ใช้เพียง 17 ไม้นี้ยืนยันรูปแบบการแจกแจงในอนาคต จำนวนเงินแต่ละไม้ขึ้นกับขนาดพอร์ตขณะเข้าเทรดด้วย

สมมติฐานและวิธีคำนวณที่ทำซ้ำได้

สร้างด้วย lesson_14.py จากการทดสอบเดียวกับ trades.csv, equity-daily.csv และ ema-results.json โดยไม่ใช้เครือข่าย