元富證 API 初學者指南:如何利用 TQuant Lab 策略進行自動化下單

元富證 API 初學者指南:如何利用 TQuant Lab 策略進行自動化下單

Photo by Walkator on Unsplash

前言

在現代金融市場中,程式交易逐漸成為投資者提升效率與降低風險的重要工具。也有越來越多的券商開始提供 API 服務,讓投資人能夠自動化下單、快速反應市場變動。本文將介紹如何利用元富證 API 進行自動化下單,並結合 TQuant Lab 的策略,實際操作展示如何透過程式化的方式優化投資決策。透過這套流程,投資者能夠更好地掌握市場機會,提升投資績效。

策略範例

本文以巴菲特企業投資法則為範例,詳細介紹可以參考 TQuant Lab 華倫.巴菲特企業投資法則

範例摘要

此策略使用的量化指標有

  1. 最近年度股東權益報酬率 > 產業平均值
  2. 3 年平均股東權益報酬率 > 15%
  3. 最近年度毛利率 > 產業平均值
  4. 7 年內市值增加值 / 7 年內保留盈餘增加值 > 1
  5. ( 最近年度自由現金流量 / 7 年前自由現金流量 ) – 1 > 1

因為股東權益報酬率可以藉由增加舉債來提升,因此我們排除金融產業這類高槓桿的產業。另外對於每一元的保留盈餘,巴菲特希望企業能創造超過一元的市場價值,由於這牽涉到公司的上市年限是否夠久,因此我們篩選上市時間大於 7 年的公司。

使用 TejToolAPI 抓取所需的財務資料

根據企業投資法則中的選股條件,我們需要的財務科目有以下 7 項:

  1. 主產業別_中文
  2. 常續 ROE
  3. 營業毛利率
  4. 個股市值_元
  5. 保留盈餘
  6. 營運產生現金流量
  7. 投資產生現金流量

其中營運產生現金流量與投資產生現金流量可用以計算自由現金流量。

自由現金流量 = 營運產生現金流量 + (-)投資產生現金流量

而投資產生現金流量多為負數。

p.s.

取出符合 5 項選股條件的標的

我們選擇 2015-12-31 符合條件的股票,每個一條件都會做一個 set ,最後取交集得到符合條件的標的

將符合上述 5 項選股條件的股票取交集即可獲得我們的標的,可以發現以電子零組件業與半導體業為大宗。

符合 5 項選股條件之標的
符合 5 項選股條件之標的

這樣就得到我們利用此策略選出來的股票池,接下來就進入正式的下單環節。

環境設置與套件安裝

驗證流程包含

自動化下單

交易流程範例可以參考 API 文件範本

首先,你需要安裝 MasterTradePy ,能夠幫助你實現自動化交易策略。

要下載 API 檔案可以到元富數位 API 專區

要在終端機先使用 CD 指令切到  MasterTradePy 資料夾

cd MasterTradePy 
pip install MasterTradePy-0.0.15-py3-none-win_amd64.whl

引入套件

回到編譯器內,開啟使用 API 所需要的套件。

import threading

from MasterTradePy.api import MasterTradeAPI

from MasterTradePy.model import *

from MasterTradePy.constant import PriceType, OrderType, TradingSession, Side, TradingUnit, RCode

初始化設定

設定帳號、密碼以及目標股票代碼。

這裡我們將股票代碼設置成一個列表,放入巴菲特策略所選出來的股票池。

username = 'your_username'

password = 'your_password'

stock_id_list = [

    1476, 1477, 2467, 3006, 3014, 3034, 

    3042, 3413, 3533, 3557, 5234, 5269, 

    6202, 8016, 8046, 8081, 9906

]

event = threading.Event() 是用來控制多線程之間的同步,特別是使用 API 進行交易時,確保某些事件(如連接成功)發生後,才讓其他部分的程式繼續執行。

event = threading.Event()

執行訂單

我們以市價買入股票池中的所有股票。

def execute_order(api, stock_id_list):

    account = 'your_account'

    price = ''  # 空白表示市價下單

    qtr = '1000'  # 1張請輸入1000

    orderType = OrderType.ROD

    if not price:

        priceType = PriceType.MKT

    else:

        priceType = PriceType.LMT

    for stock_id in stock_id_list:

        symbol = stock_id

        order = Order(tradingSession=TradingSession.NORMAL,

                      side=Side.Buy,

                      symbol=symbol,

                      priceType=priceType,

                      price=price,

                      tradingUnit=TradingUnit.COMMON, 

                      qty=qty,

                      orderType=orderType,

                      tradingAccount=account,

                      userDef='')

        rcode = api.NewOrder(order)

        if rcode == RCode.OK:

            print(f'已送出委託: {symbol}')

        else:

            print(f'下單失敗! 股票代號: {symbol},請再次執行程式,依據回報資料修正輸入')

自動化下單主程式流程

整個程式的主要流程如下:

  1. 登入交易 API,並進行雙因子認證。
  2. 自動下單買入股票。
def main():

    trader = ConcreteMarketTrader()

    api = MasterTradeAPI(trader)

    api.SetConnectionHost('solace140.masterlink.com.tw:55555')

    # 登入交易主機

    rc = api.Login(username, password, True, True, True)

    if rc == RCode.OK:

        print('交易主機連線成功,進行雙因子認證')

        # 取得帳戶並進行驗證

        accounts = [x[4:] for x in api.accounts]

        rcc = api.CheckAccs(tradingAccounts=accounts)

        if rcc == RCode.OK:

            print('驗證已通過,可執行 API 交易功能')

    execute_order(api, stock_id_list)

    input("Press Enter to finish...\n")

main()

結論

本文透過範例展示了如何利用元富證券的 API 進行自動化下單操作,並結合巴菲特價值投資策略進行實際應用。我們介紹了如何設定交易環境、執行策略以及下單流程,讓投資人能夠藉由程式交易的方式提高交易效率,下一篇會繼續介紹永豐 API 的使用方法以及範例使用,帶各位進入程式交易的領域。

提醒,本文巴菲特選股法則與 API 自動下單程式僅做示範之用,不為獲利保證來源。投資一定有風險,投資策略有賺有賠,使用者參考本文開發投資策略時,建議參酌自已與外部資訊,增加指定每檔股票的下單股數與價格,並嚴格控管風險。

未來,TEJ 也會持續使用 TEJ 資料庫及 TQuant Lab 來建構各式指標,並回測指標績效,所以歡迎對各種交易回測有興趣的讀者,選購 TQuant Lab 的相關方案,用高品質的資料庫,建構出適合自己的交易策略。

【TQuant Lab 回測系統】解決你的量化金融痛點

全方位提供交易回測所需工具

原始程式碼

點此前往 github

延伸閱讀

返回總覽頁
Procesing