2016年10月25日 星期二

F1/10 自走車


機械人圈子的朋友今日在臉書貼上這個影片,吸引了我的眼球。原因是兩年前開始,我已經想打造一台這樣的車。不過價錢一直是個障礙。在 http://f1tenth.org/index 這個網頁有充足的說明指導大家如何建立一台自走車。同時也有部件清單、訂購網調及價錢。希望今晚的萬聖節金多寶六合彩中獎便能如願以償。

2016年10月23日 星期日

Programming for Finance with Python and Quantopian and Zipline


昨天介紹的 Quantopian 是從這條影片中得知。這個清單講解了利用 Python 及 Quantopian 平台進行股票買賣的策略及編程,有興趣的朋友不妨參考一下。

2016年10月22日 星期六

Quantopian


今日在學習 Machine Learning + Finance 時,發現到一個叫 Quantopian 的網站。我被它吸引住了。原因它是免費使用; 它是一個 iPython 的平台,可以在網上編寫程式並執行; 它包含了機器學習所而的程式庫,隨時能夠調用; 它包含股市投資常用的功能,如: SMD,非常容易使用; 它包含了 Python 的 Pandas 繪圖庫,在網頁執行自訂的 Python 程式時,同時能繪畫圖表; 它包含了美國 8000 隻的股票資料,及 670 個魔方,方便實驗自己的買入賣出演算法。

2016年10月21日 星期五

在 macOS Sierra 安裝 TensorFlow

