Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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'].
|
| 182 |
-
df['down_move'] = 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,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(
|
| 191 |
-
df['-DI'] = df['-DM'].ewm(
|
| 192 |
|
| 193 |
# 計算 ADX
|
| 194 |
df['DX'] = abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI']) * 100
|
| 195 |
-
df['ADX'] = df['DX'].ewm(
|
| 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 |
|