任何投資行為均有其風險,作為一名投資者,應為自己任何投資決策行為承擔所有風險。
本網站當盡力提供正確之資訊,所載資料均來自或本諸我們相信可靠之來源,但對其完整性、即時性和正確性不做任何擔保,如有錯誤或疏漏,本網站所有人及關係人,並不負任何法律責任。
本文非任何形式之投資建議,不保證所提供之資訊可以創造獲利、減少投資損失,亦不會鼓吹任何具體之投資行動。本網站所有人及關係人,對於本網站資訊使用者直接或間接依賴並參考相關資訊後,採取任何投資行為所導致之直接或間接損失,或因此產生之一切責任,均不負任何損害賠償及其他法律上之責任。
說明
在這裡,我們先不急著寫程式,而是來談談「學習財經程式設計」應具備的思維。
本文假設讀者是從未寫過程式,或僅有少量程式經驗的財經從業者或愛好者。若你已具備較深的程式設計背景,可略過此篇。
實例:追蹤特定台股的千張大戶持股變化
我們以一個實際案例說明財經程式設計的基本思維。
假設我們想追蹤某檔台股中千張大戶的持股變化。由於大戶通常掌握較早的公司內部資訊,觀察他們的進出有助於判斷股價可能的走勢。
例如,若大戶明顯減持,可能代表該股票潛藏利空,跟著賣出或許能避開風險;反之,若大戶積極加碼,則可能代表利多訊息提前流出,此時跟進買進通常風險不高。簡單說,就是盡可能與大戶「站在同一邊」。
若想用電腦程式解決這項任務,首先要定期收集千張大戶的持股比率,再觀察該比率的變化方向。這個任務可拆解為兩部分:
- 資料收集:用網路爬蟲(web crawler)取得每週的大戶持股數據。
- 變化判斷:可以人工觀察折線圖(line chart)趨勢,也可以用程式自動分析比率是上升或下降。
值得一提的是,神秘金字塔這個網站已經實作出這樣的圖表網頁,對一般使用者來說已相當方便。但若你需要進一步分析或保留原始數據,仍需自行撰寫爬蟲來取得資料。
先有目標,再學知識
寫程式不再是工程師的專利。即使是一般使用者,也能為了解決財經問題而撰寫小型程式。
因為我們的目標多為簡單任務,其實不需要一開始就深入資料結構、演算法、電腦架構等理論。這些繞遠路的知識很可能還沒學會,熱情就先被磨掉了。
相對地,我們建議採用「目標導向學習法」:先設定明確的任務,再針對該任務補足必要的知識。這樣能在較短時間內取得實用成果。
回到前面的例子,如果我們想追蹤持股變化,最需要掌握的是爬蟲技術與圖表繪製。這兩者的實作語言可以選擇 Python 或 Groovy,只需學會任務所需的部分即可,暫時不必深入底層知識。
先求有,再求好
剛開始寫程式時,不必急著打造「系統級」應用。即使只是單一的命令稿(script),只要能完成任務,就是成功。
等有了基本成品後,再逐步重構(refactor)成模組化、可重用的工具也不遲。
此外,若資料量不大,就不必太執著於效能或最佳化。即使用 Python、Groovy 等速度不快的語言,在實務上也多半足夠。
簡單勝於複雜
圖形介面與網頁程式雖然美觀,但設計起來相對複雜。相比之下,命令列(CLI)程式雖然外觀陽春,但簡單好寫、維護容易。
程式的核心價值在於正確執行邏輯流程,使用者介面只是外殼。並非所有財經應用都需要漂亮的介面,應視任務性質選擇最合適的形式。
善用現成工具:站在巨人的肩膀上
現代程式語言都有豐富的函式庫、模組與套件,能幫助我們快速完成任務,而不必每次都從零開始。
建議選擇有成熟社群與豐富資源的語言,如 Python、Groovy、JavaScript 等,可大幅節省開發時間。
註:雖然 Groovy 原生函式庫較少,但它可無縫使用 Java 生態系的物件庫,實用性依然很高。
模組化:打造自己的工具箱
當你寫多了財經程式後,會發現有不少任務會重複出現,例如抓取歷史股價、統計成交量等。
這時可以將重複部分獨立出來,寫成模組。其他程式只需「呼叫」這些模組即可。這樣一來,維護與擴充也更方便。
隨著模組增加,你便擁有了屬於自己的工具箱(toolkit),未來遇到類似任務,只需串接既有模組,或稍作修改,就能快速完成。