演算法交易入門
紫式晦澀每日一篇文章第30天
前言
-
今天是2022年第28天, 全年第4週, 一月的第四個週五. 今天來入門程式交易, 由於完全沒有經驗, 先以收集專有術語開始. 會講鬼話後, 才可以搞鬼.
-
今天的素材主要來自Python:股票演算法交易實務147個關鍵技巧詳解(第二版) . 感覺是對新手很容易學的材料!
算法交易
- 算法交易(Algorithmic trading):
- 程序化交易,或自動交易,是指運用自動化的電腦程式,或運用人工智慧,根據預設的算法,進行自動化的投資和買賣行為。
- 一般而言,算法交易是指人們開發程式,自動根據指定的市場的技術資料和財務比率(例如市盈率、市帳率、移動平均線)等,自動由電腦操作買賣行為。
- 交易演算法是將主觀交易的想法具體量化, 也就是寫成明確的規則, 並轉爲程式語言。
- 對於一般交易者而言, 往往無法明確提供量化的規則, 而程式撰寫者對於金融交易普遍陌生, 無法進入交易的領域。
- 多數的交易者使用看盤軟體, 授用制式的圖表 與統計後的數據, 對於交易所原始的報價, 往往不知該如何處理。
- 因此交易演算法是結合「金融交易」、「程式撰寫」與「數據分析」三大領域的新興產業, 具有較難進入的門檻。
網路擷取股票數據資源
- 爬蟲(網路擷取):
- 爬蟲能夠讓我們將網站上的資源擷取下來後進行分析, 也就是說, 任何在網際網 路上的資源都可以成為我們程式交易的資料來源。
- 而本書中所介紹到的網路擷取技巧, 將不限於特定的應用, 不一定要做實單交易才用網路擷取, 也可以每天固定時間進行擷取, 並產生分析結果, 作為輔助我們交易判決的工具。
技巧25: 網頁的組成結構(心法)
- 網頁組成結構: 爬蟲會接觸三部分:
- HTML: 網頁的主體
- JavaScript: 定義網頁的動態行為
- CSS: 定義網頁樣式
技巧26: 網頁的標籤介紹(技法)
- HTML網頁例子:
1<html>
2 <head>
3 <title>Hello Jack</title>
4 </head>
5 <body>
6 <h2 class="small">test Header</h2>
7 <p>範例網站 </p>
8 <a id="l1" href="#">第一行</a>
9 <a id="l2" href="#">第二行</a> <p>Hello, <b>您好</b></p>
10
11 <table>
12 <tr><td>234</td><td>567</td><td>890</td></tr>
13 <table>
14 <body>
15<html>
- <標籤名稱(tag)>
<html>
: 最上層的標籤<head>
: 網頁的表頭, 包含許多資訊<body>
: 網站內容<title>
: 網頁標題<meta>
<h2>
: 標題2<a>
:超連結<p>
: 文字段落
- 標籤+屬性–>特定目的
- 標籤+屬性–>特定目的
h2 class
a href
img src
p style
進行歷史數據回測
- 交易策略歷史回測
- 當我們面對不理解的事物, 必須先去了解並在其中找到自己的適應方式, 好比我 們在爬山以前, 必須要做足功課, 先理解登山路徑並做好裝備準備等。
- 而交易市場也是如此, 若我們沒有做足準備, 很有可能讓自己身處在危險的環境之中。
- 在交易前應該要理解市場, 最常見的方法是將想法或策略量化並做歷史回測, 了解 我們的交易方法在歷史中的績效為何。- 本章將討論如何透過既有的歷史數據進行交易策略的回測, 從策略的角度切入市場, 找出自己的交易邏輯。
- 歷史回測以得穩定獲利機會
- 對於交易者而言, 歷史回測通常能幫助我們更快找到穩定獲利的機會。
- 在交易的 過程中, 歷史回測是否必要, 答案為 「是」, 因為透過程式驗證數據, 能查看更多的細節, 這往往無法由主觀交易得知。
- 許多數據一閃即逝, 容易被人忽略, 而 這些情況在計量回測中都能被正確驗證, 本章將會說明建構歷史回測的細節, 讓 大家快速投入計量回測的世界。
技巧62 認識歷史回測 (心法)
- 歷史回測:數學計量模型+市場行為分析:
- 當我們在市場上交易、但對於當前市場的趨勢變動沒有把握時, 就需要歷史回測來驗證自己的想法是否可行
- 歷史回測不僅是數學計量模型的計算, 也包含了計量模型以外的市場行爲分析。
- 以往大家沒有完整的歷史數據時, 若只有網路上散播的統計資訊、盤後資料, 並沒有辦法準確進行歷史回測, 而現在強調大數據的時代, 計量回測已經成爲一門不可或缺的技術了。
- 回測:用歷史資料回朔測試
- 回測」的意思就是使用歷史資料回溯測試。
- 當我們有一個交易的想法時, 首先會將規則明確列出, 並寫爲具體的程式碼, 接著就會拿出歷史資料加以驗證, 了解我們的想法在之前的交易日中具體成效爲何。
- 這時如果擁有夠多的歷史資料, 就能更準確了解可用性, 並在末來的預測中提供更準確的依據。
技巧63 回測流程建構(心法)
- 股票交易:選股+交易策略:
- 選定「交易標的」
- 做「交易策略」歷史回測
- 回測演算法:
- 「回測演算法」是透過歷史資料模擬開盤的情況, 進行資料解讀、計算、制斷, 以 決定是否進場、出場, 並且獲得進出場點的紀錄, 最後進行歷史績效的評估, 這樣的流 程是演算法開發的必要流程。
- 本技巧將會依序闆述建構的流程, 引導讀者去取得歷史資 料, 接著開始歷史回測。
-
歷史資料: 逐筆資料, K線資料:
-
轉換回測指標:
- 「轉換回測指標」是將歷史資料轉換爲量化數據, 讓交易者易於根據這些數據進行交易的制斷, 而每個交易者對於指標的定義都不盡相同, 所以必須明確定義指標後, 才能 進一步設計演算法。
- 股票逐筆報價可以轉換指標, 例如:內外盤、大單, K線可以計算 MA, RSI 等技術指標, 主要是我們需要建構怎樣的策略, 再去思考要如何計算指標。
- 歷史演算法設計: List為逐筆資料; Dictionary 為K線資料:
- 回測演算法所運用的資訊是歷史資料, 所以在編制回測演算法時, 可以依照需求去䫛取需要部分的資訊, 這裡也會依照「逐筆資料」、「K 線資料」而有所不同, 本書中將會針對這兩種資料分別去做回測。
- 逐筆資料會透過 Python 的 List 物件來操作, 而 K 線資料會透過 Python 的 Dictionary 來操作, 以迴圈的方式去進行歷史回測, 本章將會介紹逐筆資料以及 K 線資料的回測撰寫方式。
- 回測演算法也是交易演算法, 依照流程會有趨勢判斷、進場、出場、停損等相關步驟,這部分會在本章接下來的策略技巧中介紹到。
- 歷史回測回傳明細格式設計:
- 回測交易格式的設計是希望完整保存回測交易紀錄, 並且忠實表達交易事件的細節, 最後讓這些紀錄能夠被適度的分析, 讓回測的效益最佳化。
- 爲什麼欄位中沒有盈虧欄位呢 ?
- 因爲若要計算盈㿥, 只會增加撰寫演算法的麻煩度, 且回測所帶來的效盆也不一定是盈虧所產生的數字, 怎麼說呢 ?
- 就好比一支回測程式雖 然一個月的總盈虧是 $-1000$, 但它並不代表就是一支不好的策略, 或許買方的部位淨利是 3000 , 賣方的部位淨利是 $-4000$, 那只要將這支策略設定爲只做買方, 便會是一支賺錢的策略。
- 除了盈虧, 也有很多角度可以分析策略的好壞, 例如 : 交易時間、在倉時間等, 這些對於交易而言也是相當重要的, 在下一個技巧會介紹到。
- 每個欄位都有存在的價值, 第一個欄位的交易序號代表唯一值, 所以每筆資料並不會 發生重複的現象。
- 以上的交易回傳格式不一定符合每種交易類型的需求, 可以依照自己 的需求來更改, 接下來的回測範例程式將會記錄進出場資訊, 讀者可以自行改善及延伸。
- 績效計算工具:
-
取得交易紀錄後, 就可以依照交易回傳的資料去加以計算分析。
-
績效不單可從盈虧去 觀察, 也可以從買賣、交易次數、交易時間點來進行分析。
-
本書提供的績效分析範例雖 然不多, 但主要讓讀者熟悉系統分析指令的用法。
-
某些策略會符合某些時期的赹勢條件, 但不代表那些策略會符合長期市場的走勢, 畢竟交易市場是瞬息萬變的, 若要校調出一個長期穩定獲利的策略, 必須經過長期回測的測試的。
-
而計算績效不一定是從獲利盈餘的數字上來看, 以下提供其他參考績效的方向 讓讀者參考:交易次數勝率, 買賣個別成交結果.
後記
- 這次稍微讀了幾個技巧, 之後根據需求再來找書繼續研究. 天天向上!共勉之!
2022.01.28. 紫蕊 於 西拉法葉, 印第安納, 美國.
評論