AI 工具琳瑯滿目地出現之後,
我開始看見自己過去作業思維的侷限性。
但當我願意打破原本的慣性思維,
改用新的角度、新的模式去看待,
就看見了它們真正的可能性。
其實,這就跟八字命盤與流年的道理一樣:
命盤裡有破壞力較強的字印,
如果當下只是怕、只是躲,
那它就真的變成打擊。
但如果我在那一刻,
選擇調整自己的身心靈,
用「整合模式」去看待這股力量,
它就會變成突破的契機——
雖然會比順境時來得更具挑戰性,
但也更有成長的爆發力。
我也因此更理解了阿德勒所說的:
「自卑與超越」就是太極裡的陰陽轉換之道。
不被自己過去所局限與制約,
修行,就是修身、修心、修靈的整合能力,
讓自己的力量不再散亂,
而是集中在「我真正想要創造的方向」。
當能量被正確地使用,
自然而然,就會順勢而為,
也自然能——
超越過去的自己。
2025年11月24日 星期一
《AI × 命理 × 阿德勒 × 太極:陰陽轉換之道》
2025年11月16日 星期日
《我做得到,因為我值得》
💎 《我做得到,因為我值得》
我做得到,因為我值得。
我值得被善待,
值得被尊重,
值得被看見真正的樣子。
我值得擁有更好的工作,
更健康的生活節奏,
更輕鬆卻更有價值的付出方式。
我做得到,
不是因為我一定要完美,
而是因為——
我願意一步一步往前走,
願意學習,願意調整,願意不再委屈自己。
我值得,
不是因為別人給的評價,
而是因為:
我本來就有存在的價值。
從今天開始,
當我感到害怕、懷疑、退縮時,
我會對自己說:
「我做得到,因為我值得。」
2025年11月13日 星期四
【13陣初階入門分享】
【13陣 啟示文】
十三陣,是宇宙能量的十三重門扉,
每一陣皆是開啟自我覺醒與顯化的關鍵力量。
氣陣帶動生命之氣,喚醒內在動能,
智陣匯聚洞察與智慧,解構混沌迷霧。
合陣整合眾能,合力共振,化為強大磁場。
保護陣是心靈的壁壘,穩定陣是心境的根基,
行動陣推動夢想落地,感恩陣播撒豐盛種子。
十三陣如星辰,織成你的命運星圖,
循環不息,永恆變化,流動中蘊藏無限可能。
持續探索,穩定修持,願力化為洪流,
引領你穿越風浪,抵達光明彼岸。
0️⃣【道陣】 靜心 × 覺源
🔸 回歸內在,找到心的根源。
✨ 369中「3」代表創造,先從心靈創造寧靜起步。
1️⃣【啟願陣】 願力 × 信念
🔸 點燃動力,堅持前行。
✨ 「6」象徵流動與成長,讓願力持續推進。
2️⃣【靈陣】 靈性 × 感應
🔸 與宇宙共振,敏銳接收指引。
✨ 「9」是圓滿與超越,打開宇宙靈感之門。
3️⃣【智陣】 智慧 × 策略
🔸 用聰明的方法達成目標。
4️⃣【財陣】 行動 × 生財
🔸 落實計畫,創造財富。
5️⃣【守陣】 保護 × 穩定
🔸 守護自己,保持穩定場域。
6️⃣【心陣】 感恩 × 和諧
🔸 以感恩心平衡生活。
7️⃣【體陣】 健康 × 氣流
🔸 養護身心,氣脈通暢。
8️⃣【緣陣】 連結 × 貴人
🔸 擴展人脈,獲得助力。
9️⃣【時陣】 時機 × 順勢
🔸 抓住最佳時刻,順勢而為。
🔟【合陣】 聚合 × 平衡
🔸 整合資源,保持動態平衡。
1️⃣1️⃣【創陣】 靈感 × 藝術
🔸 創造力與美感的展現。
1️⃣2️⃣【歸陣】 圓滿 × 超越
🔸 達到成果,邁向更高層次。
2025年11月11日 星期二
《願流回恩・光行天下》
🕊 《願流回恩・光行天下》
曾有低谷風雨寒,
幸得眾心照我安。
一句暖語,如燈如岸,
化我孤舟成帆。
今朝我立於明光前,
願將感恩化為甘泉。
潤彼心田,溫此世緣,
願福流轉萬千。
📍願力錨點 × 回流宣言:
「我以感恩為舟,
以善念為風,
將所有幫助過我的人,
願福同歸,光同行。」
——明離南.感恩行者之印
《系統建置啟動文》
《系統建置啟動文》
嗨,大家~
有時候我們都會覺得「我還沒準備好」、「我沒資源」,
但其實,行動本身就是最好的資源。
你願意開始整理、寫下一段想法、畫個架構圖,
那就是你在讓「能量變成現實」。
不需要一次做到完美,
只要一步一步建起自己的小系統、自己的節奏。
每寫下一頁、每完成一個任務,
就是在穩穩地累積你的力量。
我們都在同一條創造的路上,
每個人都能用自己的方式把靈感化為現實。
📍啟動句:
我願意行動、整理、建構。
一步一腳印,讓我的資源、想法、創意都開始流動起來。
2025年11月6日 星期四
〈返世界〉
物質界中幻化生,
萬象皆戲,心識為源。
陰陽八卦轉太極,
動靜互根,陰陽歸一。
外求星河內尋心,
宇宙在外,亦在吾心。
降維場中悟昇維,
幻中覺真,方得圓滿。
頻率共振破假空,
識破幻影,直見本體。
中庸穩態守真我,
居中而靜,萬法不侵。
覺醒非遠即當下,
此念即道,當下即悟。
天地同心一念和。
人合於天,天合於道。
2025年10月8日 星期三
《 穩中軸 》
《 穩中軸 》
立於天地之中,心為軸,德為印。
不逐勢流,不陷幻影,
以靜制動,以光導行。
火照於心,明辨真假;
水潤於性,安然無波。
慈為劍,斷邪迷;
儉為盾,護正氣;
不先為先,天地順我而運。
觀萬象皆流轉,
惟中軸不動,如太極之樞,
轉則有序,靜則生慧。
願行於世間,不亂於外;
願心如明燈,照己亦照人。
德光護身,財氣自通;
心法常穩,願頻自然展。
此咒一念,三六九歸中,
此念一成,諸願得顯。
2025年9月27日 星期六
Step 3:AI 助手分析(上層) - K 線圖 + MA10/MA20 (買賣信號標記 )
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 高點則多頭確認。
Step 2:交易觀察(中層) - K 線圖(含移動平均線)
# -*- coding: utf-8 -*-
import yfinance as yf
import pandas as pd
import mplfinance as mpf
from datetime import datetime
# -------------------------
# 1️⃣ 設定標的:台灣加權指數 (^TWII) 近似台指期
# -------------------------
symbol = "^TWII" # 台灣加權指數
# -------------------------
# 2️⃣ 抓取最近三個月資料
# -------------------------
df = yf.download(symbol, period="3mo", auto_adjust=False)
# 如果是 MultiIndex,去掉 Ticker 層級
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️⃣ 畫 K 線圖
# -------------------------
mpf.plot(
df,
type='candle',
style='yahoo',
title=f"{symbol} 台灣加權指數 K 線圖",
volume=True,
mav=(10, 20)
)
# -------------------------
# 5️⃣ 整理資料,存成 CSV
# -------------------------
df_reset = df.reset_index()
df_clean = df_reset[['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'MA10', 'MA20']].copy()
df_clean['Timestamp'] = df_clean['Date'].apply(lambda x: int(datetime.timestamp(x)))
filename = f"{symbol}_daily_data.csv"
df_clean.to_csv(filename, index=False, encoding="utf-8-sig")
print(f"✅ 已生成檔案:{filename}")
print(df_clean.tail())
---------------------------------------------------------------------------------------------------------------
AI × 金融 × 實修三步走
AI × 金融 × 實修三步走
Step 1:數據清洗(底層)
-
任務:寫一段程式,把某檔股票的收盤價抓下來,並存成一個
stock_data.csv。 -
重點:檔案要包含
日期、收盤價,最好還有timestamp。 -
成果:有一個乾淨的 CSV。
Step 2:交易觀察(中層)
-
任務:用 Python 畫一張圖(折線圖或簡單 K 線)。
-
重點:看 5 日移動平均線、最近是否有上升或下降。
-
成果:你自己「寫下觀察」,一句話就好。
Step 3:AI 助手分析(上層)
-
任務:把 CSV 丟給 ChatGPT,請它幫忙分析:
-
這 5 天走勢偏多頭還是空頭?
-
有沒有出現「轉折」的可能?
-
-
重點:這不是投資建議,而是讓你訓練「AI × 直覺」的互補。
-
成果:你得到一份 AI + 直覺的交易觀察紀錄。
-----------------------------------------------------------------------------------------------
我幫你把 Step 1:抓股價 + 存 CSV 的程式寫好:
# -*- coding: utf-8 -*- import yfinance as yf import pandas as pd from datetime import datetime # ------------------------- # 1️⃣ 設定股票代號(台股用 "2330.TW",美股用 "NVDA") # ------------------------- symbol = "NVDA" # 這裡你可以改成 2330.TW (台積電) # ------------------------- # 2️⃣ 抓取最近一個月資料 # ------------------------- df = yf.download(symbol, period="1mo", auto_adjust=False) # ------------------------- # 3️⃣ 整理資料,只留日期與收盤價 # ------------------------- df_reset = df.reset_index() df_clean = df_reset[['Date', 'Close']].copy() # 加上 timestamp 欄位 df_clean['Timestamp'] = df_clean['Date'].apply(lambda x: int(datetime.timestamp(x))) # ------------------------- # 4️⃣ 存成 CSV # ------------------------- filename = f"{symbol}_close_prices.csv" df_clean.to_csv(filename, index=False, encoding="utf-8-sig") print(f"✅ 已存成 CSV 檔案:{filename}") print(df_clean.tail())執行後的成果:
-
會生成一個檔案:
NVDA_close_prices.csv -
檔案內容大概會像這樣:
2025年9月14日 星期日
< 在世界 >
「這首詩是我對 369數字易經 的一點體悟:從宇宙到人間、從迷失到覺醒、最後走向共振共創。願啟發場域思考,迴向大家心靈揚升。」
「願我們在這個場域中,以共鳴共振共創造,彼此啟發,同行靈魂的覺醒之路。」
< 在世界 >
外星世界外星象,
探索地球體驗感,
完成任務探詢旅,
地球本是物質界,
花花世界太極流,
流動陰陽出八卦,
乾坤變化易之門,
生生不息易經演,
演化複雜變化深,
不斷向外覓尋找,
迷失靈魂使命活,
高維世界意識揚,
必然了知降維場,
內在探索動靜穩,
頻率訊息真假空,
穩定身心靈狀態,
維持中庸判斷心,
明白道理實踐活,
落地人生邁步進,
覺醒人生自然成,
醒覺場域磁場流,
陽光人生能量場,
共鳴共振共創造,
天地同心協同生。
2025年9月11日 星期四
Python 進階語法範例
Python 進階語法範例
1️⃣ 列表推導式 (List Comprehension)
prices = [100, 105, 102, 110]
returns = [(prices[i+1] - prices[i]) / prices[i] * 100 for i in range(len(prices)-1)]
print(returns) # [5.0, -2.86, 7.84]
解釋:
-
prices是每日收盤價清單。 -
range(len(prices)-1)產生 index[0,1,2],用來抓前一天和下一天的價格差。 -
(prices[i+1] - prices[i]) / prices[i] * 100計算每日報酬率(百分比)。 -
[...] for i in range(...)→ 列表推導式,把每個計算結果生成新的清單returns。
2️⃣ 字典推導式 (Dict Comprehension)
fields = ["open", "high", "low", "close"]
index_map = {field: i for i, field in enumerate(fields)}
print(index_map) # {'open': 0, 'high': 1, 'low': 2, 'close': 3}
解釋:
-
enumerate(fields)→ 同時拿到索引i和對應元素field。 -
{field: i for ...}→ 字典推導式,把元素作為 key,索引作為 value。 -
index_map會把欄位名稱對應到位置,方便後續抓資料。
3️⃣ Lambda + Reduce
from functools import reduce
daily_returns = [0.01, -0.02, 0.03, 0.01]
cumulative = reduce(lambda x, y: x * (1 + y), daily_returns, 1) - 1
print(round(cumulative, 4)) # 0.0297
解釋:
-
reduce(func, iterable, start)→ 把iterable依序套用func,從start開始。 -
lambda x, y: x * (1 + y)→ 匿名函數,把累積報酬與每日報酬結合。 -
1→ 初始值 (本金)。 -
-1→ 最後減去本金,得到純報酬率。
4️⃣ Enumerate
prices = [100, 102, 101, 104]
for i, price in enumerate(prices):
print(f"Day {i}: Price={price}")
解釋:
-
enumerate(prices)→ 同時拿到 index 和價格。 -
f"Day {i}: Price={price}"→ f-string 格式化,顯示哪一天價格。
5️⃣ Zip
dates = ["2025-09-08", "2025-09-09", "2025-09-10"]
prices = [100, 102, 101]
for d, p in zip(dates, prices):
print(f"{d}: {p}")
解釋:
-
zip(dates, prices)→ 將兩個序列配對,迭代時同時取得日期和價格。 -
適合把多個清單「同步」處理。
6️⃣ 裝飾器 (Decorator)
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"執行時間: {time.time() - start:.4f} 秒")
return result
return wrapper
@timer
def simulate_trade():
return sum([i**2 for i in range(10**6)])
simulate_trade()
解釋:
-
@timer→ 把simulate_trade包裝在timer裡。 -
wrapper(*args, **kwargs)→ 可接受任何參數的中介函數。 -
time.time()→ 計算程式執行時間。 -
sum([i**2 for i in range(10**6)])→ 模擬計算大量交易策略。 -
執行時會印出耗時,方便優化程式效率。
7️⃣ 生成器 (Generator, yield)
def price_stream(prices):
for p in prices:
yield p
prices = [100, 102, 104, 103]
for p in price_stream(prices):
print("Next price:", p)
解釋:
-
yield→ 生成器,每次迭代只產生一個值,不會把全部資料載入記憶體。 -
適合大數據或串流資料。
-
for p in price_stream(prices)→ 每次取一個價格,用完再取下一個。
8️⃣ 型別註解 (Type Hint)
def moving_average(prices: list[float], window: int) -> list[float]:
return [sum(prices[i:i+window]) / window for i in range(len(prices)-window+1)]
print(moving_average([100, 101, 102, 103, 104], 3)) # [101.0, 102.0, 103.0]
解釋:
-
prices: list[float]→ 說明prices是浮點數清單。 -
window: int→ 視窗大小是整數。 -
-> list[float]→ 回傳結果是浮點數清單。 -
[sum(prices[i:i+window]) / window ...]→ 計算移動平均。
2025年9月10日 星期三
Python 基本語法與範例清單
整理一個 Python 基本語法與範例清單
1️⃣ 變數與資料型態
# 整數、浮點數、字串、布林
a = 10 # 整數
b = 3.14 # 浮點數
c = "Hello" # 字串
d = True # 布林
# 印出變數
print(a, b, c, d)
2️⃣ 數學運算
x = 5
y = 2
print(x + y) # 加法 → 7
print(x - y) # 減法 → 3
print(x * y) # 乘法 → 10
print(x / y) # 除法 → 2.5
print(x // y) # 取整數 → 2
print(x % y) # 取餘數 → 1
print(x ** y) # 次方 → 25
3️⃣ 字串操作
name = "John"
greeting = f"Hello, {name}!" # f-string
print(greeting) # Hello, John!
text = "Python"
print(text.upper()) # 大寫
print(text.lower()) # 小寫
print(text[0]) # 取第一個字元 'P'
print(text[0:4]) # 切片 'Pyth'
4️⃣ List(串列)、Dict(字典)、Tuple(元組)
# List
fruits = ["apple", "banana", "cherry"]
fruits.append("orange") # 加入
print(fruits[1]) # 'banana'
# Dict
person = {"name": "John", "age": 30}
print(person["name"]) # 'John'
person["city"] = "Taipei" # 新增 key
print(person)
# Tuple(不可變)
point = (10, 20)
print(point[0]) # 10
5️⃣ 條件判斷
x = 10
if x > 5:
print("x 大於 5")
elif x == 5:
print("x 等於 5")
else:
print("x 小於 5")
6️⃣ 迴圈
# for 迴圈
for i in range(5):
print(i) # 0 1 2 3 4
# while 迴圈
count = 0
while count < 5:
print(count)
count += 1
7️⃣ 函數
def greet(name):
return f"Hello, {name}!"
print(greet("Alice"))
8️⃣ 類別與物件(物件導向)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name}, I'm {self.age} years old.")
p1 = Person("John", 30)
p1.greet()
9️⃣ 模組與套件
import math
print(math.sqrt(16)) # 4.0
# 安裝第三方套件
# pip install requests
import requests
response = requests.get("https://www.example.com")
print(response.status_code)
🔟 範例:簡單爬蟲 + Dict 儲存結果
import requests
from bs4 import BeautifulSoup
url = "https://www.example.com"
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
data = {} # 用 Dict 儲存結果
data["title"] = soup.title.string if soup.title else "無標題"
print(data)
Python 物件導向 + 網路爬蟲 + Dict 使用的簡單範例
🔹 範例:用物件導向抓取網頁資料,並用 Dict 儲存結果
import requests
from bs4 import BeautifulSoup
# 1️⃣ 定義一個網頁爬蟲類別
class WebScraper:
def __init__(self, url):
self.url = url
self.data = {} # 使用 Dict 儲存爬取資料
# 方法:抓取網頁內容
def fetch(self):
try:
response = requests.get(self.url)
response.raise_for_status()
return response.text
except Exception as e:
print(f"抓取失敗: {e}")
return None
# 方法:解析網頁標題
def parse_title(self, html):
soup = BeautifulSoup(html, "html.parser")
title_tag = soup.find("title")
if title_tag:
self.data["title"] = title_tag.text # 存入 Dict
else:
self.data["title"] = "無標題"
# 方法:顯示爬取結果
def show_data(self):
for key, value in self.data.items():
print(f"{key}: {value}")
# 2️⃣ 使用範例
if __name__ == "__main__":
url = "https://www.example.com"
scraper = WebScraper(url) # 建立爬蟲物件
html_content = scraper.fetch() # 抓取網頁
if html_content:
scraper.parse_title(html_content) # 解析網頁標題
scraper.show_data() # 顯示結果 🔹 範例解析
物件導向
WebScraper 是一個類別,封裝了抓取、解析和顯示的方法。
每個爬蟲物件都可以有自己的 url 和 data。
Dict 使用
self.data 是字典,用來存放抓取結果,可以靈活擴展,例如增加 author, date, links 等資料欄位。
網路爬蟲
用 requests 抓取網頁內容
用 BeautifulSoup 解析 HTML
🔹 __name__ 的意思
底線的意義
Python 中 __xxx__ 這種命名方式稱為 魔術方法 / 魔術屬性(Magic Method / Dunder,Double UNDERSCORE)。
它們通常由 Python 系統自動使用,用來控制某些特殊行為或提供系統訊息。
每個 Python 模組都有 __name__ 這個屬性,表示這個模組的名稱。
重要的判斷:
if __name__ == "__main__":
# 當前程式被直接執行時,這段程式才會跑
__name__ == "__main__" 的意思:
「這個模組是直接被 Python 執行的,而不是被別的模組 import 的」
如果這個模組是被別的程式 import,__name__ 就會是模組名稱,而不是 "__main__"
🔹 舉例
檔案 example.py:
def say_hello():
print("Hello")
if __name__ == "__main__":
say_hello()
直接執行
python example.py
輸出:
Hello
被別的模組 import
# main.py
import example
輸出:
# 不會印 Hello,因為 __name__ 不是 "__main__"
💡 總結
__name__ 是系統屬性,表示「這個程式或模組是怎麼被使用的」。
用兩個底線是 Python 的約定,表示這是系統定義的特殊屬性,不是你自己隨便取的變數
條件篩選賦值
1️⃣ 範例資料
import pandas as pd
data = pd.DataFrame({
'Close': [100, 102, 101, 105, 107],
'MA5': [None, None, 101, 103, 104],
'MA20': [None, None, 100, 102, 103]
})
2️⃣ 條件篩選賦值
假設規則:
-
當 MA5 > MA20 → Signal = 1(買入)
-
當 MA5 < MA20 → Signal = -1(賣出)
data['Signal'] = 0 # 先給初值
# MA5 > MA20 → 買入
data.loc[data['MA5'] > data['MA20'], 'Signal'] = 1
# MA5 < MA20 → 賣出
data.loc[data['MA5'] < data['MA20'], 'Signal'] = -1
print(data)
3️⃣ 輸出結果
Close MA5 MA20 Signal
0 100 NaN 100.0 0
1 102 NaN 100.0 0
2 101 101.0 100.0 1
3 105 103.0 102.0 1
4 107 104.0 103.0 1
🔹 解說
-
data.loc[條件, '欄位'] = 值
→ 先用條件篩選出符合的列,再把指定欄位賦值。 -
可以多次使用
loc針對不同條件賦不同值。 -
這是 Pandas 常用的策略訊號生成方法。
import pandas as pd
data = pd.DataFrame({
'Close': [100, 102, 101, 105, 107],
'MA5': [None, None, 101, 103, 104],
'MA20': [None, None, 100, 102, 103]
})
data['Signal'] = 0 # 先給初值
# MA5 > MA20 → 買入
data.loc[data['MA5'] > data['MA20'], 'Signal'] = 1
# MA5 < MA20 → 賣出
data.loc[data['MA5'] < data['MA20'], 'Signal'] = -1
print(data)
股票的基本資料
這樣執行後,你會看到:
-
info → 股票公司基本資訊(名稱、產業、PE、股本、股東權益…)
-
financials → 歷年損益表
-
balance_sheet → 資產負債表
-
cashflow → 現金流量表
-
dividends → 歷史股利
-
splits → 股票拆股紀錄
1️⃣基本資料
info = ticker.info print(info) -
info是一個 字典 (dict),包含該股票的公司資料、產業、上市地點、市值、市盈率、股價、Beta 值等。 -
範例欄位:
{ 'symbol': '2330.TW', 'shortName': '台積電', 'longName': 'Taiwan Semiconductor Manufacturing Company Limited', 'sector': 'Technology', 'industry': 'Semiconductors', 'marketCap': 6000000000000, 'previousClose': 580.0, ... } ======================================================
import yfinance as yf
import pandas as pd
# 1️⃣ 選股票
ticker_symbol = "2330.TW"
ticker = yf.Ticker(ticker_symbol)
# 2️⃣ 取得基本資料
info = ticker.info
print("📌 基本資料(info):")
for key, value in info.items():
print(f"{key}: {value}")
# 3️⃣ 歷年損益表(Income Statement)
financials = ticker.financials
print("\n📌 歷年損益表(financials):")
print(financials)
# 4️⃣ 資產負債表(Balance Sheet)
balance_sheet = ticker.balance_sheet
print("\n📌 資產負債表(balance_sheet):")
print(balance_sheet)
# 5️⃣ 現金流量表(Cash Flow)
cashflow = ticker.cashflow
print("\n📌 現金流量表(cashflow):")
print(cashflow)
# 6️⃣ 股利資料
dividends = ticker.dividends
print("\n📌 歷史股利(dividends):")
print(dividends)
# 7️⃣ 股票拆股歷史
splits = ticker.splits
print("\n📌 股票拆股歷史(splits):")
print(splits)
yfinance 基本下載資料
1️⃣ yfinance 基本下載資料
import yfinance as yf
# 選股票
ticker = "2330.TW"
# 下載歷史股價(原生欄位 OHLCV)
data = yf.download(ticker, period="3mo", interval="1d", auto_adjust=True)
# 檢查資料型態
print(type(data)) # pandas DataFrame
print(data.columns) # ['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
-
用途:取得日線或其他週期股價資料
-
常用參數:
-
period:資料時間範圍,例如"1mo","3mo","1y" -
interval:時間頻率,例如"1d","1h","1wk" -
auto_adjust:是否自動調整股價(拆股 / 股息)
-
2️⃣ 原生欄位說明
| 欄位 | 說明 |
|---|---|
| Open | 開盤價 |
| High | 最高價 |
| Low | 最低價 |
| Close | 收盤價 |
| Adj Close | 調整後收盤價(考慮拆股 / 股息) |
| Volume | 成交量 |
這些是 API 下載回來就有的,不需要自己計算。
3️⃣ 衍生欄位/計算
# 移動平均線
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()
# 日報酬率
data['Return'] = data['Close'].pct_change()
# 交易訊號
data['Signal'] = 0
data.loc[data['MA5'] > data['MA20'], 'Signal'] = 1
data.loc[data['MA5'] < data['MA20'], 'Signal'] = -1
-
說明:
-
rolling(n).mean()→ 計算 n 日移動平均 -
pct_change()→ 計算報酬率 -
loc[...]→ 條件篩選賦值
-
4️⃣ 其他底層 API 函數
| Function / 屬性 | 用途 | 範例 |
|---|---|---|
yf.Ticker("2330.TW") | 建立股票物件 | ticker = yf.Ticker("2330.TW") |
ticker.info | 取得股票基本資料 | info = ticker.info |
ticker.dividends | 歷年股利資料 | divs = ticker.dividends |
ticker.financials | 歷年損益表 | fin = ticker.financials |
ticker.balance_sheet | 歷年資產負債表 | bs = ticker.balance_sheet |
ticker.cashflow | 歷年現金流量表 | cf = ticker.cashflow |
ticker.splits | 拆股歷史 | splits = ticker.splits |
5️⃣ 資料檢查與轉換(pandas 基礎用法)
# 確保成交量是 Series
if isinstance(data['Volume'], pd.Series):
volume = data['Volume']
else:
volume = data['Volume'].squeeze()
-
用途:避免型態不一致造成計算錯誤
-
說明:
-
isinstance()→ 判斷型態 -
squeeze()→ 把 DataFrame 轉成 Series補充
-
時間索引 (
data.index)-
每一列的日期或時間點(DateTimeIndex)
-
可以做 x 軸圖表、時間篩選
-
-
自訂欄位
-
你可以在原始 DataFrame 上加自己的欄位,例如:
data['MA5'] = data['Close'].rolling(5).mean() data['Return'] = data['Close'].pct_change() -
這些都是你自己計算的,但基礎數據來源還是 yfinance API 下載的欄位
-
-


