動手寫一隻AI交易機器人

Wen Chang
12 min readNov 11, 2019

--

哈囉大家好,我是菜鳥救星- python量化投資團隊的尹文老師,為了讓我們的課程內容方便進行,以及讓來不及報名直撥課程的同學仍有機會可以練習,今天我們就在這裡手把手和大家一起開始寫個基於監督式學習LSTM的基礎AI交易機器人吧。詳細的課程內容影片在這 1 2

無論您是從未做過投資的學生、上班族甚至是有多年投資經驗的老鳥,相信您都有聽過量化、程式交易,其實這些並不是需要什麼高度專業或大型機構才適合步入的領域,您只要使用個人電腦、手機、甚至到雲端平台申請免費帳號使用虛擬機器就可以進行

只要您有接觸過投資,應該多少了解兩個主流的商品價格原理,基本分析與技術分析。而把技術分析的資料從主觀交易中抽離,將各類反映商品相關市場狀況的資料經過程式化的交易策略產生買賣信號,就是所謂的量化交易。

使用程式交易不但能減輕您盯盤的時間及心理負擔,也可有效降低人為決策所帶來的情緒性及交易紀律執行力風險,做到純科學理性的交易操作

而所謂的交易策略則是進行買賣所依循的判斷準則,例如商品連漲三天就進場、連跌三天就退場,甚至晴天就做多,陰雨天就做空,任何方式只要可以形成買賣行為的依據都可以是一種交易策略,聰明的讀者可以發現所謂的交易策略其實就是一種如何進行交易的決策方式

今天時下的AI非常夯,對許多人而言甚至跟神奇的黑科技畫上等號,其實以AI外顯的功能角度來看其行為也是個決策系統,為了讓大家更了解AI以及他的演算法變得很帥氣,立刻報名我們的線上課程,今天我們就手把手帶領大家快速寫出一個基於監督式學習AI模型的交易機器人吧

以下的文章會分成三個部分,程式的基礎、程式交易框架與策略、監督式學習交易決策系統的建置,只要細心耐心跟著做一遍您就成為會寫AI的交易員拉。

一、程式的基礎

Python 是時下相當熱門的程式語言,不但編寫易懂簡潔,容易執行與移植至各類環境,尤其在資料科學與AI的領域其成熟的生態圈更是沒有任何高階語言工具可以相比,如果您是初學者別浪費時間問了學Python謝謝(兇)。

這裡有老師為初學程式的同學所寫的一系列教學文章

Python 基礎介紹— 四大主軸

為了讓同學建構清晰的知識體系,老師分別將理解與操作PYTHON主體功能切分,讓同學在操縱並使用PYTHON上有完整並清楚的認知架構

這四大主軸內容分別是:1.基礎運算、2.執行控制、3.客製邏輯封裝、4.程式外部引用與溝通

單元一 : Python基礎運算 — 運算元與運算子

Python和大多數的高階語言操作方式一樣,分為運算元與運算子,而為了更好的操作運算單元的改變以組成動態邏輯,我們會藉著如同數學使用代數的方式運用變數進行程式設計,基礎的變數操作。

單元二 : Python控制邏輯 — 使用if/else 與迴圈進行控制

Python 以及大多高階語言皆可讓程式設計師使用條件對設計的程式執行邏輯進行控制。在這篇文章讓我們開始學習使用if以及其家族進行執行方向控制,以及使用for與while產生程式執行迴圈。

單元三 : Python邏輯封裝 — 客製程式邏輯封裝

為了讓一段固定的抽象邏輯流程易於處理以及重複利用,我們會使用如同數學建構函數的方式使用函式;而為了讓很多段固定的邏輯流程易於處理以及重複使用、產生其變體,我們會依照如同工業自動化中以模具生產產品的方式,建立程式邏輯的類別(模具)並以其產生邏輯物件實例(產品)。

單元四 : Python外部操作 — 程式外部引用與存取溝通

為了要使用其他的程式庫、副程式以及函式、物件,我們會用import的語法引入自己或別人寫的函式庫或副程式。平時我們也會使用Python原生的IO進行檔案存取,使用SOCKET等制式協定處理行程間通訊,並且透過http request進行網頁或API之間的資料溝通調用。

這樣大家就已經學會簡單的python拉,有沒有很簡單,大家有沒有很有成就感呢!!!!

二、程式交易框架與策略

