AlanRex commited on
Commit
a7d5eac
·
verified ·
1 Parent(s): 4944d5f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -39
app.py CHANGED
@@ -854,7 +854,7 @@ def simple_statistical_predict(data, predict_days=5):
854
 
855
  def calculate_new_features(df):
856
  """
857
- 計算新的技術指標特徵 - 針對新特徵需求
858
  """
859
  if df.empty:
860
  return df
@@ -868,49 +868,26 @@ def calculate_new_features(df):
868
  # 3. MA5_close – 5 日移動平均價
869
  df['MA5_close'] = df['Close'].rolling(window=5).mean()
870
 
871
-
872
- # 5. volatility_5d – 5 日報酬標準差(短期波動)
873
  df['volatility_5d'] = df['return_t-1'].rolling(window=5).std()
874
 
875
- # 6. volume_ratio_5d – 今日成交量 ÷ 5 日均量
 
876
  df['volume_5d_avg'] = df['Volume'].rolling(window=5).mean()
877
  df['volume_ratio_5d'] = df['Volume'] / df['volume_5d_avg']
878
 
879
- # 7. RSI_1414 RSI 指標
880
- delta = df['Close'].diff()
881
- gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
882
- loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
883
- rs = gain / loss
884
- df['RSI_14'] = 100 - (100 / (1 + rs))
885
-
886
- # 8. MACD_diff – MACD - signal(趨勢強弱)
887
- exp1 = df['Close'].ewm(span=12).mean()
888
- exp2 = df['Close'].ewm(span=26).mean()
889
  macd_line = exp1 - exp2
890
- signal_line = macd_line.ewm(span=9).mean()
891
  df['MACD_diff'] = macd_line - signal_line
892
 
893
- # 9. MACDvol
894
- df['MACDvol'] = df['MACDvol']
895
-
896
- # 10. RSI_14 – 14 日 RSI 指標 (如果原資料沒有RSI,需要計算)
897
- if 'RSI' in df.columns:
898
- df['RSI_14'] = df['RSI'] # 使用現有的RSI
899
- else:
900
- # 計算 RSI
901
- delta = df['close'].diff()
902
- gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
903
- loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
904
- rs = gain / loss
905
- df['RSI_14'] = 100 - (100 / (1 + rs))
906
-
907
- # 14. ADX
908
- df['ADX'] = df['ADX']
909
 
910
-
911
- # 15. 當日報酬率絕對值 × 當日成交量 (成交量加權報酬率)
912
- df['volume_weighted_return'] = abs(df['return_t-1']) * df['volume']
913
-
914
  # 移除輔助欄位
915
  if 'volume_5d_avg' in df.columns:
916
  df = df.drop('volume_5d_avg', axis=1)
@@ -937,10 +914,10 @@ def advanced_xgboost_predict(predict_days=5):
937
 
938
 
939
  # 新增 volume_weighted_return 計算
940
- if 'return_t-1' in taiex_data.columns and 'Volume' in taiex_data.columns:
941
- taiex_data['volume_weighted_return'] = abs(taiex_data['return_t-1']) * taiex_data['Volume']
942
- else:
943
- taiex_data['volume_weighted_return'] = 0
944
 
945
  print("正在獲取美股數據...")
946
  us_market_data = get_us_market_data()
 
854
 
855
  def calculate_new_features(df):
856
  """
857
+ 計算新的技術指標特徵 - 針對新特徵需求 (已修正)
858
  """
859
  if df.empty:
860
  return df
 
868
  # 3. MA5_close – 5 日移動平均價
869
  df['MA5_close'] = df['Close'].rolling(window=5).mean()
870
 
871
+ # 4. volatility_5d – 5 日報酬標準差(短期波動)
 
872
  df['volatility_5d'] = df['return_t-1'].rolling(window=5).std()
873
 
874
+ # 5. volume_ratio_5d – 今日成交量 ÷ 5 日均量
875
+ # Note: Use 'Volume' with a capital V
876
  df['volume_5d_avg'] = df['Volume'].rolling(window=5).mean()
877
  df['volume_ratio_5d'] = df['Volume'] / df['volume_5d_avg']
878
 
879
+ # 6. MACD_diffMACD - signal(趨勢強弱)
880
+ # This is already calculated as 'MACD_Histogram' in calculate_technical_indicators, but we'll recalculate to be safe.
881
+ exp1 = df['Close'].ewm(span=12, adjust=False).mean()
882
+ exp2 = df['Close'].ewm(span=26, adjust=False).mean()
 
 
 
 
 
 
883
  macd_line = exp1 - exp2
884
+ signal_line = macd_line.ewm(span=9, adjust=False).mean()
885
  df['MACD_diff'] = macd_line - signal_line
886
 
887
+ # 7. volume_weighted_return - 成交量加權報酬率
888
+ # 【【ERROR FIX】】 Use 'Volume' with a capital V instead of 'volume'
889
+ df['volume_weighted_return'] = abs(df['return_t-1']) * df['Volume']
 
 
 
 
 
 
 
 
 
 
 
 
 
890
 
 
 
 
 
891
  # 移除輔助欄位
892
  if 'volume_5d_avg' in df.columns:
893
  df = df.drop('volume_5d_avg', axis=1)
 
914
 
915
 
916
  # 新增 volume_weighted_return 計算
917
+ # if 'return_t-1' in taiex_data.columns and 'Volume' in taiex_data.columns:
918
+ # taiex_data['volume_weighted_return'] = abs(taiex_data['return_t-1']) * taiex_data['Volume']
919
+ # else:
920
+ # taiex_data['volume_weighted_return'] = 0
921
 
922
  print("正在獲取美股數據...")
923
  us_market_data = get_us_market_data()