iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Cloud Native

AWS AI交易室實戰系列 第 21

Day 21 - 永豐 API 微服務開發環境建置

  • 分享至 

  • xImage
  •  

~ 本機雲端大不同 ~

今天來介紹自動化證券期貨交易的神兵利器 - 永豐證券 Python API - shioaji
官方網址:https://www.sinotrade.com.tw/ec/20191125/Main/index.aspx

開通帳戶 API 權限

首先要先線上開戶,然後到 憑證申請中心 簽署同意書 & 風險預告書 …etc
page 1

簽完後到下圖所示的地方申請 API Key
page 2

進去後選新增 API Key,勾選一些選項後送出後會拿到 API Key & Secret Key ,Secret Key 只會出現一次,要好好自己保存起來,然後我們就可以開始寫程式啦

使用 VSCode 建立 Python 專案

分享一下使用 Apple M1 MacBook 使用永豐 API 的經驗,因為 M1 的 CPU 是 ARM 架構,永豐 API 並沒有提供此平台的 API 可以下載,如果下 pip install shioaji 會提示找不到資源

解法一: 下載 anaconda for x86_64 的版本,用 conda 指令管理 python 版本,設定 python 版本為 x86_64 後建立 virtualenv 或是直接 pip 安裝 shioaji,優點是可以在桌面環境直接開發,缺點是要安裝肥大的 anaconda

解法二:使用 Docker,設定環境變數 export DOCKER_DEFAULT_PLATFORM=linux/amd64 ,讓 Docker 去使用 x86_64 的 Python 開發環境映像檔 ,在裡面 pip install shioaji,優點是只需要有 Docker,缺點是要在 container 裡面開發,速度明顯比較慢

另外需要考慮微服務部署的問題,我們會使用 docker image 的部署方式部署,所以上面的解法二所走的路是一定要走過的也避免不了,那我們就開始走一次解法二吧

前置準備

  • VSCode
  • Docker
$ mkdir marathon-sinotrade && cd marathon-sinotrade
$ code .

總共只需要準備三個檔案:Dockerfile, lambda_function.py, requirements.txt
準備 Dockerfile.dev 內容如下,注意這邊用到的是 shioaji 在 dockerhub 上的 image

FROM sinotrade/shioaji:latest
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python"]

lambda_function.py,我們這裡先放開發測試的程式碼,之後會再加入 handler function

import shioaji as sj

if __name__ == '__main__':
    api = sj.Shioaji(simulation=True)
    accounts =  api.login(<api_key>, <secret_key>)
    print(accounts)

requirements.txt 我們還放了 AWS SDK (boto3) ,還有常見的 web 服務框架 flask

boto3
flask

我們到專案目錄下可以下指令:

$ docker build --platform linux/amd64 --no-cache \
-f Dockerfile.dev \
-t marathon-sinotrade:latest .
$ docker images marathon-sinotrade
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
marathon-sinotrade   latest    9795047767a3   10 hours ago   872MB

可以執行這個 image:

$ docker run -itd marathon-sinotrade:latest

接著我們到 VSCode 裡面,先安裝 Remote Development 這個套件組合,接著左下角會出現 >< 的符號,點下去:
vscode remote development

attach to the container

然後就會有個全新的 VSCode 環境,我們先開啟 /app 這個 folder ,接著安裝 python extension pack:
裝好以後把 lambda_function.py 這個檔案打開,直接按 F5 執行它,應該會出現以下訊息:

... (total connection attempt 1 of 1) | Event: Session up
... person_id=***, broker_id=***, account_id=***, username=***), ...

這樣一來我們就可以在 M1 Macbook 下開發 shioaji api 相關的程式囉!
筆者同時也嘗試了 vscode devcontainer 的 extension 發現一樣對 arm64 的 cpu 支援度不足
當然用上述方式在 container 裡面寫的程式碼也要同步出來才行,理想的使用方式應該是使用資料卷(Volumes)
明天會說明如何部署到 AWS Lambda 上去

參考資料:

https://www.kenmuse.com/blog/forcing-dev-container-to-use-amd64/
https://sinotrade.github.io/
https://code.visualstudio.com/docs/devcontainers/create-dev-container


上一篇
Day 20 - SageMaker 從訓練模型到部署評估
下一篇
Day 22 - 永豐 API 下單微服務開發與部署
系列文
AWS AI交易室實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言