前情提要
前陣子在FB粉專發的,【從零開始!10萬塊開局的程式交易實戰週記】 EP4 – 步驟達成全自動買賣!受到大家的廣泛迴響,因此我寫了一篇串接自動交易的完整教學,希望對大家有所幫助!
本篇文章將會帶大家瞭解,如何將寫好的FinLab選股策略上傳至雲端,進行全自動的交易。讓電腦連你在睡覺時,都能幫你交易賺錢,再也不用天天盯盤手動下單了,實現真正所謂的躺著賺XD
免責聲明
FinLab於此文章中所提供的程式碼僅供參考,會隨著套件版本更動、硬體設備之故障、失效或人為上之疏失導致,導致下單狀況不如交易者之預期。使用者在使用此文章之程式碼前,務必自行審慎評估,並自負投資風險及盈虧。如使用FinLab所提供之程式碼致生損失,本公司不負擔任何賠償及法律責任。
流程簡介
FinLab目前支援的券商有永豐和Fugle,此篇將以永豐帳戶作為示範。
設定全自動交易的流程主要分為三個部分:永豐、FinLab、Google Cloud Platform(GCP)。永豐的部份,我們需要申請一個交易帳戶,並簽署有關API下單的同意書後,申請交易憑證並記好檔案存放的位置,以便之後要上傳到GCP。
FinLab部分則只需要把寫好的策略包裝成function的形式即可。
最後一步是部署選股策略在GCP上,這時候我們需要將前面拿到的交易憑證、包裝好的策略函式分別上傳到GCP進行佈署,最後再用Cloud Scheduler設定固定執行策略的時間,就完成所有的設定了!
完整流程圖
名詞解釋
在教學開始前對一些重要名詞做了簡短的解釋,希望讓大家更容易吸收文章內容。
- 交易憑證:一個.pfx結尾的檔案,電子下單時系統會檢查此憑證,必須有正確的憑證才可以下單。
- Google Cloud Platform(GCP):Google的雲端平台,有著一系列由Google提供的雲端運算服務。
- Cloud Storage:雲端的儲存空間。
- Cloud Function:將函式上傳到雲端執行,而不用在本機端執行。
- Cloud Scheduler:配合Cloud Function使用,可設定在固定時間點執行特定的Cloud Function。
接下來我會針對永豐、FinLab、GCP,一步步跟大家說明操作步驟。
永豐
首先是券商方面的設定,全程都不需撰寫程式。如果在過程中遇到問題,記得直接向自己的營業員詢問最快喔!
開永豐/Fugle證券戶
這兩家券商是目前FinLab模組有支援的券商,但因為本文是用永豐的帳戶來示範,如果想要一步一步跟著做的話,建議還是申辦永豐的券商。兩家券商都可以在線上進行開戶,這邊就不多贅述。
簽署API證券下單同意書
開完戶之後,按照營業員指示簽完基本的同意書後,記的要多簽一個API證券下單簽署,才能用API進行下單喔!
申請下單憑證
下載憑證管理小AP ,打開後會看以下到畫面
登入後會有兩種可能的狀況:
- 從未在這台電腦申請過交易憑證
- 系統會跳視窗自動會引導你申請憑證,按照指引一步一步做即可
- 先前在這台電腦申請過交易憑證,但不是最新版的
- 先點選憑證註銷後,再重新申請憑證即可
小提醒
在申請憑證的過程中不要更動檔案路徑,申請完後你的憑證就會儲存在“C:\ekey\551\身分證字號\S”的資料夾中,資料夾中名為Sinopac的檔案就是之後要上傳到GCP的交易憑證。
永豐模擬測試 (2022/09/22 更新)
永豐為配合主管機關,在9/20更新了政策,規定所有用戶必須2022/11/01前完成測試流程,否則將會停止客戶的API委託下單權限。
因此請大家花幾分鐘,按照永豐測試流程PDF完成所有的測試流程,以免被停權喔!(只要做這一次即可)
永豐在PDF中有提供測試程式檔(圖中紅色箭頭處),只要填入在程式檔中填入自己的帳號密碼後,按說明依序執行即可。
有幾點要注意的地方:
- shioaji套件須更新到 0.3.6.dev3
- 只能在 2pm~6pm 之間進行模擬測試
- 確保
02_shioaji_sign_status.ipynb
執行到最後時,執行api.login()
後要看到StockAccount
的signed=True
才算是完成喔!
FinLab
為了符合Cloud Function所規定的形式,接下來要將寫好的選股策略打包成函式,並加入FinLab串接下單的程式碼。
撰寫策略
首先要先有一隻策略佈署,這邊我使用FinLab公開文檔中的股價創新高動能策略作為示範。
from finlab.backtest import sim
from finlab import data
close = data.get("price:收盤價")
position = (close == close.rolling(250).max())
report = sim(position, resample="M", name="創年新高策略")
將策略打包成函式
若要上傳到策略到Clound Funciton,程式碼必須以函式的方式呈現。因此我將程式碼簡單打包如下,若對函式不熟悉的同學可以參考這篇文章!
from finlab.backtest import sim
from finlab import data
def run_strategy(): #將程式碼包裝成function,並回傳report這個物件(下單會用到)
close = data.get("price:收盤價")
position = (close == close.rolling(250).max())
report = sim(position, resample="M", name="創年新高策略",upload=False)
return report
串接FinLab下單模組
FinLab提供的下單模組,讓大家可以用策略回測的report物件來下單,更多的詳情請參考這份官方文檔,裡面有完整的介紹(附程式碼)。
以下是我撰寫的簡短範例code,預設將以10萬資金量來下市價委託單。
from finlab.online.order_executor import Position
from finlab.online.sinopac_account import SinopacAccount
from finlab.online.order_executor import OrderExecutor
import os
def make_order(report,fund=100000): #預設用100,000的資金跑策略,市價下單
os.environ['SHIOAJI_ACCOUNT']= '永豐證券帳號'
os.environ['SHIOAJI_PASSWORD']= '永豐證券密碼'
os.environ['SHIOAJI_CERT_PATH']= '永豐證券憑證路徑'
os.environ['SHIOAJI_CERT_PASSWORD'] = '永豐證券憑證密碼' #預設與身份證同
position = Position.from_report(report, fund)
acc = SinopacAccount()
order_executer = OrderExecutor(position , account=acc)
# 實際下單(會真的下單,初次使用建議收市時測試)
order_executer.create_orders(market_order=True) #用市價單(要注意滑價,可自行修改)
return
總結
這篇文章我們完成了布置到GCP所需的前置作業,包括申請交易憑證、打包策略程式碼、加入下單模組,但目前的程式碼還無法實際應用。
在下篇文章中,我們會將這些東西進行細微的修改,以符合GCP的規定格式,並上傳到GCP以Cloud Function部署,最後用Cloud Scheduler定期呼叫Cloud Function就大功告成了!
今天的分享就到這裡結束了,我是阿榤,下次見,掰!(⁎⁍̴̛ᴗ⁍̴̛⁎)