你剛剛成功算出 均線、報酬率、MACD、RSI,其實這就是金融交易分析的核心工具。下一步可以做的,我幫你拆成簡單的三個層次:
1️⃣ 可視化股票狀態(圖表)
-
你可以看到股價與指標的變化。
-
例:股價、MA10、MA50 同時畫在一張圖上。
-
不需要寫太多程式,改幾行就能看到結果。
2️⃣ 標記買賣信號
-
黃金交叉(短期均線上穿長期均線) → 可能買入
-
死亡交叉(短期均線下穿長期均線) → 可能賣出
-
RSI 超買/超賣提示 → 風險提示
-
這可以用簡單的條件判斷做到,完全不用理解複雜程式。
3️⃣ 記錄每日建議操作
-
每天產生一個 Excel 或表格:
-
今日股價
-
指標狀態
-
是否有買/賣信號
-
-
你打開就能看,不用理解程式。
如果你願意,我可以幫你寫一個 完整範例:
-
下載股票
-
計算指標
-
畫圖 + 標記買賣信號
-
生成每日操作表
整個流程 幾乎一鍵操作,你只要改股票代號和日期就行。
這個程式你只要改兩個地方就能用:
-
symbol→ 股票代號 -
日期
start_date/end_date
它會自動幫你:
-
計算所有指標
-
畫圖標記買賣點
-
生成 Excel 表格,直接可以看每天的建議操作
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
# -------------------------
# 下載股票資料
# -------------------------
symbol = "NVDA" # 可換成 "2498.TW"
start_date = "2023-01-01"
end_date = "2025-09-01"
df = yf.download(symbol, start=start_date, end=end_date)
# -------------------------
# 計算指標
# -------------------------
def add_indicators(df):
# 均線
df['MA10'] = df['Close'].rolling(10).mean()
df['MA50'] = df['Close'].rolling(50).mean()
# 報酬率
df['Daily_Return'] = df['Close'].pct_change()
df['Cumulative_Return'] = (1 + df['Daily_Return']).cumprod() - 1
# EMA 用於 MACD
ema12 = df['Close'].ewm(span=12, adjust=False).mean()
ema26 = df['Close'].ewm(span=26, adjust=False).mean()
df['MACD'] = ema12 - ema26
df['MACD_Signal'] = df['MACD'].ewm(span=9, adjust=False).mean()
# RSI 計算
delta = df['Close'].diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)
avg_gain = gain.rolling(14).mean()
avg_loss = loss.rolling(14).mean()
rs = avg_gain / avg_loss
df['RSI'] = 100 - (100 / (1 + rs))
# 標記買賣信號(黃金交叉 / 死亡交叉)
df['Signal'] = 0
df.loc[(df['MA10'] > df['MA50']) & (df['MA10'].shift(1) <= df['MA50'].shift(1)), 'Signal'] = 1 # 黃金交叉
df.loc[(df['MA10'] < df['MA50']) & (df['MA10'].shift(1) >= df['MA50'].shift(1)), 'Signal'] = -1 # 死亡交叉
return df
df = add_indicators(df)
# -------------------------
# 畫圖
# -------------------------
plt.figure(figsize=(14,7))
plt.plot(df['Close'], label='Close')
plt.plot(df['MA10'], label='MA10')
plt.plot(df['MA50'], label='MA50')
plt.scatter(df.index[df['Signal']==1], df['Close'][df['Signal']==1], marker='^', color='g', label='Buy Signal', s=100)
plt.scatter(df.index[df['Signal']==-1], df['Close'][df['Signal']==-1], marker='v', color='r', label='Sell Signal', s=100)
plt.title(f"{symbol} 股價與交易信號")
plt.legend()
plt.show()
# -------------------------
# 生成每日操作表
# -------------------------
df[['Close','MA10','MA50','MACD','MACD_Signal','RSI','Signal']].to_excel(f"{symbol}_daily_signals.xlsx")
print(f"已生成每日操作表: {symbol}_daily_signals.xlsx")
沒有留言:
張貼留言