大家已經一口氣學會簡單又好用的python了(O),第二段文章中我們會教大家如何使用開源的交易框架;開源框架的基礎運行結構多半設計的大同小異:提供客製化的交易策略模組,並且讓策略模組在交易資料中運行進行買賣 — 無論是以歷史的市場資料進行回測模擬交易策略績效,或是以當下市場資料進行真槍實彈的即時買賣,都會使用一樣的框架程式處理資料以其運行交易策略的決策邏輯

這邊以開源框架backtrader框架為例,使用其交易框架物件的主結構如下

如此篇文章開頭所述,量化交易需要使用市場或外部資料作為交易策略的決策判斷依循,因此一個好的交易程式框架至少應該要有三個主要的功能 : 導入處理資料、建立並依資料執行交易策略、有效的觀察策略績效

1.導入資料

使用其內建的函式產生資料的方式是這樣的:

只要透過寫好的框架與函式庫,只要短短的程式碼我們就可以把Yahoo Finance上的任意交易資料匯入供我們運行交易計算使用了!

2.導入策略

2–1.建立交易策略

這裡我們直接繼承框架原生的基礎信號策略物件backtrader.SingalStrategy,並卷寫程式修改此物件之訊號:

我們先以backtrader.ind.SMA函式對資料產生均線sma1(短期), sma2(長期),將其輸入backtrader.ind.CrossOver函式產生Crossover訊號,最後將訊號透過SignalStrategy策略物件原生的signal_add函數將訊號加入策略物件

2–2.匯入策略、資料並執行

再來,我們先透過backtrader.Cerebro函數產生一個運行交易框架主體物件"Cerebro_Object";再來,

  1. 把製作好的交易策略物件透過主物件的Cerebro_Object.addstrategy函數加入主物件。
  2. 並且再透過Cerebro_Object.adddata函數塞入資料
  3. 最後讓框架主物件執行Cerebro_Object.run,就可以讓開始運行交易了

3.調用圖形化函數觀看策略的歷史績效方法如下

Cerebro_Object.plot()

了解以上架構的基礎說明後,我們現在就來建立一個簡單的移動平均線交叉(常稱黃金交叉、死亡交叉)的交易策略

一點都不難吧有沒有很簡單呢!!!

在這裡老師已經先把標的物組合寫成固定模組方便同學直接用來跑策略、繪製圖表。並且老師最後再製作了一個簡單的批次函式,同學只要直接調用函式Function_Batch_MovingAverage,輸入YahooFinance標的物代碼、槓桿倍率、交易開始以及結束日期,就可以此產生各種簡單的均線投資組合回測,並觀察績效是否收斂在相近的組合範圍內了

我們先試著建立一個均線策略並繪出圖表,三行程式碼由上而下分別為

創建出基礎策略物件

進行一個均線組合策略

並且繪製圖表

為了方便一次觀察不同策略,在此調用批次函式一次執行所有功能與範圍投資組合

三、監督式學習決策系統的應用

學會了使用交易框架與建立策略模型,現在我們把普通的均線交易策略換成潮潮的AI吧

在這裡我們使用監督學習的方式,將一段時間的市場資料對相對時間軸較後的商品價格進行模型收斂,訓練一個LSTM模型的類神經網路,以期監督式AI模型對該商品的未來價格產生泛化預測能力(關於AI基礎原理我們將會在課程中一步步帶您深入了解)

我們一開始先用Tensorflow當Keras的驅動基底快速建立出一個LSTM類神經網路模型

再將LSTM model 的prediction功能帶入Backtrader的基礎客製化策略模組backtrader.Strategy,建立出以調用AI模型進行預測未來時間軸價格的AI交易策略

一樣的,將建立的AI交易策略物件透過Cerebro_Object.addstrategy引入Backtrader的主要交易物件模組,這樣我們就完工拉,讓我們一起來看看AI經過監督學習訓練後的交易績效如何,這裡我們一次灌入九年的資料讓AI進行學習。

交易績效(Position)隨著AI的訓練的次數顯著上升

我們看到交易績效與監督式學習LSTM模型的訓練次數呈顯著上升了呢!量化交易有沒有很簡單又好玩呢?

後半部的內容與績效表現與AI基礎原理有很深的關係,如果您有興趣了解更多關於AI交易模型在Over-fitting與Generalization的議題,甚至一窺這時代的關鍵技術 - 強化學習,歡迎加入我們的課程。把握時間快速報名讓我們一起學習帥氣的AI和量化交易吧!

--

--