Table of Contents
在投資論壇中常有一些常見的投資法或是交易策略等等,其中就好比跟隨大戶法人做買賣、又好比買量不賣量等術語,而我們今天就是要探究人人口耳相傳的甜蜜期是否真有其事,而這些甜蜜期對於交易來說是否存在效率,還是只是大眾的一種謬論?
本文使用 Window10 並以 Spyder 作為編輯器
###coding三寶 import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
###API串接套件 import tejapi import time tejapi.ApiConfig.api_key="YOUR KEY" tejapi.ApiConfig.ignoretz = True###時間欄位忽略時區
TEJ API 公司基本資料:資料庫代碼為(TWN/AIND),「TSE產業別」
TEJ PRO 資料庫 :新上市(櫃)首次承銷
本文資料取自TEJ PRO資料庫,在本機端讀取,公司資料從1970年到2022年
df = pd.read_excel('C:/Users/user/Desktop/Tej/PreIPO.xlsx')
首先將需要的資料欄位選取出來即可,接著先創造一個Dataframe(A3)將收盤價取出來跑迴圈計算報酬率,最後將欄位名字改成報酬率,刪除第一天收盤價再合併公司名稱及代號。
A1 = df[['代號','名稱','上市日收盤價(元)','上市日後一天收盤價(元)','上市日後二天收盤價(元)','上市日後三天收盤價(元)','上市日後四天收盤價(元)','上市日後五天收盤價(元)']]
A2 = A1[['上市日收盤價(元)','上市日後一天收盤價(元)','上市日後二天收盤價(元)','上市日後三天收盤價(元)','上市日後四天收盤價(元)','上市日後五天收盤價(元)']]
A3 = A2.copy() for i in range(1, len(A2.columns)): A3.iloc[:,i:i+1] = ((A2.iloc[:,i:i+1].values)/(A2.iloc[:,0:1].values))-1
A3 = A3.rename(columns={'上市日後一天收盤價(元)' : '後一日累積報酬率%', '上市日後二天收盤價(元)' : '後二日累積報酬率%', '上市日後三天收盤價(元)' : '後三日累積報酬率%', '上市日後四天收盤價(元)' : '後四日累積報酬率%', '上市日後五天收盤價(元)' : '後五日累積報酬率%'}, inplace = False) data = A3.drop('上市日收盤價(元)',axis=1) data1 = A1.join(data, how = "left")
接著以代號製作一個List來撈取TEJ API產業別,並將撈取出來的資料公司簡稱的欄位名改成代號,方便我們後續去做合併資料的動作,其中又必須刪掉一些特別的產業別代號,原因是可能該產業的樣本太少,或是性質特殊因而排除。
Company = A1['代號'].to_list() Detail = tejapi.get('TWN/AIND', chinese_column_name = True , paginate = True, coid = Company, opts={'columns':['coid','ind1']}) # 舊產業名
Detail = Detail.rename(columns={"公司簡稱" : "代號"}, inplace = False) qq = Detail[Detail['TSE 產業別'] != "17" ] qq = qq[qq['TSE 產業別'] != "14" ] qq = qq[qq['TSE 產業別'] != "19" ] qq = qq[qq['TSE 產業別'] != "20" ] qq = qq[qq['TSE 產業別'] != "80" ] qq = qq[qq['TSE 產業別'] != "32" ] qq = qq[qq['TSE 產業別'] != "33" ] qq = qq[qq['TSE 產業別'] != "34" ] qq = qq[qq['TSE 產業別'] != "91" ]
最後將篩選出來的產業合併先前計算出的報酬率,得到我們需要的興櫃成功上市櫃的公司。
PreIPO = data1.merge(qq, on='代號')
最後就是來繪圖了,首先要先將存在NA值得資料刪除,並利用產業別來當作標的,分別計算該產業所擁有的勝率,所謂勝率就是凡只要報酬率為正值的公司就算被納入,最後在除上該產業所對應的Total公司。
PreIPO = PreIPO.dropna(axis=0,how='any') # 清空NA
industry_name = np.unique(PreIPO[['TSE 產業別']])
payoff = np.array(['後一日累積報酬率%','後二日累積報酬率%','後三日累積報酬率%','後四日累積報酬率%','後五日累積報酬率%'])
industry_number = len(PreIPO.groupby('TSE 產業別').count())
save_IPO = list() for i in range(industry_number): for j in range(len(payoff)): positive_payoff = len(PreIPO[(PreIPO['TSE 產業別'] == industry_name[i]) & (PreIPO[payoff[j]] > 0)]) total_number = len(PreIPO[(PreIPO['TSE 產業別'] == industry_name[i])]) save_IPO.append(f'{round(positive_payoff/total_number*100,2)}')
接著就畫圖,詳細Code請看尾頁的完整程式碼。
上圖要表達的是,可以很明顯看到勝率高的產業是甚麼,但由於因為資料庫的資料若用中文顯示於圖檔中將更難以查閱,可能擠在一起,因此小編手寫並將產業調整的時間也一併寫上,我們發現上市櫃擁有甜蜜期的公司以電器電纜勝率最高。若追求以勝率為效率之投資者即可參考本圖結果。
再來我們要計算產業的平均報酬率
PreIPO = PreIPO.dropna(axis=0,how='any') # 清空NA
industry_name = np.unique(PreIPO[['TSE 產業別']])
payoff = np.array(['後一日累積報酬率%','後二日累積報酬率%','後三日累積報酬率%','後四日累積報酬率%','後五日累積報酬率%'])
industry_number = len(PreIPO.groupby('TSE 產業別').count())
save_IPO = list() for i in range(industry_number): for j in range(len(payoff)): industry_payoff = PreIPO[payoff[j]][PreIPO['TSE 產業別']==industry_name[i]].mean() save_IPO.append(f'{round(industry_payoff*100,2)}')
上圖則是要表達的是,我們發現有些產業所獲得得報酬率,依據天數的增加所獲得的報酬率波動較高,有些波動較小。就以勝率最高的電器電纜來說,他勝率高風險波動也小,然而勝率也跟電器電纜差不多的橡膠業,波動度卻比電器電纜高。
因此若我們選擇以此為一種投資策略來操進行短線操作,其實可以篩選自己適合的風格,看是想要擁抱波動度來獲得報酬,還是維持勝率雖然可能賺不多,但不輸就好的風格。這篇文章主要是想讓讀者了解到,確實是有甜蜜其存在,且也可以以此為一種策略方法來投資有價證券,然而當我們細分產業後也才發現,甜蜜期有時候不適用於某些類群的產業。還是建議在得知可能某種策略有效時,多加細分因子去做分析,較不容易在投資中失利唷。
電子報訂閱