請更新您的瀏覽器

您使用的瀏覽器版本較舊,已不再受支援。建議您更新瀏覽器版本,以獲得最佳使用體驗。

理財

程式交易指南:如何利用 TQuant Lab 策略結合永豐 API 進行自動化下單

TEJ 台灣經濟新報

更新於 2024年12月02日17:47 • 發布於 2024年11月22日05:30
Generated by ChatGPT

前言

在當今的金融世界中,量化金融的模式逐漸成為顯學。高盛的資料顯示:直到 2024 上半年,70% 以上的美股交易皆使用程式執行,可見程式交易的體量之大。反觀台股市場,2024 上半年因為 AI 趨勢興盛,使日均成交量達到 4200 億,不過程式交易的日均成交量卻僅有 28 億,僅占 0.6%

程式交易真的那麼遙不可及嗎?事實上,台股的程式交易份額以年增 20% 的速度逐年上升,本文也將和大家介紹永豐金證券推出的程式交易 API:Shioaji,其使用原生 Python 環境打造的生態系統使程式碼易於撰寫,也使永豐 API 佔有台股程式交易約一半的份額。本文將帶大家透過 TQuant Lab 超級趨勢策略,結合永豐 API 快速掌握程式交易的秘訣,一同成為台股市場中程式交易的先行者吧!

超級趨勢策略簡介

超級趨勢策略以超級趨勢指標以及 ADX 指標構成。超級趨勢指標擁有上軌和下軌,當股價突破上軌,代表價格突破壓力,即將形成上漲趨勢;反之,當股價跌破下軌,代表價格跌破支撐,即將形成下跌趨勢。另一方面,ADX 指標介於 0~100,數值越大代表趨勢越強,幫助我們確立上漲趨勢與下跌趨勢的形成。

超級趨勢策略的進出場規則如下:

  • Long Entry:

  • 收盤價突破上軌,代表價格突破壓力,即將形成上漲趨勢,買入該股票。

  • Short Entry:

  • 收盤價跌破下軌,加上 ADX > 50,代表價格跌破支撐,形成下跌趨勢,將持股賣出。

詳細的策略說明與 TQuant Lab 的回測流程請參考:TQuant Lab 超級趨勢策略,低買高賣賺取波段價差

利用 TQuant Lab 取得每日買賣標的

編輯環境與模組需求

本文使用 Windows 11 並以 Jupyter Lab 作為編輯器。

import os import numpy as np import pandas as pd # tej_key tej_key = 'your key' api_base = 'https://api.tej.com.tw' os.environ['TEJAPI_KEY'] = tej_key os.environ['TEJAPI_BASE'] = api_base

取得股票池

根據超級趨勢指標的特性,我們希望選取具有成長性且容易形成趨勢的股票。股票池篩選流程如下:

  • 使用 get_calendar 函式取得前一個交易日的日期
  • 使用 get_universe 函式取得前一交易日的上市電子工業股票清單
  • 使用 TEJ Tool API 篩選市值前 100 名的股票

p.s. 由於不一定每天都有標的符合超級趨勢策略的買進或賣出規則,因此本文挑選上市電子工業市值前 100 名的股票而非 TQuant Lab 超級趨勢策略中的前 10 名,使這 100 檔股票在撰文當日有標的符合交易規則,方便後續展示永豐 API 的下單功能。使用者可依自身的策略偏好設定股票池大小。

導入股票池價量資料

導入上述 100 檔股票近 3 個月的價量資料以計算超級趨勢指標與 ADX 指標。

from datetime import timedelta start = (last_date - timedelta(days=90)).strftime('%Y-%m-%d') end = last_date.strftime('%Y-%m-%d') os.environ['mdate'] = start + ' ' + end os.environ['ticker'] = ' '.join(tickers) !zipline ingest -b tquant

計算指標數值

有了價量資料,我們就能使用 CustomFactor 函式建構出我們所需的超級趨勢指標以及 ADX 指標,將其導入 Pipeline() 後即可快速計算出指標數值。

Pipeline 部分資訊

選出買賣標的

我們選取上述 Pipeline 資料表中最近一日的資料,並套用超級趨勢策略的進出場條件,即可選出當天的買賣標的,存入 buy_list, sell_list 中。

last_data = run_pipeline(make_pipeline(), last_date, last_date) buy_data = last_data[last_data['close'] > last_data['final_upperband']] buy_list = [] for i in range(len(buy_data)): stock = buy_data.index.get_level_values(1)[i].symbol buy_list.append(stock)

買進標的資料

sell_data = last_data[(last_data['close'] < last_data['final_lowerband']) & (last_data['ADX'] > 50)] sell_list = [] for i in range(len(sell_data)): stock = sell_data.index.get_level_values(1)[i].symbol sell_list.append(stock)

賣出標的資料

永豐 API 程式交易流程

前置作業

使用 pip 即可快速安裝永豐 API:Shioaji 套件。

