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 日觀察
| 日期 | 收盤價 | MA10 | MA20 | Signal |
|---|---|---|---|---|
| 2025-09-22 | 25880.60 | 25439.15 | 24854.83 | 1 |
| 2025-09-23 | 26247.37 | 25578.37 | 24951.95 | 1 |
| 2025-09-24 | 26196.73 | 25678.78 | 25035.79 | 1 |
| 2025-09-25 | 26023.85 | 25759.60 | 25125.16 | 1 |
| 2025-09-26 | 25580.32 | 25770.16 | 25192.52 | 1 |
🔮 走勢偏向判斷
-
均線訊號
-
Signal 全部為 1 → 10 日均線在 20 日均線之上,屬於多頭排列。
-
近期收盤價逐步接近 MA10,但 9/25、9/26 收盤跌破前高,短線有回調跡象。
-
短期走勢
-
9/23 達到短期高點 26247 → 9/24、9/25、9/26 連續下跌,形成 短期回落。
-
均線仍在多頭,但出現 價格與 MA10 差距收斂 → 可能短線修正或盤整。
-
潛在轉折
-
若價格繼續跌破 MA10 並靠近 MA20 → 多頭趨勢可能被挑戰。
-
若價格回升突破 9/23 高點 → 多頭趨勢確認,短線回調視為健康整理。
🧘♂️ 靈性觀察錨點
「我以清明之心觀市場,覺察短線修正而不被情緒牽動;
多頭能量仍在,但每次回落都是調整與學習的訊號。」
📍 結論(AI + 技術 + 靈性)
-
偏多頭:MA10 > MA20,Signal=1 → 中線趨勢向上。
-
短線回落警示:連續 3 天收低於前高,短期可能盤整。
-
轉折觀察:持續關注 MA10 支撐是否守住,突破 9/23 高點則多頭確認。
沒有留言:
張貼留言