Spaces:
Sleeping
Sleeping
Update model_predictor.py
Browse files- model_predictor.py +22 -24
model_predictor.py
CHANGED
|
@@ -20,22 +20,21 @@ class XGBoostModel:
|
|
| 20 |
"""
|
| 21 |
self.model = None
|
| 22 |
self.scaler = None
|
| 23 |
-
# ***FIXED: Updated feature columns to match the training script***
|
| 24 |
self.feature_columns = [
|
| 25 |
-
'close',
|
| 26 |
-
'return_t-1',
|
| 27 |
-
'return_t-5',
|
| 28 |
-
'MA5_close',
|
| 29 |
-
'volatility_5d',
|
| 30 |
-
'volume_ratio_5d',
|
| 31 |
-
'MACD_diff',
|
| 32 |
-
'dji_return_t-1',
|
| 33 |
-
'sox_return_t-1',
|
| 34 |
-
'NEWS',
|
| 35 |
-
'MACDvol',
|
| 36 |
-
'RSI_14',
|
| 37 |
-
'ADX',
|
| 38 |
-
'volume_weighted_return'
|
| 39 |
]
|
| 40 |
|
| 41 |
# 【新增】輸出目標對應表
|
|
@@ -127,10 +126,10 @@ class XGBoostModel:
|
|
| 127 |
df['close'] = df['Close']
|
| 128 |
df['volume'] = df['Volume']
|
| 129 |
|
| 130 |
-
# 1.
|
| 131 |
df['return_t-1'] = df['close'].pct_change()
|
| 132 |
|
| 133 |
-
# 2.
|
| 134 |
df['return_t-5'] = (df['close'] / df['close'].shift(5) - 1)
|
| 135 |
|
| 136 |
# 3. MA5_close — 5 日移動平均價
|
|
@@ -157,7 +156,7 @@ class XGBoostModel:
|
|
| 157 |
# 9. NEWS — 新聞情緒分數(需要外部資料,暫設為0)
|
| 158 |
df['NEWS'] = 0.0
|
| 159 |
|
| 160 |
-
# 10. MACDvol — MACD
|
| 161 |
df['MACDvol'] = 0.0
|
| 162 |
|
| 163 |
# 11. RSI_14 — 14日RSI
|
|
@@ -195,11 +194,6 @@ class XGBoostModel:
|
|
| 195 |
df.fillna(0, inplace=True) # 剩餘的 NaN 用 0 填補
|
| 196 |
|
| 197 |
return df
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
|
| 204 |
def preprocess_features(self, input_df):
|
| 205 |
"""
|
|
@@ -502,7 +496,11 @@ if __name__ == "__main__":
|
|
| 502 |
'MACD_diff': [0.5],
|
| 503 |
'dji_return_t-1': [0.01],
|
| 504 |
'sox_return_t-1': [0.015],
|
| 505 |
-
'NEWS': [0.1]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 506 |
})
|
| 507 |
|
| 508 |
print("測試模型預測器...")
|
|
|
|
| 20 |
"""
|
| 21 |
self.model = None
|
| 22 |
self.scaler = None
|
|
|
|
| 23 |
self.feature_columns = [
|
| 24 |
+
'close', # 前一日收盤價
|
| 25 |
+
'return_t-1', # 前一日報酬率
|
| 26 |
+
'return_t-5', # 過去 5 日累積報酬率
|
| 27 |
+
'MA5_close', # 5 日移動平均價
|
| 28 |
+
'volatility_5d', # 5 日報酬標準差
|
| 29 |
+
'volume_ratio_5d', # 今日成交量 ÷ 5 日均量
|
| 30 |
+
'MACD_diff', # MACD - signal
|
| 31 |
+
'dji_return_t-1', # 前一日道瓊指數報酬率
|
| 32 |
+
'sox_return_t-1', # 前一日費半指數報酬率
|
| 33 |
+
'NEWS', # 新聞情緒分數
|
| 34 |
+
'MACDvol', # MACD 柱狀圖
|
| 35 |
+
'RSI_14', # 14 日 RSI
|
| 36 |
+
'ADX', # 平均趨向指標
|
| 37 |
+
'volume_weighted_return' # 成交量加權報酬率
|
| 38 |
]
|
| 39 |
|
| 40 |
# 【新增】輸出目標對應表
|
|
|
|
| 126 |
df['close'] = df['Close']
|
| 127 |
df['volume'] = df['Volume']
|
| 128 |
|
| 129 |
+
# 1. return_t-1 — 前一日報酬率
|
| 130 |
df['return_t-1'] = df['close'].pct_change()
|
| 131 |
|
| 132 |
+
# 2. return_t-5 — 過去 5 日累積報酬率
|
| 133 |
df['return_t-5'] = (df['close'] / df['close'].shift(5) - 1)
|
| 134 |
|
| 135 |
# 3. MA5_close — 5 日移動平均價
|
|
|
|
| 156 |
# 9. NEWS — 新聞情緒分數(需要外部資料,暫設為0)
|
| 157 |
df['NEWS'] = 0.0
|
| 158 |
|
| 159 |
+
# 10. MACDvol — MACD柱狀圖(需要外部資料,暫設為0)
|
| 160 |
df['MACDvol'] = 0.0
|
| 161 |
|
| 162 |
# 11. RSI_14 — 14日RSI
|
|
|
|
| 194 |
df.fillna(0, inplace=True) # 剩餘的 NaN 用 0 填補
|
| 195 |
|
| 196 |
return df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
|
| 198 |
def preprocess_features(self, input_df):
|
| 199 |
"""
|
|
|
|
| 496 |
'MACD_diff': [0.5],
|
| 497 |
'dji_return_t-1': [0.01],
|
| 498 |
'sox_return_t-1': [0.015],
|
| 499 |
+
'NEWS': [0.1],
|
| 500 |
+
'MACDvol': [0.2],
|
| 501 |
+
'RSI_14': [55.0],
|
| 502 |
+
'ADX': [25.0],
|
| 503 |
+
'volume_weighted_return': [1000.0]
|
| 504 |
})
|
| 505 |
|
| 506 |
print("測試模型預測器...")
|