สร้างฟีเจอร์ค่าเฉลี่ยเคลื่อนที่และ RSI
เราต้องการเพิ่มข้อมูลในอดีตให้กับโมเดล machine learning เพื่อให้การทำนายแม่นยำยิ่งขึ้น แต่การเพิ่มขั้นตอนเวลาในอดีตจำนวนมากนั้นทำได้ยาก แนวทางหนึ่งคือการย่อข้อมูลจากจุดก่อนหน้าให้เหลือเพียงขั้นตอนเดียวโดยใช้ตัวชี้วัด (indicators)
ค่าเฉลี่ยเคลื่อนที่ (moving average) เป็นหนึ่งในตัวชี้วัดที่ง่ายที่สุด ซึ่งก็คือค่าเฉลี่ยของจุดข้อมูลก่อนหน้า ฟังก์ชันที่ใช้คือ talib.SMA() จากไลบรารี TAlib
ตัวชี้วัดทางเทคนิคอีกอย่างที่นิยมใช้กันคือ Relative Strength Index (RSI) ซึ่งนิยามดังนี้:
\(RSI = 100 - \frac{100} {1 + RS}\)
\(RS = \frac{\text{average gain over } n \text{ periods}} {\text{average loss over } n \text{ periods}}\)
จำนวนช่วง n กำหนดผ่านอาร์กิวเมนต์ timeperiod ใน talib.RSI()
ค่า period ที่นิยมใช้กับ RSI คือ 14 ดังนั้นเราจะใช้ค่านี้ในการคำนวณ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Learning สำหรับการเงินด้วย Python
คำแนะนำการฝึกหัด
- สร้างรายการชื่อฟีเจอร์ (เริ่มต้นด้วยรายการที่มีเพียง
'5d_close_pct') - ใช้ timeperiod เป็น 14, 30, 50 และ 200 เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่ด้วย
talib.SMA()จากราคาปิดที่ปรับแล้ว (lng_df['Adj_Close']) - ทำให้ค่าเฉลี่ยเคลื่อนที่เป็นปกติโดยหารด้วย
Adj_Close - ภายใน loop ให้คำนวณ RSI ด้วย
talib.RSI()จากAdj_Closeโดยใช้nเป็น timeperiod
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
feature_names = ____ # a list of the feature names for later
# Create moving averages and rsi for timeperiods of 14, 30, 50, and 200
for n in [____]:
# Create the moving average indicator and divide by Adj_Close
lng_df['ma' + str(n)] = talib.SMA(lng_df['Adj_Close'].values,
timeperiod=n) / lng_df[____]
# Create the RSI indicator
lng_df['rsi' + str(n)] = talib.____(lng_df['Adj_Close'].____, timeperiod=____)
# Add rsi and moving average to the feature name list
feature_names = feature_names + ['ma' + str(n), 'rsi' + str(n)]
print(feature_names)