"อย่าลงทุนด้วยความรู้สึก ให้ลงทุนด้วยกฎเกณฑ์และสถิติ"
เรียนรู้เทคนิค Backtesting จำลองการทำงานของ Moving Average
และสร้างตัวสร้างสัญญาณซื้อขาย (Signals) ด้วย Python
ซื้อด้วยอารมณ์ VS ซื้อด้วยกฎเกณฑ์
เส้นค่าเฉลี่ย (SMA) & Backtesting
คำสั่ง Rolling & Numpy Where
สร้าง Strategy Backtest Engine
กลยุทธ์นี้เวิร์คจริง หรือแค่ฟลุค?
กฎเหล็กของนักพัฒนา Quant
คุณเคยตัดสินใจผิดพลาดเรื่องเงิน เพราะความตกใจกลัว (Panic) หรือความโลภ (FOMO) ไหม?
"ข่าวบอกเศรษฐกิจแย่ ฉันกลัว รีบขายดีกว่า!"
"หุ้นตัวนี้เพื่อนบอกกำลังมา ซื้อตามเลย!"
"ฉันไม่สนข่าว ฉันเขียนกฎไว้ว่า ถ้าราคาหลุดเส้นค่าเฉลี่ย ให้ขายเป็นเงินสดทันที"
ราคาหุ้นรายวันมันแกว่งไปมา (Noise) ทำให้ดูยากว่ากำลังขึ้นหรือลง
การทำ Simple Moving Average คือการเอาข้อมูลย้อนหลังมา "หาค่าเฉลี่ย" เพื่อให้เส้นสมูทขึ้น
ก่อนจะเอากฎ (Rule) ที่เราคิด ไปใช้กับเงินจริง เราต้องใช้โปรแกรมคอมพิวเตอร์ "ย้อนเวลา" เอาข้อมูลในอดีตมาใส่ แล้วดูว่าถ้ายึดตามกฎนี้...
"ทดสอบกลยุทธ์ในกระดาษ
ดีกว่าพลาดในตลาดจริง"
rolling และ np.whereสร้างไฟล์ lesson6_intro.py เราจะลองใช้ Pandas คำนวณค่าเฉลี่ยย้อนหลัง
สร้างไฟล์ strategy_dash.py และจำลองข้อมูลตลาด 20 ช่วงเวลา
พิมพ์ต่อ: สร้าง Slider รับค่าหน้าต่าง SMA และสร้างสัญญาณซื้อขาย (Signal)
พิมพ์ต่อ: เอาผลตอบแทนตลาด ไปคูณกับ Position ที่เราถืออยู่ (1 หรือ 0)
Syntax Tip: cumprod() คือการคูณทบต้น (Cumulative Product)
พิมพ์ต่อ: พลอตกราฟราคา (เพื่อดูจุดตัด) และกราฟความมั่งคั่งเพื่อตัดสินแพ้ชนะ
เมื่อรันโค้ดเสร็จ นี่คือหน้าตา Web App ของคุณ (ปรับค่าวิเคราะห์หาจุดที่ชนะตลาดได้)
เห็นว่ากลยุทธ์เราชนะ เพราะหลบหนีวิกฤตได้ทัน แต่ในโลกจริงมีปัญหาที่ต้องระวัง:
ทุกครั้งที่ระบบสั่งซื้อๆ ขายๆ คุณต้องเสีย "ค่าธรรมเนียม" ยิ่งปรับ SMA สั้น สัญญาณยิ่งถี่ กำไรอาจหมดไปกับค่าธรรมเนียม
ถ้าตลาดไม่ได้เป็นเทรนด์ชัดเจน แต่แกว่งแคบๆ (Sideway) สัญญาณจะหลอกให้เรา ซื้อแพง-ขายถูก ซ้ำๆ จนขาดทุนสะสมได้
"ผลการดำเนินงานในอดีต ไม่ได้การันตีอนาคต"
โมเดลที่ดูสวยหรูตอนทำ Backtest มักจะพังเมื่อเจอตลาดจริง
เพราะเรามักปรับตัวเลขให้เข้าข้างตัวเอง (Overfitting)
"ในบทต่อไป เราจะทำการ 'ทดสอบความเครียด' (Stress Test)
เพื่อดูว่าโมเดลที่เราสร้าง แข็งแกร่งพอจะสู้โลกความจริงไหม!"