最後預測結果,是滿糟糕的,哈哈。
因為如果是好的話,我就不需要在這邊打心得拉~
------------------------------------------------------------------------------------------------------------
這系列練習中,會分享下列幾項東西:
1. 介紹期貨是什麼
2. 台灣指數中幾個基礎 features 的代表意義
3. 如何用 Post 爬取資料
4. 用 Pickle 作資料存取
5. 演算法的假設
6. 用 Scikit 來實現演算法並學習模型
7. 預測
8. 心得與討論
系列文章如下:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(一)- 期貨介紹
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(二)- 爬蟲
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(三)- 資料整理
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(四)- 特徵選擇
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(五)- 資料處理
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(六)- TRAINING
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(七)- 回測與討論
------------------------------------------------------------------------------------------------------------
正文開始。
目標:預測台股期貨指數
使用方法及語言:機器學習 Python 2.7
------------------------------------------------------------------------------------------------------------
Step 1 : 建立背景知識
期貨的英文叫做 Future Product,顧名思義就是未來的貨品。
期貨原本的目的呢,是讓農夫們有一個避險的管道,為什麼這樣說呢?
假如我是種大米的農夫,四月跟七月播種,收割在六月跟十月。
我四月播種時,預期六月賣價是每公斤 10 元,結果碰巧這季大家都豐收,
供過於需,價格下跌到每公斤 1 元,那我是不是虧慘?
又假設,我七月又播種時,菜市場大媽預期十月賣價是每公斤 10 元,結果颱風來,
收成超差,大米供不應求,十月時,價格上漲到每公斤 20 元,那菜市場大媽是不是虧慘?
在這種外在因素下,大家都希望可以平平安安地賺錢,開開心心地消費,
所以就有了期貨這種東西。
如果我是農夫,我在四月播種時,就跟菜市場大媽簽好一張合約,
「今年六月我(農夫)用每公斤 10 元賣你(大媽)大米」
那這樣雙方都可以得到未來價格的保證,在控制現金開銷上就可以更加妥善。
這時四月份要賣給菜市場大媽的六月收割的大米,就叫做期貨了。
因為大米在六月之前就在賣,但其實還沒有收成,所以就像是 未來的商品 一樣。
但其實現實中呢,農夫(避險者)都在認真種田,是沒空玩期貨的(小玩)。
所以在期貨市場中交易的人,有很大一群投機者,就是你們...
投機者根本沒有大米可以賣,也不想要買那麼多大米,所以就只是拿著合約要轉手賺錢。
那怎麼賺錢呢?
這邊要複雜一點,所以假設你是不想買大米的投機者甲,簽了一張合約,
你已經預期到今年會有大梅雨,收成會很差,大米價格會上漲,
但是大家都不知道,所以六月的預期價格還是 10 元,
你就趕快買了一個「今年六月我(投機者甲)用每公斤 10 元買你(農夫)大米」的合約,
等到六月,果然價格上漲到 20 元,那你就可以拿這張合約去跟農夫用 10 元買大米,
再在市場上,用 20 元轉賣,你就可以淨賺 10 元!
這就是所謂的,先買後賣(先簽定未來要買,未來到了再把買到的東西賣出)。
除了投機者甲外,也會有投機者乙在市場上喊說,
「今年六月我(投機者乙)用每公斤 10 元賣你(大媽)大米」
投機者乙簽訂這個賣出的合約後,碰巧到了六月,大米價格大跌到 1 元,
這時投機者乙趕快在市場上找農夫用 1 元買大米,然後再用 10 元賣給大媽。
就可以淨賺 9 元!
這就是所謂的,先賣後買(先簽訂未來要賣,未來到了再買回實物並賣出)。
聽完投機者的故事後,我們就知道期貨可以分成下列兩種,
先簽訂未來用一定價格買的合約(先買),未來到了再履行合約並賣出實物(後賣)。
先簽訂未來用一定價格賣的合約(先賣),未來到了再買回實物並履行合約(後買)。
但其實呢,在期貨市場中,是很少銀貨兩訖的,也很少把合約拿到交割日,
因為大家都只想轉手合約快點把把價差錢拿回來,根本不想拿實體物,哈哈。
(意思就是,通常都是投機者跟投機者在互相玩合約。)
現在,試著想一下這個情況,如果有辦法想通,就算知道期貨是什麼了。
四月你簽了一只合約「今年六月我用 10 價格跟你買大米」,
假設在六月一號交割日時,大米價格是 12。
那在這紙合約中,你賺賠多少?
答:賺兩塊。
這是一個先買後賣的合約,在交割日,我只需要拿著合約用 10 價格買大米,
再用 12 價格在市場上賣出,就可以了。
12 - 10 = 2。恩
附張表格好了,假設情形相同,交割日大米價格都是 12。(反白有答案)
「今年六月我用 10 價格跟你買大米」 | |
先買後賣還是先賣後買? | 答案:先買後賣 |
賺賠多少錢? | 答案:2 |
如何交割? | 交割日用 10 價格買大米再用 12 價格轉賣 |
「今年六月我用 10 價格賣你大米」 | |
先買後賣還是先賣後買? | 答案:先賣後買 |
賺賠多少錢? | 答案: -2 |
如何交割? | 交割日用 12 價格買大米再用 10 價格賣 |
上面都不懂也沒關係,只要看懂下面這兩句就可以,
當你有一個先買後賣的時候(看多),期貨價格上漲,你就賺,下跌,你就虧。
當你有一個先賣後買的時候(看空),期貨價格上漲,你就虧,下跌,你就賺。
------------------------------------------------------------------------------------------------------------
Step 2 : 瞭解台灣指數中幾個 features 的代表意義
瞭解完期貨後,就要看看期貨這個東西到底有什麼衍伸,還有台灣指數是什麼。
上一小節中講到的期貨是以大米為例子,但其實市場上流通的期貨各式各樣,
有各種作物,如大米、小麥;各種金屬,如黃金、白金。
但是在台灣流通的期貨呢,都是以指數為主,那指數是什麼呢?
指數就是對特定群組的股票的指標數字,
讓我們可以看一個數字就知道這群股票的表現狀況。
計算指數的方法有很多種,我就不詳細介紹。
在台灣加權指數中,我們的交易策略通常是,
做多(指數上漲你就賺)和做空(指數下跌你就賺)。
這次主要是要看小型台灣指數近月,讓我們看一下在台灣期貨交易所上提供的資訊。
稍微解釋一下,
201609 我們稱近 1,代表是要在 9 月的第三個禮拜三交割(現在是八月)。
201610 我們稱近 2,代表是要在 10 月的第三個禮拜三交割。
其他類推。以下皆以近 1 為例,
最後最佳買價是代表,收盤前市場上還有人喊出願意用 9080 價格購買指數。
賣價則代表,有人願意用 9082 價格販賣指數。
意思代表什麼?
這個願意用 9080 價格購買指數的人,如果讓他找到合約的交易對手。
結果明天指數漲到 9100,那就代表,他可以用 9080 去買指數再用 9100 把指數賣出去,
賺 20 點這樣(先買後賣)。
未沖銷契約量則是市場上還存在的空單以及多單的量。
大概解釋到這,接下來我們可以把這些資料都抓下來了 :)
------------------------------------------------------------------------------------------------------------
Step 3 : 用爬蟲爬資料
在爬資料的時候,第一步都是去看看要爬資料的網頁的 html 格式,
在目標網頁 台灣期貨交易所-期貨每日交易行情 點選右鍵並按下 Inspect Element,
應該會出現類似下圖的東西(我是用 Safari)
我們會看到右邊的網頁原始碼,我們可以知道,到底我們要抓的資料在哪個元件裡面,
再使用 python request 去跟網頁互動並抓下程式碼。
建議大家看到這邊,先去學一下 html 的語法,不會太久,一小時可以搞定。
Codecademy Html Class
不用學到 CSS 除非對前端設計有興趣 :)
這一集先到這邊,做個切割,下一集再實作爬蟲和資料整理。
------------------------------------------------------------------------------------------------------------
Reference
[1] 期貨 wikipedia
[2] 股票指數 wikipedia
[3] 台灣期貨交易所, http://www.taifex.com.tw/
[5] A beautiful soup, https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[6] Pickle, https://docs.python.org/2/library/pickle.html
[7] Scikit-Learn, http://machine-learning-python.kspax.io
[8] Scikit-Learn, http://scikit-learn.org/stable/
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(二)
[8] Scikit-Learn, http://scikit-learn.org/stable/
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(二)
沒有留言:
張貼留言