謝宸峰python 讀入csv檔案計算黃金交叉和死亡交叉

import
pandas as pd #謝宸峰googlen搜尋AI模式copy貼上

# 1. 讀取 CSV 檔案
df = pd.read_csv('stock_data.csv')

# 確保日期格式正確並設為索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

# 2. 計算移動平均線 (MA)
# 例如:短線MA(5), 長線MA(20)
short_window = 5
long_window = 20

df['SMA5'] = df['Close'].rolling(window=short_window).mean()
df['SMA20'] = df['Close'].rolling(window=long_window).mean()

# 去除 NaN 值 (MA 前幾天無法計算)
df.dropna(inplace=True)

# 3. 定義交叉訊號 (Signal)
# 黃金交叉: 短線 > 長線 (1), 死亡交叉: 短線 < 長線 (0)
df['Signal'] = 0.0
df['Signal'] = (df['SMA5'] > df['SMA20']).astype(float)

# 4. 找出訊號改變的點 (交叉點)
# 差異 > 0 是黃金交叉,差異 < 0 是死亡交叉
df['Position'] = df['Signal'].diff()

# 5. 輸出結果
gold_crosses = df[df['Position'] == 1]
death_crosses = df[df['Position'] == -1]

print("黃金交叉日期與價格:")
print(gold_crosses[['Close', 'SMA5', 'SMA20']])

print("\n死亡交叉日期與價格:")
print(death_crosses[['Close', 'SMA5', 'SMA20']])

# 6. 可視化結果 (選擇性)
plt.figure(figsize=(12,6))
plt.plot(df['Close'], label='Close Price', alpha=0.5)
plt.plot(df['SMA5'], label='SMA5', alpha=0.9)
plt.plot(df['SMA20'], label='SMA20', alpha=0.9)

# 標記黃金交叉
plt.plot(gold_crosses.index, gold_crosses['SMA5'], '^', markersize=10, color='g', label='Gold Cross')
# 標記死亡交叉
plt.plot(death_crosses.index, death_crosses['SMA5'], 'v', markersize=10, color='r', label='Death Cross')

plt.title('Golden/Death Cross Strategy')
plt.legend()
plt.show()


目前台股市值前十大

使用聯發科驗證黃金交叉與死亡交叉

影片

留言

這個網誌中的熱門文章

謝宸峰VS code編輯HTML,CSS,JS俄羅斯方塊

謝宸峰tkinter套件建立圖形使用者介面GUI=Graphical User Interface

謝宸峰Python 與JavaScript對照