八號風球懸掛,最好在家中繼續進行研究。早幾天在公司的 CentOS 伺服器安裝了 TensorFlow,今日在家中的 MacBook Pro 進行安裝。首先,準備好需要的工具程式:
  • sudo easy_install pip
  • sudo easy_install --upgrade six
     

    下載並安裝 CPU 版的 TensorFlow:
  • export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any.whl
  • sudo pip install --upgrade $TF_BINARY_URL
     

    測試一下 TensorFlow 是否順利安裝:
  • python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'
  • 2016年10月20日 星期四

    天干地支 API


    一直都想把八字及大數據結合一起看看效果。於是用 PHP 編寫了一個能輸入洋曆,輸出天干地支的接口,方便日後不同的應用程式使用。這類的轉換程式寫了幾遍,有 J2ME 的 Java 版、有 iOS 的 Objective-C 版、有網頁的 PHP 版。要自己編寫有一定難度,也要有相關知識,甚至是萬年曆行內的計算公式。例如要計算出節氣的日期及時間、子初換日、立春換年...等才能準確計算出來。現在這個部份已經完成,之後便是利用天干地支的值來訓練機器學習中的決策樹,看看能否找出一點模式,從而估計股票的升跌。

    2016年10月19日 星期三

    利用 TensorFlow 辨認花朵圖片


    這兩天在研究《機器學習》,看了 IBM Watson、百度 Paddle、Google TensorFlow。無意中在 YouTube 找到了七段關於 TensorFlow 的教學。每條影片少於 10 分鐘,但所講的內容非常實用濃縮。由於還未得到 IBM Watson 的試用帳號,而百度 Paddle 在安裝上又遇到阻滯,於是選了 TensorFlow 來優先研究。其中 TensorFlow Playground 很實用,可以即時看到不同層次的學習過程,也可以隨意加減層數及關節數,讓我更容易理解當中發生的事情。


    利用 Inception v3 把 ImageNet 的 Neural Network,重新訓練最後一層的 Bottleneck,花了一小時多才學習完成。準確度達 93%。讓 TensorFlow 能辨認出玫瑰、雛菊、蒲公英、鬱金香、太陽花的照片。訓練完成後,隨意在網上找來兩張相片,兩張都成功被辨認出來。對於今次的監督式學習,TensorFlow 真的很容易使用。

    2016年10月18日 星期二

    股票經理:LINE-Bot


    上周花了點精神去在沒有準備的情況下原價購入 PlayStation VR 而使得《股票經理》的通知部份只完成了八成。今日重拾工作。基上上週編寫了 LINE-Bot 程式,我很想把《股票經理》及其他 Chat-Bot 結合在一起。除了 LINE-Bot 外,我還希望加入 Facebook Messenger Bot 及 Slack-Bot。於是在結構上作出了改動。第一個會被開發出來的將會是 LINE-Bot。希望能在本週內完成。

    2016年10月17日 星期一

    Slack Bot


    既然做開 LINE Bot,那麼也學習一下 Slack Bot。

    Slack Bot 跟 LINE Bot 及 Facebook Messenger Bot 都是用 Webhook 的方法。它的結構比教簡單,同樣是 php://input 輸入,但不是使用 JSON 格式,反而是平常的 Query 內容,即 a=1&b=2&c=3 之類。輸出則是 JSON,內容只有 {"text"=>"Got it!"} 就行。說明文件寫得不夠清楚,介面也沒有足夠的指引,花了很多時間才找到用的是「Outgoing Webhook」而不是「BOT」。

    2016年10月16日 星期日

    PS Move 入手


    中午時分借到 PS4 回來,現在只欠 PS Move。朋友得悉後,立即通知我星期五他在藍田的遊戲店購買到美版 PS Move,還給我聯絡電話。我立即致電查詢。美版 PS Move 沒有紙盒包裝,也沒有手繩附送,價錢為 HK$230 一支。較行版 HK$298 便宜一點。兩支計起來,在我的 HK$500 預算之內。得出 HK$500 預算是因為 Log-on 的 All-in-one 同捆裝比我的版本貴 HK$500,差別就在於兩支 PS Move。知道有貨後立即到藍田購買。既然硬件已齊備,那麼也是時候需要購買一套 VR 遊戲。另一位朋友推介《VR Worlds》,所以我選了它。

    由 PS3 年代起,周邊產品都是要接駁 PlayStation 來充電,其他的 USB 充電器是無法替它們充電。回家後邊玩 PSVR 邊替 PS Move 充電。由於 PSVR 佔用了一個 USB 接口,剩下一個 USB 要充兩支 PS Move 電,於是加上 USB Hub。但其中一支充不到電,不過仍然能繼續遊戲。還以為是鋰電乾塘充不起的緣故。睡覺前,我把 PS4 轉為睡眠模式,拿走 PSVR 的 USB 接線,兩個 USB 接口替兩支 PS Move 充電,兩支都是慢閃,意味著能成功充電。

    2016年10月15日 星期六

    PSVR 的 HDMI 輸入


    昨天拿到 PSVR 後,嘗試過把 MacBook Pro 的 HDMI 輸出接到 PSVR。驚喜地能順利把 MacBook 的畫面投射到 PSVR 中,還有 VR 效果。看出來的畫面就像自己置身大戲院內,而且是包場那種。前方是大大的銀幕,當頭部移動時,銀幕還是會停留在原來那個方向。

    今天我嘗試做差不多的事情。家中沒有支援 3D 效果電視機,但卻有 3D 藍光碟。電視機是三星,遙控很容易壞掉,但還是能看,不至於要換台新。我的 PS3 是有四個 USB 埠,能支援 PS2 那種機,它是支援 3D 藍光碟。要是 PSVR 能播放立體電影,那就完美!連接好所需硬體後,畫面傳來是不支援的畫面。查看說明書,發現 PSVR 是沒有視差效果,所以不能做出立體影像,相信是由於成本及利潤的關係。十分可惜...。

    2016年10月14日 星期五

    PlayStation VR 入手


    一直有留意 PlayStation VR 的動向。昨天首賣,知道公司附近的 Log-on 將會有 All-in-one 同捆裝,很適合我這種甚麼配備也沒有的玩家。心想首賣應該貨源充足,身邊亦沒有很多人期待 PSVR,會很容易買到吧。於是午飯時到 Log-on 一趟,打算購買。一點十五分到達時,沒有人影,心知不妙。看看專櫃的告示,原來已經售罄...。我低估了 PSVR 的受歡迎程度。

    晚上時分,同事會到深水埗,於是託她幫忙看看高登商場有沒有現貨。現貨是有,但那時價錢已經是 +HK$1000~HK$1500。我沒有 PS4,不用著急。打算等下月 PS4 Pro 推出時才跟 PSVR 一起購買。


    朋友在我的面書知道情況,剛巧他是 PSVR 的熱血粉絲,早前已經預訂了數套 PSVR 以備朋友之需。他知道我是用家而不是炒家; 加上我在 Gameone 工作時認識他,他了解到 PSVR 對我開發上有幫助,於是以原價給我一套。機會十分難得。我立即要了,並在今天一起到銅鑼灣的 Sony Store 取貨。


    很多謝那位朋友的鼎力襄助,我才能輕易地拿到一台 PSVR!

    2016年10月13日 星期四

    LINE-BOT


    今天看到關於用 LINE Bot 來監測伺服器狀態的報導,才得悉原來 LINE 在年初已加入 Bot 的行列。於是我也嘗試製作一個示範程式。

    首先,要有一個 LINE 帳號,然後到 https://business.line.me/en/ 登入後的 Accounts 頁登記一個商業帳號。商業帳號可以看成是一個頻道。啟動 Webhook 並輸入帶 SSL 的伺服器程式網址。在 Server IP Whitelist 中輸入伺服器的 IP 地址。


    然後跟據 https://developers.line.me/messaging-api/overview 的通訊格式進行開發。整個結構都很簡單,用 file_get_contents("php://input"); 讀取傳進來的 JSON 內容,解釋,再生成回覆用的 JSON 內容到 https://api.line.me/v2/bot/message/reply 就能成功發送回覆內容。

    2016年10月12日 星期三

    股票經理:預測黃金交差


    把昨天構思好的公式以 PHP 語言寫出來,直接在終端機執行。從畫面輸出可以看到準確率不錯。井號的日子代表預計三天內會出現買入訊號。Intersect 數值代表預計還有多少天會出現買入訊號。Cross 字眼代表真正出現買入訊號的日子。畢竟預測跟發生是兩碼子的事,無可避免會出現像 2016-06-13 的誤判。然而,最終是人腦作守門員,買入與否可因應當時複雜的情況而作出判斷。

    2016年10月11日 星期二

    股票經理:預測黃金交差公式


    要預早幾天找出兩條線的交差時間,我想起初中曾讀過關於斜度及伸延線的數學。突然覺得自己很有記憶力,不過只限往事。近幾天發生的事還是很容易遺忘。

    在網上找點資料加上自行推算,再拿來印證,得出正確的計算方法。首先,我假設一條線是均等向下,另一條線是均等向上,方便計算。在實際情況可以用數天的平均值、也可以帶比重的平均值、甚至直接拿昨天今天的斜度計算。但要留意是用百份比,而不是股價。我的做法是先把兩線在同一天的值相減,如上圖 10 月 3 日的 86 及 26,相減得出 60 作為分子。把上升線的斜度減去下降線的斜度,即是 5-(-7) = 12 作為分母。60/12 = 5 便代表五天後會出現交差,亦即是 10 月 8 日。如圖所見,數字正確。再拿另一天來印證,以 10 月 7 日為例。(66-54)/12 = 1 代表一天後出現交差,亦即是 10 月 8 日。

    2016年10月10日 星期一

    股票經理:索取 2008-2016 數據


    星期六跟伯父午餐時,我向他請教了三件事。我索取了由 2010-01-01 起的恒生指數數據,個人認為六年的數據足夠計算 200 天平均線好幾年,也能充份測試買入賣出策略。為了確認我的思路正確,所以向伯父查詢。他指股市有週期,一個週期約五至八年,所以保留六年數據已經可以。但既然有可能是八年,那我得索取更多的數據。到目前為止只用了 16MB 空間,不是太多。反正索取數據的程式已在,簡單調校到較前的日子便能自動進行補充,何樂而不為。於是今天把數據提前到 2008 年。選這年是因為當年股市非常動盪,應該很有參考價值。

    第二個問題是,在網上搜尋過關於對股票市場應用機器學習的文章,其中一篇指浪費時間,將會徒勞無功。就這個疑問向伯父請教。他指歷史不斷重演,只要捉到週期便能把握掙錢機會。雖然本人覺得利用舊數據去預測未來不會準確,但研究一下無妨。要是能找到突破點,我便能改善家人的生活。

    第三個問題就是如何判定賣出時間。可惜的是他指要賣出自動化,需要看很多數據,編程起來很複雜。

    2016年10月8日 星期六

    股票經理:錯誤的買入法則

    今日約了伯父,向他請教關於賣出的判定。我們找了一家餐廳,詳談了一小時。原來我意會錯了買入的法則,並不是以 50 天及 200 天平均線的交差位作為買入訊號,得修改一下。

    對於目前的「股票經理」版本,伯父希望在買入判定後給出通知,好讓使用者得到提示,從而再作人肉判定是否買入時機。畢竟我寫的程式還有誤判的出現,為了減少觸犯低級錯誤,還是由人去決定,機器只替人類處理繁複沉悶之工作。要開發這個功能的難度在於提升準確率。預測未來的事要準確,背後所花的知識及心血不少。不知道 IBM Watson APIs 能否幫得上忙。不過,我還沒有時間看 Watson,暫時用自己的方式去做判定吧!

    2016年10月2日 星期日

    股票經理:第一次模擬結果


    在把伯父的秘技轉化成代碼的過程中,發現沒有留心聽教,買入的心法牢牢記住了,賣出的卻記得不太清楚。於是向內子詢問,畢竟當天伯父是教她,我只是旁聽。可是她也記得很模糊,很多人為心理因素及個人觀感。除了使用深度學習,正常的編程方法是無法寫得出來。我也只好憑著有限的記憶,自行找出有可能的賣出判定。完成後進行第一次測試。選了十隻股票,全部都由 2010 年 1 月開始等候入市時機,結果是三隻損手離場,其餘的以 HK$10000 資本,用六年時間,平均賺到 HK$1400。未扣除服務費。相比起一個月賺 2% 的目標,還有一段距離。唯有繼續努力,或等下次向伯父請教的機會。

    2016年10月1日 星期六

    股票經理:繪畫線形圖


    數據獲取了,平均值計好了,是時候製作介面。首先是把圖表繪畫出來。我用到 HighCharts 中的 HighStock。

    以前使用 HighCharts 有過自訂款式的經驗可以用在 HighStock 中。稍微修改顏色及線粗。數據方面,一如以往用 Javascript 以 AJAX 方式讀取後再塞進 HighStock。所以同時需要編寫一個提供 JSON 格式的獲得數據接口。整個介面配合 Bootstrap 框架編寫,可以同時支援手機及電腦解像度。這個程式雖然還在設計及開發階段,但我希望可以把它發展成一個 SaaS 產品,所以在構思時會考慮帳號及增值服務的概念。不過,最終還是要算法行得通,自己試過憑它賺到錢才有用。上面的圖表說明 0005.HK 已經處於「買入」狀態。