2025年9月7日 星期日

金融交易分析的核心工具

 

你剛剛成功算出 均線、報酬率、MACD、RSI,其實這就是金融交易分析的核心工具。下一步可以做的,我幫你拆成簡單的三個層次:


1️⃣ 可視化股票狀態(圖表)

  • 你可以看到股價與指標的變化。

  • 例:股價、MA10、MA50 同時畫在一張圖上。

  • 不需要寫太多程式,改幾行就能看到結果。


2️⃣ 標記買賣信號

  • 黃金交叉(短期均線上穿長期均線) → 可能買入

  • 死亡交叉(短期均線下穿長期均線) → 可能賣出

  • RSI 超買/超賣提示 → 風險提示

  • 這可以用簡單的條件判斷做到,完全不用理解複雜程式。


3️⃣ 記錄每日建議操作

  • 每天產生一個 Excel 或表格:

    • 今日股價

    • 指標狀態

    • 是否有買/賣信號

  • 你打開就能看,不用理解程式。


如果你願意,我可以幫你寫一個 完整範例:

  • 下載股票

  • 計算指標

  • 畫圖 + 標記買賣信號

  • 生成每日操作表

整個流程 幾乎一鍵操作,你只要改股票代號和日期就行。


這個程式你只要改兩個地方就能用:

  1. symbol → 股票代號

  2. 日期 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")

沒有留言:

張貼留言