2025年11月24日 星期一

《AI × 命理 × 阿德勒 × 太極:陰陽轉換之道》

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 (買賣信號標記 )

 

 

  • 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 高點則多頭確認。




    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())

     ---------------------------------------------------------------------------------------------------------------

  • K 線圖(含 MA10、MA20 均線)。
  • CSV 檔(包含收盤價、成交量、移動平均、timestamp)。

  •  

      

     

     


     

     

    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() # 顯示結果
     

    🔹 範例解析

    1. 物件導向

      • WebScraper 是一個類別,封裝了抓取、解析和顯示的方法。

      • 每個爬蟲物件都可以有自己的 url 和 data。

    2. Dict 使用

      • self.data 是字典,用來存放抓取結果,可以靈活擴展,例如增加 author, date, links 等資料欄位。

    3. 網路爬蟲

      • 用 requests 抓取網頁內容

      • 用 BeautifulSoup 解析 HTML

        🔹 __name__ 的意思

      • 底線的意義

        • Python 中 __xxx__ 這種命名方式稱為 魔術方法 / 魔術屬性(Magic Method / Dunder,Double UNDERSCORE)。

        • 它們通常由 Python 系統自動使用,用來控制某些特殊行為或提供系統訊息。

        • 每個 Python 模組都有 __name__ 這個屬性,表示這個模組的名稱。

        • 重要的判斷:

      if __name__ == "__main__": # 當前程式被直接執行時,這段程式才會跑
    4. __name__ == "__main__" 的意思:

      • 「這個模組是直接被 Python 執行的,而不是被別的模組 import 的」

      • 如果這個模組是被別的程式 import,__name__ 就會是模組名稱,而不是 "__main__"


    🔹 舉例

    檔案 example.py:

    def say_hello(): print("Hello") if __name__ == "__main__": say_hello()
    1. 直接執行

    python example.py

    輸出:

    Hello
    1. 被別的模組 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)

    股票的基本資料

     

    這樣執行後,你會看到:

    1. info → 股票公司基本資訊(名稱、產業、PE、股本、股東權益…)

    2. financials → 歷年損益表

    3. balance_sheet → 資產負債表

    4. cashflow → 現金流量表

    5. dividends → 歷史股利

    6. splits → 股票拆股紀錄

       

      1️⃣基本資料

      info = ticker.info print(info)
    7. info 是一個 字典 (dict),包含該股票的公司資料、產業、上市地點、市值、市盈率、股價、Beta 值等。

    8. 範例欄位:

      { 'symbol': '2330.TW', 'shortName': '台積電', 'longName': 'Taiwan Semiconductor Manufacturing Company Limited', 'sector': 'Technology', 'industry': 'Semiconductors', 'marketCap': 6000000000000, 'previousClose': 580.0, ... }
    9. ====================================================== 

       

    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 下載的欄位

      •