Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -84,49 +84,45 @@ def create_lstm_dataset(data, time_step=60):
|
|
| 84 |
y.append(data[i, 0])
|
| 85 |
return np.array(X), np.array(y)
|
| 86 |
|
| 87 |
-
def simple_lstm_predict(
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
#
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
# 反正規化,將預測結果轉換回原始價格範圍
|
| 119 |
-
# 由於scaler是用整個資料集fit的,所以需要用一個假的array來反轉
|
| 120 |
-
# 這是處理單一預測值反正規化的常用方法
|
| 121 |
-
temp_array = np.zeros(shape=(1, 1))
|
| 122 |
-
temp_array[0, 0] = predicted_value_scaled[0, 0]
|
| 123 |
-
prediction = scaler.inverse_transform(temp_array)[0, 0]
|
| 124 |
|
| 125 |
-
|
|
|
|
| 126 |
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
| 130 |
|
| 131 |
def calculate_technical_indicators(df):
|
| 132 |
"""計算技術指標"""
|
|
|
|
| 84 |
y.append(data[i, 0])
|
| 85 |
return np.array(X), np.array(y)
|
| 86 |
|
| 87 |
+
def simple_lstm_predict(data, predict_days=5):
|
| 88 |
+
"""簡化的LSTM預測模型 (使用統計方法模擬)"""
|
| 89 |
+
if len(data) < 60:
|
| 90 |
+
return None
|
| 91 |
+
|
| 92 |
+
# 使用移動平均和趨勢分析來模擬深度學習預測
|
| 93 |
+
prices = data['Close'].values
|
| 94 |
+
|
| 95 |
+
# 計算短期和長期移動平均
|
| 96 |
+
ma_short = np.mean(prices[-5:])
|
| 97 |
+
ma_medium = np.mean(prices[-20:])
|
| 98 |
+
ma_long = np.mean(prices[-60:])
|
| 99 |
+
|
| 100 |
+
# 計算價格變化趨勢
|
| 101 |
+
recent_trend = np.polyfit(range(20), prices[-20:], 1)[0]
|
| 102 |
+
volatility = np.std(prices[-20:]) / np.mean(prices[-20:])
|
| 103 |
+
|
| 104 |
+
# 模擬預測邏輯
|
| 105 |
+
base_change = recent_trend * predict_days
|
| 106 |
+
trend_factor = 1.0
|
| 107 |
+
|
| 108 |
+
if ma_short > ma_medium > ma_long:
|
| 109 |
+
trend_factor = 1.02 # 上升趨勢
|
| 110 |
+
elif ma_short < ma_medium < ma_long:
|
| 111 |
+
trend_factor = 0.98 # 下降趨勢
|
| 112 |
+
else:
|
| 113 |
+
trend_factor = 1.0 # 盤整
|
| 114 |
|
| 115 |
+
# 加入隨機性模擬市場不確定性
|
| 116 |
+
noise_factor = np.random.normal(1, volatility * 0.1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
+
predicted_price = prices[-1] * trend_factor + base_change + (prices[-1] * noise_factor * 0.01)
|
| 119 |
+
change_pct = ((predicted_price - prices[-1]) / prices[-1]) * 100
|
| 120 |
|
| 121 |
+
return {
|
| 122 |
+
'predicted_price': predicted_price,
|
| 123 |
+
'change_pct': change_pct,
|
| 124 |
+
'confidence': max(0.6, 1 - volatility * 2) # 基於波動率的信心度
|
| 125 |
+
}
|
| 126 |
|
| 127 |
def calculate_technical_indicators(df):
|
| 128 |
"""計算技術指標"""
|