pip install shioaji

使用永豐 API 之前,除了在永豐金證券開戶之外,也要申請金鑰與憑證,並簽署服務條款,詳細步驟可以參考超連結內的說明文件。

登入永豐 API

本文以永豐 API 的模擬模式撰寫,導入 shioaji 套件並輸入 api_key 及 secret_key,即可登入永豐 API 的環境。

import shioaji as sj api = sj.Shioaji(simulation=True) # 模擬模式 api.login( api_key = 'your api_key', secret_key = 'your secret_key', contracts_cb=lambda security_type: print(f"{repr(security_type)} fetch done.") # 獲取商品檔 Callback )

取得當前持有標的

透過永豐 API 的 list_positions 函式,我們可以看到當前持有的部位資訊,包含:股票代碼、持有數量、平均價格、目前股價、損益等。

p.s. 第一次執行 list_positions 函式時,因為我們尚未持有部位,因此會回傳空的資料表

positions = api.list_positions(api.stock_account) position_data = pd.DataFrame(s.dict for s in positions) position_data

部位資訊示意圖

將部位資訊中的 code 欄位取出,即可獲得當前持有的股票清單 hold_list

if position_data.empty: hold_list = [] else: hold_list = position_data['code'].to_list()

設定委託回報函式

我們設定委託回報函式 order_cb,並將其傳入 set_order_callback,在下單完成後將會回傳委託資訊與成交回報訊息。

def order_cb(stat, msg): print('my_order_callback') print(stat, msg) api.set_order_callback(order_cb)

下單買賣

place_order 為永豐 API 的下單函式,下單時我們須提供商品資訊 contract 及下單資訊 ordercontract 包含股票代碼,order 則包含買進或賣出、價格、張數、限市價單、掛單類型 ( ROD, IOC, FOK )、整股或零股等設定。

本文的買賣條件如下:

  • buy_list 的標的不在 hold_list 中,則用市價單買入一張股票
  • sell_list 的標的在 hold_list 中,則用市價單賣出一張股票

我們以迴圈的方式自動化下單流程,以買進為例:

