Friday, January 15, 2021

量化交易筆記(0)--構思

          從2020年年中開始,我幾年沒動的股票又開始交易了起來,那時候面臨一個問題:我跟蹤了很多股票,但往往幾天沒注意到幾隻股票,這幾支股票就發射升空了。那時候在想,有沒有辦法透過Python,每天找出符合一些條件的票?這個想法慢慢推進到現在,陸續遇到一些問題,也找到一些解決方法。隨著慢慢有一些成果出來,也把一路上的想法與遇到的問題和解決方法做個整理記錄。

        一開始的想法只是很單純的在收盤後用python分析網路上有些相關資源或是教學,但這些資源都是分散破碎的,例如教數據接入、自動圖表製作、交易策略、消息推送等等。但這些資源都是對單一主題在說明。

        原始的想法慢慢的成朝一個產品方向推進,從盤中數據接入,盤中追蹤個股分析,到最終分析結果自動推送到line或是wechat這些通訊軟體,以後可能會對接到下單系統。總之就是把一個產品的流程從頭到尾走一遍。不僅把各地蒐集到的教學和大馬整合在一起,也完整做出一個產品。

        計畫是採模組化開發,在定義好欄位後,不同的模塊可以互相對接。核心的股價欄位名稱是參考上圖mplfiance的欄位,日交易的分鐘檔也可以參考這些欄位名稱。  








Monday, January 11, 2021

Python學習筆記:是否該學爬蟲

         今天聊一個可能會讓有些人不高興的論點是否該學爬蟲

         這幾年常常聽到機器學習、人工智慧、大數據,以至於很多沒有接觸過寫程式的朋友連自己要學的目的,或是以及該學哪一個領域這些關鍵問題都還沒弄清,一開口就要說要學python。先不說需要大量數學基礎的人工智慧、機器學習。這篇先來談談比較多人入門接觸的爬蟲。

         先說說我的故事,我一開始接觸爬蟲是工作上有需要爬一些查詢資料,那時候經濟部對於公司查詢沒有任何限制,也沒有圖形認證這類的captcha,excel寫個很簡單的巨集就能抓回幾萬筆的公司資料。我目前頂多用python去get一些公司內部PAAS平台的數據。對於爬蟲這一塊,我早早就放棄了,公司內部自然有專業爬蟲團隊來處理

         先說結論:先認清你產出的價值在哪塊。除非你是專業做這領域的商業應用,否則建議不用學爬蟲了。這樣的結論主要來自兩點:難的你學不會,簡單的有現成的。

         先說說簡單的有現成的這塊。最簡單的爬蟲在Google Sheet或是Excel裡面都有power query,能把網頁中的表格數據導入到Excel。需要點擊、翻頁這類動作或是條件動作爬蟲,則有八爪魚這樣的免費軟體,拖拉點選就完成了。如果你超過每日下載筆數限制、加速爬取或是需要proxy避免被反爬蟲時,你才需要支付費用。


         再說說難的你學不會這塊。爬蟲難的其實是從進網站到日後的維護。這包括一開始查詢前的captcha圖像識別、簡訊認證、查詢中的反偵測技術、被爬網站持續性的網頁調整等等,每一個領域的難度都夠你退卻。除非你真的是專業從事這領域的,請仔細想想你是否值得要學習爬蟲。



?:,


Friday, January 8, 2021

Python量化交易筆記(1)--建設隨時隨地寫Python的環境

         從2020年年中開始,我幾年沒動的股票又開始交易了起來,那時候面臨一個問題:我跟蹤了很多股票,但往往幾天沒注意到幾隻股票,這幾支股票就發射升空了。那時候在想,有沒有辦法透過Python,每天找出符合一些條件的票?這個想法慢慢推進到現在,陸續遇到一些問題,也找到一些解決方法。隨著慢慢有一些成果出來,也把這半年內遇到的問題和解決方法做個整理記錄。

         這其中幾個最大的問題有兩個開發平台的建立消息推送。今天這篇先聊聊開發平台的的建立。

         如果你只在公司內幫公司寫代碼,那麼工作時間、軟硬體條件都不會是問題,這篇其實你也可以跳過了。但如果你自己私人平常有其他開發目標,那麼環境建置就是一個很大的挑戰,也是你遲早必須解決的問題

         寫代碼往往受限於環境,你得在家裡、在公司,用著已經配置好的電腦。不然一台新電腦光配置編寫環境,就夠耗上你好幾個小時了。另外新電腦上面也不會有你之前已寫好的代碼,要引用一些配置或是看看之前自己的代碼是怎麼寫的,都是相當困難的。如果你自己私人也有寫一些代碼。但是你在公司忽然想編輯,理論上也是不太可行的。你也不可能隨時帶著一台性能超強的筆電,電源、重量、大小都夠你累的了。另外有些代碼是需要跑後台或是長時間運算,當你要出門離開或是下班的時候,你就得停下來或是隔一段時間才能修改,對開發時間來說,都是不小的耽擱。

         有沒有可能自己建一個jupyter平台,任何時間任何地點外部任何一台電腦都能連上。這樣一方面能隨時隨地保存、呼叫自己寫的代碼 ,也不用去解決環境設置的問題這篇整理了這幾個月我遇到的情況和幾個解決方案,這幾個解決方案在成本、算力、建置複雜性上,都有顯著的差異

  • AWS

         AWS是Amazon提供的雲端服務。你可以在網路上找到相當多AWS架設Jupyter的教學,他是所有解決方案中,少數幾個提供免費的解決方案,Colab雖然也免費,但整體環境沒有AWS完整。

         如果你平常是在linux上開發,那麼你對aws的環境會相當熟悉。


         AWS的缺點也很明顯,就是貴!!免費版本EC2跑得比我的筆電還慢,如果不是商業用途,交錢真的會花到心在淌血。我發現EC2另一個問題是service會忽然被關掉,就算我只是幾分鐘沒用就被踢掉了,可能是我沒交錢,可能是設置問題,我沒去探討原因,畢竟那不重要了。因此我在嘗試一個禮拜的AWS後,我就放棄AWS了。

  • NAS Docker
         如果你自己有NAS,不妨可以可以在裝個Jupyter的Docker。NAS的好處,除了可以利用平常沒在運轉的NAS之外,最大的好處是NAS的DDNS可以讓你實現內網穿透。當你的主機使用內部網域的虛擬ip架設Jupyter時,便可以從外部訪問你的主機。
         原本我以為可以在我家裡的NAS上架設Jupyter時,我發現一個最致命的問題:我的NAS是DS216 play,是不支援Docker的。網路上有一些關於在DS216 Play安裝Docker的教學。一方面我覺得太複雜了,二方面這麼低階又這麼老的NAS耗了這麼大的力氣,跑起來也會很糟。因為我又放棄了。

  • 內網穿透
         我目前使用的解決方案是內網穿透,家裡的電腦啟動Jupyter後,開啟內網穿透應用程式就完成了。由於外網端口和域名都可以自定義,因此也很容易記憶。以下面這個例子來說,外面任何一台電腦或是手機,連上 http://jupyter.nat123.fun:7777  就能連回家裡的jupyter,環境是和在家使用jupyter完全相同的

         我買兩年送一年1M的方案大概是NTD700左右,除了安裝簡單之外在成本、效能、方便性、安全性、穩定性、彈性上都算是非常超值的 。
         談完了開發環境的架設,接下來的問題是當你主機持續在運行中輸出的結果,能隨時隨地通知到你。下一篇再來談談如何將python輸出的消息推送到你的手機。