FinLab x Google雲端平台 | 3步驟實現全自動交易,從今以後躺著都能賺!(上)

  • Post author:
  • Reading time:6 mins read

前情提要

前陣子在FB粉專發的,【從零開始!10萬塊開局的程式交易實戰週記】 EP4 – 3️⃣步驟達成全自動買賣!受到大家的廣泛迴響,因此我寫了一篇串接自動交易的完整教學,希望對大家有所幫助!

本篇文章將會帶大家瞭解,如何將寫好的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進行下單喔!

1 2

申請下單憑證

下載憑證管理小AP ,打開後會看以下到畫面

2 2

登入後會有兩種可能的狀況:

  • 從未在這台電腦申請過交易憑證
    • 系統會跳視窗自動會引導你申請憑證,按照指引一步一步做即可
  • 先前在這台電腦申請過交易憑證,但不是最新版的
    • 先點選憑證註銷後,再重新申請憑證即可

小提醒

在申請憑證的過程中不要更動檔案路徑,申請完後你的憑證就會儲存在“C:\ekey\551\身分證字號\S”的資料夾中,資料夾中名為Sinopac的檔案就是之後要上傳到GCP的交易憑證。

3 2

永豐模擬測試 (2022/09/22 更新)

永豐為配合主管機關,在9/20更新了政策,規定所有用戶必須2022/11/01前完成測試流程,否則將會停止客戶的API委託下單權限。

因此請大家花幾分鐘,按照永豐測試流程PDF完成所有的測試流程,以免被停權喔!(只要做這一次即可)

永豐在PDF中有提供測試程式檔(圖中紅色箭頭處),只要填入在程式檔中填入自己的帳號密碼後,按說明依序執行即可。

image 10
點選紅色箭頭處,即可取得測試用程式檔

有幾點要注意的地方:

  1. shioaji套件須更新到 0.3.6.dev3
  2. 只能在 2pm~6pm 之間進行模擬測試
  3. 確保02_shioaji_sign_status.ipynb 執行到最後時,執行api.login()後要看到StockAccountsigned=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就大功告成了!

今天的分享就到這裡結束了,我是阿榤,下次見,掰!(⁎⁍̴̛ᴗ⁍̴̛⁎)

阿榤

我是阿榤,不務正業的電機仔,一個願意接受幸運的人。 很高興認識大家,請多指教!