AlanRex commited on
Commit
c95690e
·
verified ·
1 Parent(s): 77e7647

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -6
app.py CHANGED
@@ -176,10 +176,10 @@ def calculate_technical_indicators(df):
176
  high_max_14 = df['High'].rolling(window=14).max()
177
  df['Williams_R'] = -100 * (high_max_14 - df['Close']) / (high_max_14 - low_min_14)
178
 
179
- # DMI (Directional Movement Index)
180
  # 計算正向運動 (+DM) 和負向運動 (-DM)
181
- df['up_move'] = df['High'].diff()
182
- df['down_move'] = df['Low'].diff()
183
  df['+DM'] = np.where((df['up_move'] > df['down_move']) & (df['up_move'] > 0), df['up_move'], 0)
184
  df['-DM'] = np.where((df['down_move'] > df['up_move']) & (df['down_move'] > 0), df['down_move'], 0)
185
 
@@ -187,12 +187,12 @@ def calculate_technical_indicators(df):
187
  df['TR'] = np.max([df['High'] - df['Low'], abs(df['High'] - df['Close'].shift(1)), abs(df['Low'] - df['Close'].shift(1))], axis=0)
188
 
189
  # 計算平滑後的 +DM, -DM, TR (通常使用 14 天)
190
- df['+DI'] = df['+DM'].ewm(alpha=1/14, adjust=False).mean() / df['TR'].ewm(alpha=1/14, adjust=False).mean() * 100
191
- df['-DI'] = df['-DM'].ewm(alpha=1/14, adjust=False).mean() / df['TR'].ewm(alpha=1/14, adjust=False).mean() * 100
192
 
193
  # 計算 ADX
194
  df['DX'] = abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI']) * 100
195
- df['ADX'] = df['DX'].ewm(alpha=1/14, adjust=False).mean()
196
 
197
  return df
198
 
 
176
  high_max_14 = df['High'].rolling(window=14).max()
177
  df['Williams_R'] = -100 * (high_max_14 - df['Close']) / (high_max_14 - low_min_14)
178
 
179
+ # --- DMI (Directional Movement Index) - 已修正的計算邏輯 ---
180
  # 計算正向運動 (+DM) 和負向運動 (-DM)
181
+ df['up_move'] = df['High'] - df['High'].shift(1)
182
+ df['down_move'] = df['Low'].shift(1) - df['Low'] # 修正:將當日低點與前日低點作差
183
  df['+DM'] = np.where((df['up_move'] > df['down_move']) & (df['up_move'] > 0), df['up_move'], 0)
184
  df['-DM'] = np.where((df['down_move'] > df['up_move']) & (df['down_move'] > 0), df['down_move'], 0)
185
 
 
187
  df['TR'] = np.max([df['High'] - df['Low'], abs(df['High'] - df['Close'].shift(1)), abs(df['Low'] - df['Close'].shift(1))], axis=0)
188
 
189
  # 計算平滑後的 +DM, -DM, TR (通常使用 14 天)
190
+ df['+DI'] = (df['+DM'].ewm(com=13, adjust=False).mean() / df['TR'].ewm(com=13, adjust=False).mean()) * 100
191
+ df['-DI'] = (df['-DM'].ewm(com=13, adjust=False).mean() / df['TR'].ewm(com=13, adjust=False).mean()) * 100
192
 
193
  # 計算 ADX
194
  df['DX'] = abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI']) * 100
195
+ df['ADX'] = df['DX'].ewm(com=13, adjust=False).mean()
196
 
197
  return df
198