for i in buy_list: print('processing %s' % i) if i not in hold_list: print('%s not in hold_list' % i) print('Ready to buy!') contract = api.Contracts.Stocks.TSE[i] order = api.Order( action = 'Buy', price = 0, # MKT, MKP will not use price parameter quantity = 1, price_type = 'MKT', # MKT or MKP order_type = 'IOC', # ROD, IOC, FOK order_lot = 'Common', # Common:整股, Fixing:定盤, Odd:盤後零股, IntradayOdd:盤中零股 account = api.stock_account ) trade = api.place_order(contract, order) trade else: print('%s in hold_list' % i) print('=' * 100)

委託資訊
成交回報訊息

查看已實現損益

使用 list_profit_loss 函式,搭配我們欲查詢的日期區間,即可查看股票代碼、價格、數量、損益、損益比、交易日期等已實現損益資訊。

profitloss = api.list_profit_loss(api.stock_account,'2024-10-28','2024-10-28') profitloss_data = pd.DataFrame(pnl.dict for pnl in profitloss) profitloss_data

已實現損益資料表

登出永豐 API

因為永豐 API 有使用流量的限制,因此建議使用完 API 服務後順手登出 API 環境。

api.logout() # True

結論

本文藉由 TQuant Lab 結合永豐 API 選出符合超級趨勢策略的股票標的,並達成自動化下單的目標。我們可以看到程式交易的優點在於只要一開始設定好交易策略與下單環境,日後只要於再平衡日一鍵執行程式碼,就能自動下單標的並追蹤部位損益狀況,大幅減少需要人工確認買賣標的與手動下單的時間成本。

永豐 API 除了本文提及的功能之外,還有提供其他豐富的應用讓使用者探索,有興趣的朋友可以參考 shioaji 的技術手冊,讓我們一起進入程式交易的領域吧!

溫馨提醒,本次策略與標的僅供參考,不代表任何商品或投資上的建議。之後也會介紹使用 TEJ 資料庫來建構各式指標,並回測指標績效,所以歡迎對各種交易回測有興趣的讀者,選購 TQuant Lab 的相關方案,用高品質的資料庫,建構出適合自己的交易策略。

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

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

點我註冊會員,開始試用

GitHub 原始碼

點此前往 github

延伸閱讀

相關連結

查看原始文章

更多理財相關文章

01

ATM新制今上路!8大銀行「宣布新規」 有錢也領不出來

TVBS
02

特斯拉AI晶片選三星非台積?分析師曝關鍵!

NOWnews 今日新聞
03

股市觀察》兩周內決戰!台股要崩了?分析師揭「假利空真洗盤」真相

新頭殼
04

海角36億元拿不回外傳要賣街口電支股票 泰山反應曝光

鏡週刊
05

AI股太貴、非龍頭股不敢買?億級投資人:現在這種產品是好選擇

商周.com
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
查看更多

留言 0

沒有留言。

最新消息

鉅亨買幣速報 - 以太幣(ETH)24小時成交量超過22.6億美元,LTO Network(LTO)24小時漲幅達54.8%

anue鉅亨網

輝達H20晶片重啟對中國出口 傳向台積電追加代工訂單

商傳媒

矽谷最神秘公司 Palantir 現身台灣,自揭市場差異化的關鍵優勢

TechOrange 科技報橘

〈國巨法說〉Q2業外影響每股純益1.03元 上半年仍賺逾2股本

anue鉅亨網

盤後速報 - 大台北(9908)次交易(30)日除息1.2元,參考價30.05元

anue鉅亨網

盤後速報 - 大汽電(8931)次交易(30)日除息2元,參考價50.8元

anue鉅亨網

盤後速報 - 上洋(6728)次交易(30)日除息8元,參考價153.0元

anue鉅亨網

盤後速報 - 伊雲谷(6689)次交易(30)日除息2元,參考價79.1元

anue鉅亨網

盤後速報 - 動力-KY(6591)次交易(30)日除息2.35元,參考價64.75元

anue鉅亨網

盤後速報 - 瑞祺電通(6416)次交易(30)日除息2.9元,參考價84.4元

anue鉅亨網

盤後速報 - 大城地產(6171)次交易(30)日除息2.5元,參考價33.1元

anue鉅亨網

盤後速報 - 久威(6114)次交易(30)日除息0.5元,參考價35.75元

anue鉅亨網

盤後速報 - 中租-KY甲特(5871A)次交易(30)日除息3.8元,參考價98.2元

anue鉅亨網

盤後速報 - 中租-KY(5871)次交易(30)日除權息6.3元,參考價118.04元

anue鉅亨網

盤後速報 - 遠雄港(5607)次交易(30)日除權息1.3元,參考價43.24元

anue鉅亨網

盤後速報 - 宣德(5457)次交易(30)日除息1.3元,參考價42.0元

anue鉅亨網

盤後速報 - 國眾(5410)次交易(30)日除息1.5元,參考價27.25元

anue鉅亨網

盤後速報 - 強信-KY(4560)次交易(30)日除息1.2元,參考價34.0元

anue鉅亨網

盤後速報 - 冠星-KY(4439)次交易(30)日除息2元,參考價90.0元

anue鉅亨網

盤後速報 - 東隆興(4401)次交易(30)日除息0.7元,參考價15.45元

anue鉅亨網

盤後速報 - 世坤(4305)次交易(30)日除息3.2元,參考價45.55元

anue鉅亨網

盤後速報 - 中華食(4205)次交易(30)日除權息3元,參考價86.91元

anue鉅亨網

AI需求助攻,國巨Q2本業獲利站11季高點,Q3營收、雙率向上

財訊快報

盤後速報 - 先益(3531)次交易(30)日除息0.8元,參考價22.75元

anue鉅亨網

盤後速報 - 晶睿(3454)次交易(30)日除息2.3元,參考價104.2元

anue鉅亨網

盤後速報 - 弘憶股(3312)次交易(30)日除息1.4元,參考價45.7元

anue鉅亨網

盤後速報 - 綠意(2596)次交易(30)日除息1元,參考價30.05元

anue鉅亨網

盤後速報 - 皇普(2528)次交易(30)日除權0.5元,參考價27.43元

anue鉅亨網

盤後速報 - 怡利電(2497)次交易(30)日除息2元,參考價39.0元

anue鉅亨網

盤後速報 - 技嘉(2376)次交易(30)日除息10元,參考價272.5元

anue鉅亨網

盤後速報 - 矽統(2363)次交易(30)日除息0.5元,參考價55.1元

anue鉅亨網

盤後速報 - 智邦(2345)次交易(30)日除息11元,參考價841.0元

anue鉅亨網

盤後速報 - 宇隆(2233)次交易(30)日除息7元,參考價172.0元

anue鉅亨網

盤後速報 - 力肯(1570)次交易(30)日除息1.3元,參考價22.6元

anue鉅亨網

盤後速報 - 元山(6275)下週(8月5日)除息2.26元,預估參考價41.39元

anue鉅亨網

盤後速報 - 達麗(6177)下週(8月5日)除權息4元,預估參考價40.24元

anue鉅亨網

盤後速報 - 宜特(3289)下週(8月5日)除息1元,預估參考價121.0元

anue鉅亨網

盤後速報 - 力特(3051)下週(8月5日)除息1.52元,預估參考價23.78元

anue鉅亨網

盤後速報 - 臺企銀(2834)下週(8月5日)除權息0.8元,預估參考價15.14元

anue鉅亨網

盤後速報 - 根基(2546)下週(8月5日)除權息3.8元,預估參考價77.17元

anue鉅亨網