Backtesting framework for Python : - bt -



วันนี้มาลอง Review ใช้งาน Python Package ตัวหนึ่งที่ชื่อว่า “bt” ซึ่งเป็น Backtesting framework สำหรับทดสอบกลยุทธ์รวมถึงไอเดียของเรา ซึ่งพอเป็น Framework แล้วนั้นก็มีข้อดีคือไม่ต้องเขียนเองเยอะ เรียกใช้งานได้เลย แต่ก็ต้องอาศัยอ่านคู่มือของผู้พัฒนา ซึ่ง bt ตัวนี้ก็เจ๋งดี ใช้งานง่ายและปรับกลยุทธ์ได้ตามที่เราต้องการ 
.

ที่อาจารย์เค้าเน้นจะมี 3 ส่วน
0.ทำไมต้อง Backtest และข้อควรระวัง
.
1.การจัดการข้อมูล : การเตรียมข้อมูลเบื้องต้น โดยโหลดข้อมูลหุ้นที่จะทำการทดสอบ
.
2.การอ่านรายงานและประเมินผล : อ่านตัวชี้วัดให้เป็น เช่น Sharpe Ratio แบบ Daily/Monthly/Yearly ,CAGR , Max Drawdown , Calmar Ratio  , Skew / Kurt ,Best Year / Worst Year เป็นต้น
.
3.
การออกแบบและทดสอบกลยุทธ์ : จะแบ่งเป็น 2 ส่วน การออกแบบกลยุทธ์และนำกลยุทธ์พร้อมข้อมูลไปรัน

หัวใจของการออกแบบของ Framework นี้จะมี 3+1 ส่วนคือ
*- Frequency : ความถี่ในการใช้ เช่น รายวัน / รายเดือน (มีการปรับพอร์ต) หรือรันครั้งเดียว (ซึ่งก็จะเป็น Buy & Hold)
*- Selection : การกำหนด Universe ของหุ้นที่เราสนใจ หรือตามเงื่อนไขที่กำหนด
*- Weights : น้ำหนักในการลงทุน เช่น เท่ากันทุกตัว , กำหนดเอง หรือกำหนดตามความผันผวน เป็นต้น

- Allocate : รูปแบบของการจัดสรรเงิน เช่น การปิดตำแหน่งที่ไม่เข้าเงื่อนไขและเอาเงินส่วนนั้นให้สลับไปยังเงื่อนไขที่เข้า ตาม Weights ที่กำหนด โดยส่วนใหญ่ของ Framework นี้ก็จะเป็นแบบ Rebalance
.

ซึ่งใน bt นั้นเราสามารถที่จะปรับกลยุทธ์ของเราเองได้ โดยเขียนเงื่อนไขต่างๆ สร้าง DataFrame ในส่วนของ Selection ขึ้นมาเอง เช่น เข้าเมื่อราคาปิด Break High ในรอบ N วัน และออกเมื่อราคาปิดน้อยกว่าเส้น SMA N วันเป็นต้น 

ในส่วนของการกำหนด Weights เราสามารถกำหนดน้ำหนักให้เท่ากันทุกตัวหรือจะกำหนดเองก็ได้ รวมถึงมีฟังก์ชั่นเจ๋งๆ เช่นกำหนดน้ำหนักแบบ Markowitz ได้ (mean-variance optimization)

.
bt ยังมีรายงานเก่งๆ ช่วยเราอีกหลายตัว เช่น รายงาน Transactions ที่เข้า/ออก ,รายงาน Equity Progression , รายงาน Equal weights ,รายงานผล Stat ต่างๆ (Max Drawdown / Sharpe Ratio และอื่นๆ) , รายงาน Price Action ระดับราคาที่กลยุทธ์เข้าทำ รวมถึงกำหนดเงินลงทุนเบื้องต้นและการกำหนดค่า commissions 

.

ความสามารถอีกอย่างคือการเปรียบเทียบกลยุทธ์ต่างๆ คือ bt สามารถรันหลายกลยุทธ์พร้อมกัน เพื่อให้เราสามารถตรวจสอบได้ว่ากลยุทธ์ใดทำงานได้ดีกว่า เช่นเปรียบเทียบ SMA20 กับ SMA75 เป็นต้น เพื่อหาจำนวนของ SMA ที่เหมาะสม (แต่ต้องระวังเรื่อง Overfitting ด้วย) หรือเปรียบเทียบกลยุทธ์เรากับ Benchmark หรือตลาด (รันเทียบ SET50 Index)
.

สุดท้าย ที่อาจารย์เล่าคือ เราสามารถผสมกลยุทธ์เข้าด้วยกันได้ เช่นลองวัดผลว่าหากเล่นทั้ง Break High กับ SMA ผสมกันจะได้ผลตอบแทนอย่างไรบ้าง

Comments

Popular Posts