TradingBot演算法&
軟工在程式交易上的實踐
Philipz (鄭淳尹)2016-12-21 中山大學財管系
2008 TradingBot2009 Plurk 2010 Twitter 2011 Facebook粉絲頁
2012 部落格
透過即時傳送訊息
日曆紀錄每日交易紀錄
History
2008 TradingBot2009 Plurk 2010 Twitter 2011 Facebook粉絲頁
2012 部落格
透過即時傳送訊息
日曆紀錄每日交易紀錄
History
個人經歷元智大學資工所
臺北榮總資訊工程師
玉山銀行資訊處專員、Acer eDC 維運工程師(CCNA)
2014 COSCUP/iThome Summit 講者
2015 Microsoft Azure 開發者大會 講者
2016 COSCUP Docker 進階工作坊
2016 Microsoft 社群開源營
元智資工專題演講、義守資工 Docker 研習營
逢甲資工 Docker 研習班
翻譯著作歐萊禮《基礎架構即程式碼》譯者
歐萊禮《Docker 錦囊妙計》譯者
碁峰《Docker入門與實戰》、
《Kubernetes使用指南》審譯者
研究領域
Docker, 雲端架構, 大型主機
Java, Matlab, 機器學習
程式交易是什麼?
程式交易的誤解
1. 沒有捷徑
2. 人工替代方案
3. 仍是高風險
4. 環節多
5. 風險承受度不同
6. 主觀,沒有答案
7. 發展自己的交易程式
Why use?好處
1. 紀律 - 恐懼貪婪
2. 省時省力
3. 反應快、準確
壞處
1. 缺乏彈性
2. 影響”因數”多3. Normal Accidents 真實案例
2010 美國閃崩2013 中國光大
Why use?
Very Difficult
充分了解金融商品的本質
正確的投資心態
1. 程式交易當成副業
2. 別想一夕致富
3. 追求穩定獲利
4. 天下沒有白吃的午餐
5. 投資跟投機
審視自身條件
1. 心理建設
2. 程式能力
3. 風險控管
4. 確定金融商品
5. 進出頻率
6. 恆心
程式交易類型
Rule-based 演算法
資訊領域亦稱白箱方法
主流方法,直接因果關係
TS、MC、HTS等等
入門簡單、清楚直觀,適合非資訊領域使用者
ML-based 演算法
全名 Machine Learning 機器學習
資訊領域亦稱黑箱方法,資料分析
高階方法,交易軟體無直接支援,R、Matlab
入門困難、倚賴輸入資料建立模型,資訊背景
Pattern Recognition● OCR● Speech recognition● Face recognition● Trading system
高頻交易演算法
全名 High Frequency Trading
純粹比網路速度和運算速度,建置於交易所旁
造市補貼,法規限制,台灣市場不適合?!
客製化硬體 - ASIC 特殊應用積體電路
Statistics vs Machine Learning
TradingBot 演算法
系統架構
群益API(✱✱✱)
開發流程
利用訊號處理技術
● Input○ Tick only
● DWT○簡單
○快速
○去除雜訊
模式 Pattern?Right man + Right thing +Right moment● 進出頻率● 跨領域方法Ex: OP Open Interest?
模式 Pattern?Right man + Right thing +Right moment● 進出頻率● 跨領域方法Ex: OP Open Interest?
TradingBot - Trend following
TradingBot - Trend reversal
TradingBot - Overweight
Why Day Trading?● 以一天為分割點
● 每天都是獨立,方便切割
● Cross-validation較簡單
● 留倉交易,如何切割回測資料?
● 留倉交易,如何界定是Pattern還是運氣?
● 留倉交易,需參考資料是否更多?
● TradingBot is Day Trading~
Machine Learning - SVM
TradingBot Flowchart
Big Problems1. 盤整及突破的判斷
2. 區域的最高點及最低點
3. 轉折的判斷
4. 出場條件 - 停損停利
5. 加碼問題
6. Patterns or Just Lucky
範例1:加碼問題
2012年回測結果
範例2:選擇權回測
直接拿選擇權價格來回測,倒果為因?
1. 利用期交所每日收盤Tick資料來回測
2. 動態定商品(7500CALL或8000PUT)3. 再以商品及時間點取Tick價格。
4. 一定要有選擇權回測的資料才能確定策略的可用性。
回測程式 - In MemoryWalking Forward記憶體直接存取
多核心平行計算
暴力法能解決的
就不要花腦力去最佳化
資料科學家 vs 資料工程師
兩者差異
科學家:統計、模型、演算法、機器學習
白領、白手、單點
工程師:網頁爬蟲、資料收集、平台、架構
藍領、黑手、全面
Engineer
把数据科学做为一门团队学科
軟體工程在程式交易上的應用
Margaret Hamilton
Software EngineeringTherac-25 事件 - 放射性治療儀器設計缺陷
軟體開發的困難是本質問題,只能漸進式的改善。
軟體開發技術
自動化生產線 - pipeline
軟體專案管理
自動化測試 - Auto Testing
量測指標 - Code Metric -> Trading performance metrics
Top-down Approach
土木建築 - 逆打工法
台北101
GitLab-RunnerGitLab-Runner
Development Flow
GitLab-Runner
持續整合、持續交付
方法論之一,漸進式的持續不斷改善。CI(Continuous Integration)CD(Continuous Delivery)
雲端交易回測系統容器化技术构建一个“反脆弱”的交易系统
自動化已是主流
軟體工程
既是工程,也是藝術
程式交易是
沒有一步登天的
交易領域的物理嫉妒
感謝您的聆聽