下單(舊版)
執行交易策略
目前交易系統僅支援 finlab>=0.3.0.dev1
版本。在下單前,請先確認安裝了新版的 Package 喔!
首先,在下一個交易日開盤前,執行策略:
計算股票張數
接下來,顯示最近的部位
stock_id | entry_date | exit_date | entry_sig_date | exit_sig_date | position | period | entry_index | exit_index | return | entry_price | exit_price | mae | gmfe | bmfe | mdd | pdays | next_weights |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1416 廣豐 | 2021-10-01 | NaT | 2021-09-30 | 2022-06-30 | 0.510197 | 159.0 | 3566.0 | -1.0 | -3.539823e-02 | 10.60 | NaN | -0.053097 | 0.070796 | 0.070796 | -0.115702 | 37.0 | 0.060665 |
1453 大將 | 2021-10-01 | NaT | 2021-09-30 | 2022-06-30 | 0.510197 | 159.0 | 3566.0 | -1.0 | 2.348165e+00 | 8.43 | NaN | -0.086763 | 2.403782 | 0.245829 | -0.624585 | 60.0 | 0.171264 |
1524 耿鼎 | 2022-04-01 | NaT | 2022-03-31 | 2022-06-30 | 0.611632 | 39.0 | 3686.0 | -1.0 | -3.330669e-16 | 10.60 | NaN | -0.476658 | 0.015152 | 0.000000 | -0.476658 | 2.0 | 0.122168 |
2543 皇昌 | 2021-10-01 | NaT | 2021-09-30 | NaT | 0.510197 | 159.0 | 3566.0 | -1.0 | 1.073232e-01 | 7.46 | NaN | -0.063131 | 0.363636 | 0.008838 | -0.268519 | 44.0 | 0.070298 |
2701 萬企 | 2022-04-01 | NaT | 2022-03-31 | 2022-06-30 | 0.611632 | 39.0 | 3686.0 | -1.0 | -3.330669e-16 | 12.05 | NaN | -0.025105 | 0.029289 | 0.029289 | -0.052846 | 18.0 | 0.063107 |
假如確認沒問題,可以計算每檔股票投資的張數:
from finlab.online.order_executor import Position
# total fund
fund = 1000000
position = Position.from_report(report, fund)
print(position)
上述 Position
代表您的帳戶中,只希望有一張 2330
台積電股票,並且是現貨。
進階部位調整
零股交易
欲使用零股部位,只要將上述程式碼做以下修改即可:
# 整股
position = Position.from_report(report, fund)
# 零股
position = Position.from_report(report, fund, odd_lot=True)
客製化部位張數
上述方法使用 Position.from_report
來建構部位,其實我們也可以單純用很直覺的方式建構想要再平衡的部位:
[{'stock_id': '2330', 'quantity': 1, 'order_condition': <OrderCondition.CASH: 1>}
{'stock_id': '1101', 'quantity': 1.001, 'order_condition': <OrderCondition.CASH: 1>}]
部位增減調整
Position
是可以相加減的,我們可以用以下方法調整部位大小
# 減一張 2330 股票
new_position = position - Position({'2330': 1})
# 增加一張 1101 股票
new_position = position + Position({'1101': 1})
多策略權重加總
假如我們有多個 position,可以用以下方式加總:
from finlab import backtest
from finlab.online.order_executor import Position
report1 = backtest.sim(...)
report2 = backtest.sim(...)
position1 = Position.from_report(report1, 1000000) # 策略操作金額一百萬
position2 = Position.from_report(report2, 1000000) # 策略操作金額一百萬
total_position = position1 + position2
實際下單
1. 安裝券商 API
目前支援 玉山 Fugle
和 永豐
證券的下單系統,則一使用即可。
2. 連接證券帳戶
目前支援 Fugle
和 永豐
證券的下單系統,可以先將帳號密碼設定成環境變數,只要針對您需要的券商來設定即可,不需要兩個券商同時串接。
選擇您的券商
from finlab.online.fugle_account import FugleAccount
import os
os.environ['FUGLE_CONFIG_PATH'] = '玉山富果交易設定檔(config.ini.example)路徑'
os.environ['FUGLE_MARKET_API_KEY'] = '玉山富果的行情API Token'
os.environ['FUGGLE_ACCOUNT_PASSWORD'] = '玉山富果的帳號密碼'
os.environ['FUGLE_CERT_PASSWORD'] = '玉山富果的憑證密碼'
acc = FugleAccount()
假如使用中下單出現錯誤代碼,可以到富果文件 來查找原因。假如對於 Finlab Package 下單不熟習,建議也可以先按照券商的教學來練習,假如串接成功,則 FinLab Package 的串接也就是如法炮製的設定囉!
-
請先獲取憑證
- Windows 憑證下載方式
- MacOS 憑證下載:目前永豐雖支援 MacOS 下單,但並不支援用 MacOS 獲取憑證,可以先找一台 Windows 作業系統,並且使用上述方法獲取憑證後,再將憑證於 MacOS 來使用。
import os
from finlab.online.sinopac_account import SinopacAccount
os.environ['SHIOAJI_API_KEY'] = '永豐證券API_KEY'
os.environ['SHIOAJI_SECRET_KEY'] = '永豐證券SECRET_KEY'
os.environ['SHIOAJI_CERT_PERSON_ID']= '身份證字號'
os.environ['SHIOAJI_CERT_PATH']= '永豐證券憑證路徑'
os.environ['SHIOAJI_CERT_PASSWORD'] = '永豐證券憑證密碼' # 預設與身份證字號
acc = SinopacAccount()
3. 批次下單
最後利用 OrderExecuter
將當證券帳戶的部位,按照 position
的部位進行調整。
from finlab.online.order_executor import OrderExecutor
# Order Executer
order_executer = OrderExecutor(position , account=acc)
若下單部位含有「 全額交割股」、「處置股」、「警示股」,需先於證券帳戶圈存。參考富果圈存、永豐圈存方式。
根據show_alerting_stocks
顯示結果進行圈存後,即可繼續執行下單。
# 下單檢查(瀏覽模式,不會真的下單)
order_executer.create_orders(view_only=True)
# 執行下單(會真的下單,初次使用建議收市時測試)
# 預設使用最近一筆成交價當成限價
order_executer.create_orders()
# 更新限價(將最後一筆成交價當成新的限價)
order_executer.update_order_price()
# 刪除所有委託單
order_executer.cancel_orders()
查看帳戶部位
不論是永豐還是富果帳戶,都可以用以下方式查找帳戶的部位
可以印出以下結果