AlanRex commited on
Commit
31b495b
·
verified ·
1 Parent(s): 5951a69

Update model_predictor.py

Browse files
Files changed (1) hide show
  1. model_predictor.py +25 -19
model_predictor.py CHANGED
@@ -20,17 +20,22 @@ class XGBoostModel:
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
  ]
35
 
36
  # 【新增】輸出目標對應表
@@ -122,17 +127,17 @@ class XGBoostModel:
122
  df['close'] = df['Close']
123
  df['volume'] = df['Volume']
124
 
125
- # 1. return_t-1 — 前一日報酬率 (***FIXED: Changed hyphen to underscore***)
126
- df['return_t_1'] = df['close'].pct_change()
127
 
128
- # 2. return_t-5 — 過去 5 日累積報酬率 (***FIXED: Changed hyphen to underscore***)
129
- df['return_t_5'] = (df['close'] / df['close'].shift(5) - 1)
130
 
131
  # 3. MA5_close — 5 日移動平均價
132
  df['MA5_close'] = df['close'].rolling(window=5).mean()
133
 
134
  # 4. volatility_5d — 5 日報酬標準差
135
- df['volatility_5d'] = df['return_t_1'].rolling(window=5).std()
136
 
137
  # 5. volume_ratio_5d — 今日成交量 ÷ 5 日均量
138
  df['volume_5d_avg'] = df['volume'].rolling(window=5).mean()
@@ -146,8 +151,8 @@ class XGBoostModel:
146
  df['MACD_diff'] = macd_line - signal_line
147
 
148
  # 7-8. 美股指數報酬率(需要外部資料,暫設為0)
149
- df['dji_return_t-1'] = 0.0
150
- df['sox_return_t-1'] = 0.0
151
 
152
  # 9. NEWS — 新聞情緒分數(需要外部資料,暫設為0)
153
  df['NEWS'] = 0.0
@@ -178,8 +183,8 @@ class XGBoostModel:
178
  df['DX'] = np.abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI']) * 100
179
  df['ADX'] = df['DX'].ewm(com=13, adjust=False).mean()
180
 
181
- # 13. volume_weighted_return — 成交量加權報酬率 (***FIXED: Changed hyphen to underscore***)
182
- df['volume_weighted_return'] = np.abs(df['return_t_1']) * df['volume']
183
 
184
  # 清理輔助欄位
185
  cleanup_columns = ['volume_5d_avg', 'up_move', 'down_move', '+DM', '-DM', 'TR', '+DI', '-DI', 'DX']
@@ -190,6 +195,7 @@ class XGBoostModel:
190
  df.fillna(0, inplace=True) # 剩餘的 NaN 用 0 填補
191
 
192
  return df
 
193
 
194
 
195
 
 
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
  df['close'] = df['Close']
128
  df['volume'] = df['Volume']
129
 
130
+ # 1. return-t-1 — 前一日報酬率 (***FIXED: Corrected to use hyphen***)
131
+ df['return-t-1'] = df['close'].pct_change()
132
 
133
+ # 2. return-t-5 — 過去 5 日累積報酬率 (***FIXED: Corrected to use hyphen***)
134
+ df['return-t-5'] = (df['close'] / df['close'].shift(5) - 1)
135
 
136
  # 3. MA5_close — 5 日移動平均價
137
  df['MA5_close'] = df['close'].rolling(window=5).mean()
138
 
139
  # 4. volatility_5d — 5 日報酬標準差
140
+ df['volatility_5d'] = df['return-t-1'].rolling(window=5).std()
141
 
142
  # 5. volume_ratio_5d — 今日成交量 ÷ 5 日均量
143
  df['volume_5d_avg'] = df['volume'].rolling(window=5).mean()
 
151
  df['MACD_diff'] = macd_line - signal_line
152
 
153
  # 7-8. 美股指數報酬率(需要外部資料,暫設為0)
154
+ df['dji_return-t-1'] = 0.0
155
+ df['sox_return-t-1'] = 0.0
156
 
157
  # 9. NEWS — 新聞情緒分數(需要外部資料,暫設為0)
158
  df['NEWS'] = 0.0
 
183
  df['DX'] = np.abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI']) * 100
184
  df['ADX'] = df['DX'].ewm(com=13, adjust=False).mean()
185
 
186
+ # 13. volume_weighted_return — 成交量加權報酬率
187
+ df['volume_weighted_return'] = np.abs(df['return-t-1']) * df['volume']
188
 
189
  # 清理輔助欄位
190
  cleanup_columns = ['volume_5d_avg', 'up_move', 'down_move', '+DM', '-DM', 'TR', '+DI', '-DI', 'DX']
 
195
  df.fillna(0, inplace=True) # 剩餘的 NaN 用 0 填補
196
 
197
  return df
198
+
199
 
200
 
201