2025年9月27日 星期六

Step 3:AI 助手分析(上層) - K 線圖 + MA10/MA20 (買賣信號標記 )

 

 

  • K 線圖 + MA10/MA20
  • 買賣信號標記 
  • 每日 CSV(含 Signal 與 Timestamp) 
  • Buy 點:綠色箭頭(^)標在當天最低價下方,Signal 從 0 → 1。

    CSV 裡會同時有 Buy 與 Sell 欄位,方便後續分析。

  •  

    簡單回測資金變化

  •  # -*- coding: utf-8 -*-
    import yfinance as yf
    import pandas as pd
    import mplfinance as mpf
    from datetime import datetime
    import numpy as np

    # -------------------------
    # 1️⃣ 設定標的
    # -------------------------
    symbol = "^TWII"   # 台灣加權指數

    # -------------------------
    # 2️⃣ 抓取最近三個月資料
    # -------------------------
    df = yf.download(symbol, period="3mo", auto_adjust=False)

    # 去掉 MultiIndex
    if isinstance(df.columns, pd.MultiIndex):
        df.columns = df.columns.get_level_values(0)

     

     

     

    # -------------------------
    # 3️⃣ 計算移動平均線
    # -------------------------
    df['MA10'] = df['Close'].rolling(10).mean()
    df['MA20'] = df['Close'].rolling(20).mean()

    # -------------------------
    # 4️⃣ 生成買賣訊號
    # -------------------------
    df['Signal'] = 0
    df['Signal'][10:] = (df['MA10'][10:] > df['MA20'][10:]).astype(int)

    # -------------------------
    # 5️⃣ 標記買賣點
    # -------------------------
    df['Buy'] = np.where((df['Signal'] == 1) & (df['Signal'].shift(1) == 0), df['Low']*0.995, np.nan)
    df['Sell'] = np.where((df['Signal'] == 0) & (df['Signal'].shift(1) == 1), df['High']*1.005, np.nan)

    # -------------------------
    # 6️⃣ 畫 K 線圖(含 MA + Signal)
    # -------------------------
    apds = [
        mpf.make_addplot(df['MA10'], color='blue'),
        mpf.make_addplot(df['MA20'], color='red'),
        mpf.make_addplot(df['Buy'], type='scatter', markersize=100, marker='^', color='green'),
        mpf.make_addplot(df['Sell'], type='scatter', markersize=100, marker='v', color='red')
    ]

    mpf.plot(
        df,
        type='candle',
        style='yahoo',
        title=f"{symbol} 台灣加權指數 K 線圖(買賣點)",
        volume=True,
        addplot=apds
    )

    # -------------------------
    # 7️⃣ 存 CSV
    # -------------------------
    df_reset = df.reset_index()
    df_clean = df_reset[['Date','Open','High','Low','Close','Volume','MA10','MA20','Signal','Buy','Sell']].copy()
    df_clean['Timestamp'] = df_clean['Date'].apply(lambda x: int(datetime.timestamp(x)))

    filename = f"{symbol}_signals_marked.csv"
    df_clean.to_csv(filename, index=False, encoding="utf-8-sig")
    print(f"✅ 已生成 CSV 檔:{filename}")
    print(df_clean.tail())

    # -------------------------
    # 8️⃣ 回測資金
    # -------------------------
    initial_cash = 100_000
    cash = initial_cash
    position = 0

    for i in range(len(df_clean)):
        if df_clean['Signal'].iloc[i] == 1 and position == 0:
            position = cash / df_clean['Close'].iloc[i]
            cash = 0
        elif df_clean['Signal'].iloc[i] == 0 and position > 0:
            cash = position * df_clean['Close'].iloc[i]
            position = 0

    final_value = cash + position * df_clean['Close'].iloc[-1]
    print(f"初始資金: {initial_cash:,.2f}")
    print(f"回測後資金: {final_value:,.2f}")

    很好 👍 我們來做這個分析,把你提供的這 5 天 CSV 資料作「AI + 技術分析」解讀:


    📈 台指期(近似)5 日觀察

    日期收盤價MA10MA20Signal
    2025-09-2225880.6025439.1524854.831
    2025-09-2326247.3725578.3724951.951
    2025-09-2426196.7325678.7825035.791
    2025-09-2526023.8525759.6025125.161
    2025-09-2625580.3225770.1625192.521

    🔮 走勢偏向判斷

    1. 均線訊號

    • Signal 全部為 1 → 10 日均線在 20 日均線之上,屬於多頭排列。

    • 近期收盤價逐步接近 MA10,但 9/25、9/26 收盤跌破前高,短線有回調跡象。

    1. 短期走勢

    • 9/23 達到短期高點 26247 → 9/24、9/25、9/26 連續下跌,形成 短期回落。

    • 均線仍在多頭,但出現 價格與 MA10 差距收斂 → 可能短線修正或盤整。

    1. 潛在轉折

    • 若價格繼續跌破 MA10 並靠近 MA20 → 多頭趨勢可能被挑戰。

    • 若價格回升突破 9/23 高點 → 多頭趨勢確認,短線回調視為健康整理。


    🧘‍♂️ 靈性觀察錨點

    「我以清明之心觀市場,覺察短線修正而不被情緒牽動;
    多頭能量仍在,但每次回落都是調整與學習的訊號。」


    📍 結論(AI + 技術 + 靈性)

    • 偏多頭:MA10 > MA20,Signal=1 → 中線趨勢向上。

    • 短線回落警示:連續 3 天收低於前高,短期可能盤整。

    • 轉折觀察:持續關注 MA10 支撐是否守住,突破 9/23 高點則多頭確認。




    沒有留言:

    張貼留言