เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

สร้างฟีเจอร์ค่าเฉลี่ยเคลื่อนที่และ 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)
แก้ไขและรันโค้ด