發表文章

[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-總結

圖片
這篇其實2023年初就該發了,但懶病拖了一年多,下面的回測資料基本上都是過去實作的複製貼上,想玩現在的小夥伴可以自己摳程式去執行。 另外還是要說明,這資料並沒有洗得很乾淨,後期才上市櫃的跟著滾也會和實際值有差異,大家只能當個參考哈。 背景 2020-2022因疫情、通膨與貨幣政策變動,導致股市出現明顯大幅漲跌,為尋找安全進場之點位,故本專題將實作市場慣用之「市場寬度」指標在臺灣加權指數上的市場樣態驗證。 目的 以市場寬度應用於辨識市場樣態的指標實作。 透過參數調整,與簡易的回測模型建立多空參考策略 市場寬度(Market Breadth) 指標功能 分析市場強弱的指標,通常指的是在某一特定時期內,市場中上漲股票的數量相對於下跌股票的數量的比率。 幫助投資者了解市場整體強弱,並且通過相應的投資策略來應對不同的市場狀況。 常用參考參數 漲跌家數百分比 漲跌家數差 均線家數百分比 均線家數差 創高家數比 成交漲跌量差 應用模組 爬蟲:Requests 資料處理:Pandas 金融資料:Yfinance 數據回測:Backtesting 視覺化圖表:Tableau、 Backtesting.plot 整體流程 20-200MA比較 可以觀察到重合底部,但無法判斷高檔鈍化 回測大盤 以這種白癡策略也沒有賺多少XD 結論 在市場寬度與臺灣加權股價指數對照圖中可以顯見該指標具辨識市場相對低點之功能,但尚無法以此2指標線觀察出市場相對高點。 建議 後續驗證者可參採其他天期之日均線家數百分比或選取不同的指標來驗證能否觀察出相對的市場高點。 本專題之回測乃以臺灣加權股價指數為標的物,非一般可供投資人交易之金融性商品,若有後續研究測試者可使用指數型商品如元大台灣50(0050)、富邦台灣50(006208)對比元大台灣中型100(0051)、富邦臺灣公司治理100(00692)之策略績效,來驗證大型權值股與中小型股之集合在市場寬度策略上的表現個別如何。

[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step4.匯入檔案以產生策略

  讀取和處理數據 讀取數據 python import pandas as pd '讀取之前處理好的數據檔案,並將日期格式處理乾淨:' path4 = r'D:\市場寬度 專題\2020-2024市場寬度與大盤指數.csv' # 從檔案讀取 MW = pd.read_csv(path4) 這段程式碼從指定路徑讀取之前處理好的市場寬度與大盤指數的數據。 處理日期格式 python MW[ 'Date' ] = MW[ 'Date' ].apply( lambda x: x[: 10 ]) MW[ 'Date' ] = pd.to_datetime(MW[ 'Date' ], format = "%Y-%m-%d" ) MW.columns = [ 'Date' , '20ma_p' , '200ma_p' , 'TWII' ] MW.set_index( 'Date' , inplace= True ) 由於原日期格式包含時區資訊,無法直接轉換,因此先提取前10個字元(日期部分),再使用 pd.to_datetime 進行轉換。最後,將欄位名稱重新命名並將 'Date' 設定為索引。 保存處理後的數據 python path5 = r'D:\市場寬度 專題\2020-2024市場寬度與大盤指數(DT).csv' MW.to_csv(path5, sep= ',' , na_rep= '' , float_format= '%.4f' , encoding= 'utf_8_sig' ) 將處理後的數據保存為新的 CSV 檔案。 準備回測數據 python from backtesting import Backtest, Strategy from backtesting.lib import crossover from backtesting.test import SMA '資料引入:' data = pd.DataFr...

[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step3.將數值處理並產出市場寬度資料

拖了很久最近台股又再大跌才想到要補一下這段,現在有ChatGPT很方便,程式碼餵給他,幫我分段說明就行了,如果有想到什麼缺的再另外補哈。 匯入模組 python import pandas as pd 首先,匯入 pandas 模組,用於資料處理。 從檔案匯入歷史股價並計算市場寬度 python path1 = r"D:\市場寬度 專題\2020-2024個股股價df.csv" close = pd.read_csv(path1) print (close) print (close.shape[ 0 ], close.shape[ 1 ]) close.set_index( 'Date' , inplace= True ) stock_totall_Count = (close.shape[ 1 ]) print (close) 這段程式碼從指定路徑讀取歷史股價資料,並設定 'Date' 欄為索引。 close.shape 用於查看資料的列數和欄數。 計算移動平均線 python '個股20日均線' ma20 = close.rolling( 20 , min_periods= 20 ).mean() '個股200日均線' ma200 = close.rolling( 200 , min_periods= 200 ).mean() 這裡計算了20日和200日的移動平均線(MA),分別用於短期和長期的市場趨勢分析。 計算市場寬度 python '市場寬度:大於20日均線家數百分比' close_B20 = (close > ma20) close_C20 = close_B20. sum (axis= 1 ) / (stock_totall_Count - close.isna(). sum (axis= 1 )) '市場寬度:大於200日均線家數百分比' close_B200 = (close > ma200) close_C200 = close_B200. sum (axis= 1 ) / (stock_totall_Count - close.isna(). sum (axis= 1 )) 這段程式碼計算了大於20...

[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step2以Yfinance抓取名單中證券2010-2023收盤價

           承前篇, Step1爬取上市櫃公司股票與ETF代碼名單 ,有了名單之後當然就要來開始爬資料啦!Yfinance的資料抓取很簡單,這邊因為資料的需求我只要Close收盤價,需要其他的小夥伴自己研究蛤。 在本文中,我們將介紹如何使用 Python 中的 requests 、 time 、 os 、 csv 和 pandas 模組,以及 yfinance 庫來爬取台灣上市櫃股票及 ETF 的數據。這些數據將會被處理並保存為 CSV 文件,以供後續分析使用。 1. 讀取股票代碼 首先,我們從 CSV 文件中讀取股票代碼,這些代碼將被用於後續的數據爬取。以下是讀取 CSV 文件並將股票代碼存入列表的代碼: python import csv path = r"D:\市場寬度 專題\2023上市櫃股票及ETF代碼(for yfinance)-1.csv" TW_TWO = [] with open (path, "r" , newline= "" , encoding= 'utf_8_sig' ) as csvfile: reader = csv.reader(csvfile) for row in reader: TW_TWO.append(row[ 1 ]) # 取出股票代碼 del TW_TWO[ 0 ] # 刪除第一行(索引) print (TW_TWO) # 檢查讀取結果 2. 爬取股票收盤價 接下來,我們使用 yfinance 庫來爬取每個股票代碼從 2010 年 1 月 1 日到 2023 年 2 月 1 日的收盤價,並將結果存入一個 DataFrame 中。 python import time import pandas as pd import yfinance as yf df_stock = pd.DataFrame() for i in TW_TWO: time.sleep( 1 ) # 防止過快的請求 print (i) # 顯示當前處理的股票代碼 df = yf.download(i, start= '2010-01-01...

[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step1爬取上市櫃公司股票與ETF代碼名單

圖片
          哎,老實說我不太曉得要怎麼開頭,總之呢去年年底參加了工研院主辦的 數據分析師養成班(第2梯) 想了解課程介紹的可以點連結去看一下課程的內容,但這篇也不是要寫心得(辣個以後再說),但到了結訓還是要有專題吧~,專題的題目說真的超~極~難~想~,後來還是在親哥的提點下決定來搞一把這個專題,題目還寫得有夠豪洨「 以Yfinance之臺股資料進行市場寬度指標驗證 」,總而言之一切的一切就在於2022年我開始努力存錢然後歐印台股,套的一蹋糊塗,於是我哥拋了一個影片給我,說裡面有韭菜們需要的答案(並不是這樣 影片連結我直接加在圖裡面了,韭韭們可以直接點圖看連結! 不過呢,韭不韭一回事,Code才是最重要的對吧!? 前情提要! 先去ANACONDA的 Prompt 派起來!  如果跟我一樣用Visua Studio 可以直接在終端機pip(不要問我怎麼安裝環境,我的環境是前男友幫我搞的,感恩前任讚嘆前任!) 線上的記得要加!(例:jupyter上要用 ! pip install pandas) 大神們可以跳過這段~這純粹是當初的小白我看老半天找不到要去哪裡pip所以給新手村玩家參考用! pip install pandas 中國來的(並不是 pip install requests (用來爬蟲的) pip install yfinance(後面會用到的財經模組庫) pip install backtesting(後面會用到的回測工具) 那我們開始吧!複製貼上! 首先是爬取證交所上市櫃公司的股票代號清單 來源網址:自己看蛤 上市證券一覽:https://isin.twse.com.tw/isin/C_public.jsp?strMode=2 上櫃證券一覽:https://isin.twse.com.tw/isin/C_public.jsp?strMode=2 這邊我只要取得上市、上櫃公司股票代碼和ETF 其他權證類都不要 另外因為後續的Yfinance所取得的代碼要求上市+".TW"、上櫃+".TWO",這邊直接把他們全部都給SOLO起來(by 刀鋒寶貝寧貴人) 基本上模組大家抄來抄去就這樣啦 反正複製貼上什麼的最棒了(謎 很多小細節我都標在程式碼裡面 "操作段落" 或 #特別備註 import...