星期交易法研究
~~研究星期一與星期三的漲跌 是否同漲同跌
 

資料來源:證交所
標的:旺宏2337
資料時間區間: 107/01/01~107/09/28
關於資料的取得可以翻之前的文章
然後把資料的第一行刪掉 (證交所的註記)
我分析用的資料會長這樣:


### 以下開始我的分析


import pandas as pd
import numpy as np

###首先讀入資料 
df = pd.read_csv('2337.csv',encoding='big5')       ###讀成  big5 中文 ,試過'utf-8' 不行

###將日期取出來
d = df['日期'] 

### 將資料格式轉為日期 
##這邊本想用 簡單的 pd.to_datetime(d,format='%y/%m/%d' )
##但出現會出現error 如下:

## 查了一下 to_datetime 的格式只支援西元年 ( %Y 是四位數 %y是兩位數)
## 所以新手小白用了一個土炮的方法 用for loop一步一步做~~
# 1. 將 d 的每一行取出  d.iloc[i] 
# 2. 再取出的 前三個字元(即民國年) 如: 107
# 3. 用 int 變成數字 再加 1911 就變成 西元了
# 4. 用str 變為字串 再replace 回去本來的 d.iloc[i]

for i in range(len(df)):
    d.iloc[i]=d.iloc[i].replace(   d.iloc[i][0:3]   ,   str(  int( d.iloc[i][0:3] ) + 1911 )    )

## 不過這樣的寫法 會出現Warning
## 後來查了一下 官方不建議用兩個中誇號 [ ][ ] 的寫法
## 不過小白還沒研究比較好的寫法~~
## 至少現在是堪用啦 


d=pd.to_datetime(d,format='%Y/%m/%d' )      ## 現在可以轉日期了~
d.head()

## 注意 這邊的 type 是datetime64 
## 但如果要用到比較多的操做 PYTHON 是有 datetime 這個資料格式的
## 像是我們接下來要做的 是將日期改成星期
## 小白也是用 for loop一步一步做~~
for i in range(len(df)):
    d.iloc[i]=d.iloc[i].to_pydatetime().weekday()+1

# 解釋一下指令 to_pydatetime 是將 datetime64 轉 datetime
# weekday 是datetime 的語法 會得出 0 1 2 3 4 5 6 
# 0 是星期一 其他依此類推
# 為了方便 我多+1 這樣出來的就是 我們日曆上的星期
# 大家可以確認一下結果對不對 2018/01/02 是第1筆資料 確實是星期2沒錯   


##接著定義漲跌~~
# 生出一個 1 為漲 -1 為跌的 序列

updown=1*((df['收盤價']-df['開盤價'])>0)  +   (-1)*((df['收盤價']-df['開盤價'])<0) 
updown.head()

## 我們可以將 本來的資料和星期, 漲跌 合成一個DateFrame來看看 
res = pd.concat([df, d , updown], axis=1)        #  concat 是將資料合併 axis=1 表示"列合併"
res.columns = ['日期','成交股數','成交金額','開盤價','最高價','最低價','收盤價','漲跌價差','成交筆數','星期','漲跌']
res.head()

## 接下來因為小白想要分析星期一跟星期三的
## 所以取出"星期" 為 1 或 3   (  或的表示法為 |  )
qq= res[ (res['星期'] == 1) | (res['星期'] == 3)  ].reset_index(drop=True) 
# reset_index(drop=True)  是說將index 用成 0 1 2 3 ...

### 再來這邊有點人工了~ 因為每個禮拜不一定週一和週三都有交易 
### 所以我手動把那些不適用的交易日刪除了
qqq= qq[  (qq["日期"] != '2018/01/03') & (qq["日期"] != '2018/02/21')  
       & (qq["日期"] != '2018/02/26') & (qq["日期"] != '2018/04/02') 
       & (qq["日期"] != '2018/06/20') & (qq["日期"] != '2018/09/26') 
       & (qq["日期"] != '2018/02/14') & (qq["日期"] != '2018/02/12') ]   ### 2/14 非旺宏交易日

### 用上面手動的方式 確定 我的資料都是 同一週的星期1 跟 3
### 接著 我把星期一跟星期三 的漲跌相乘
### 那乘出來為 1 的就是 週一週三 同漲同跌的次數了

same=np.zeros( int(len(qqq)/2)  )
for i in range( int(len(qqq)/2)  ):
    same[i]= qqq[ qqq['星期']==1 ]['漲跌'].iloc[i]   *   qqq[ qqq['星期']==3 ]['漲跌'].iloc[i]
    

sum(same==1)/len(same)


最後下的結語吧~~ 
這次的分析結果 就是說 週一和週三同漲同跌的 比例是 56%
只比一半再多一點...
就算這個比例是固定的話 小白也不敢拿去操作...
不過實際這次分析中 可以微調的參數還是很多的
例如:
漲跌的定義可改成 漲跌超過 1% 才算  
漲跌的定義也可以改成 這個交易日的收盤價 - 上個交易日的收盤價 ( 這次研究是看當日的 )
資料天數增加
兩週兩週之間的相關性
實際交易時的MDD
...等等

另外一方面 星期交易法的研究
當然要拓展到 每個週1~週5 的相關性
就請大家期待 新手小白之後的成果啦~

arrow
arrow

    Markjong001 發表在 痞客邦 留言(0) 人氣()