# 交易相關
# Q1:模擬交易相關
A:
# 概述
模擬交易是在真實的市場環境中,用虛擬資金做交易,不會對您的真實帳戶的資產造成影響。
# 交易時間
模擬交易僅支持在常規交易時段交易,不支持在非交易時段、美股盤前盤後時段、A股港股盤前盤後競價時段交易。詳情可點擊 模擬交易規則。
# 支持品類
OpenAPI 支持模擬交易的品類請參考 這裏。
# 訂單
- 訂單類型:限價單和市價單。
- 修改訂單操作類型:模擬交易不支持使生效、使失效、刪除,僅支持支持修改訂單、 取消訂單。
- 成交:模擬交易不支持成交相關操作,包括 查詢今日成交、查詢歷史成交、響應成交推送回調。
- 有效期限:模擬交易有效期限僅支持當日有效。
- 賣空:期權和期貨支持賣空。股票僅美股支持賣空。
# 操作平台
- 手機版:我的 — 模擬交易

- 桌面版:左側模擬 tab

網頁版:模擬交易界面
OpenAPI:在調用接口時,設置參數交易環境為模擬環境即可。詳見 如何使用 OpenAPI 進行模擬交易。
提示
- 以上四種方式只是操作平台不同,四種方式操作的模擬帳戶是共通的。
# 如何使用 OpenAPI 進行模擬交易?
# 創建連接
先根據交易品種 創建相應的連接 。當交易品種是股票或期權時,請使用 OpenSecTradeContext。當交易品種是期貨時,請使用 OpenFutureTradeContext。
# 獲取交易業務帳戶列表
使用 獲取交易業務帳戶列表 查看交易帳戶(包括模擬帳戶、真實帳戶)。以 Python 為例:返回欄位交易環境 trd_env 為 SIMULATE,表示模擬帳戶。
- Example: Stocks and Options
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
#trd_ctx = OpenFutureTradeContext(host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.get_acc_list()
if ret == RET_OK:
print(data)
print(data['acc_id'][0]) # get the first account id
print(data['acc_id'].values.tolist()) # convert to list format
else:
print('get_acc_list error: ', data)
trd_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
acc_id trd_env acc_type card_num security_firm \
0 281756480572583411 REAL MARGIN 1001318721909873 FUTUSECURITIES
1 9053218 SIMULATE CASH N/A N/A
2 9048221 SIMULATE MARGIN N/A N/A
sim_acc_type trdmarket_auth
0 N/A [HK, US, HKCC]
1 STOCK [HK]
2 OPTION [HK]
2
3
4
5
6
7
8
9
提示
- 模擬交易中,區分股票帳戶和期權帳戶,股票帳戶只能交易股票,期權帳戶只能交易期權;以 Python 為例:返回欄位中模擬帳戶類型
sim_acc_type為STOCK,表示股票帳戶;為OPTION,表示期權帳戶。
- Example: Futures
from moomoo import *
#trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
trd_ctx = OpenFutureTradeContext(host='127.0.0.1', port=11111, is_encrypt=None, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.get_acc_list()
if ret == RET_OK:
print(data)
print(data['acc_id'][0]) # get the first account id
print(data['acc_id'].values.tolist()) # convert to list format
else:
print('get_acc_list error: ', data)
trd_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
acc_id trd_env acc_type card_num security_firm sim_acc_type \
0 9497808 SIMULATE MARGIN N/A N/A FUTURES
1 9497809 SIMULATE MARGIN N/A N/A FUTURES
2 9497810 SIMULATE MARGIN N/A N/A FUTURES
3 9497811 SIMULATE MARGIN N/A N/A FUTURES
trdmarket_auth
0 [FUTURES_SIMULATE_HK]
1 [FUTURES_SIMULATE_US]
2 [FUTURES_SIMULATE_SG]
3 [FUTURES_SIMULATE_JP]
2
3
4
5
6
7
8
9
10
11
# 下單
使用 下單接口 時,設置交易環境為模擬環境即可。以 Python 為例:trd_env = TrdEnv.SIMULATE。
- Example
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.place_order(price=510.0, qty=100, code="HK.00700", trd_side=TrdSide.BUY, trd_env=TrdEnv.SIMULATE)
if ret == RET_OK:
print(data)
else:
print('place_order error: ', data)
trd_ctx.close()
2
3
4
5
6
7
8
- Output
code stock_name trd_side order_type order_status order_id qty price create_time updated_time dealt_qty dealt_avg_price last_err_msg remark time_in_force fill_outside_rth
0 HK.00700 騰訊控股 BUY NORMAL SUBMITTING 4642000476506964749 100.0 510.0 2021-10-09 11:34:54 2021-10-09 11:34:54 0.0 0.0 DAY N/A
2
# 取消訂單修改訂單
使用 取消訂單接口 時,設置交易環境為模擬環境即可。以 Python 為例: trd_env = TrdEnv.SIMULATE。
- Example
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
order_id = "4642000476506964749"
ret, data = trd_ctx.modify_order(ModifyOrderOp.CANCEL, order_id, 0, 0, trd_env=TrdEnv.SIMULATE)
if ret == RET_OK:
print(data)
else:
print('modify_order error: ', data)
trd_ctx.close()
2
3
4
5
6
7
8
9
- Output
trd_env order_id
0 SIMULATE 4642000476506964749
2
# 查詢歷史訂單
使用 查詢歷史訂單接口 時,設置交易環境為模擬環境即可。以 Python 為例:trd_env = TrdEnv.SIMULATE。
- Example
from moomoo import *
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK, host='127.0.0.1', port=11111, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.history_order_list_query(trd_env=TrdEnv.SIMULATE)
if ret == RET_OK:
print(data)
else:
print('history_order_list_query error: ', data)
trd_ctx.close()
2
3
4
5
6
7
8
- Output
code stock_name trd_side order_type order_status order_id qty price create_time updated_time dealt_qty dealt_avg_price last_err_msg remark time_in_force fill_outside_rth
0 HK.00700 騰訊控股 BUY ABSOLUTE_LIMIT CANCELLED_ALL 4642000476506964749 100.0 510.0 2021-10-09 11:34:54 2021-10-09 11:37:08 0.0 0.0 DAY N/A
2
# 如何重置模擬帳戶?
目前 OpenAPI 不支持重置模擬帳戶,您可在手機版使用復活卡重置指定模擬帳戶,重置後帳戶資金將恢復至初始值,歷史訂單將會被清空。
# 具體操作
手機版:我的 — 模擬交易 — 我的頭像 — 我的道具 — 復活卡。

# Q2:是否支持 A 股交易?
A: 模擬交易支持 A 股交易。但真實交易僅可通過 A 股通交易部分 A 股,具體詳見 A 股通名單。
# Q3:各市場支持的交易方向
A: 除了期貨,其他股票都只支持傳入 BUY 和 SELL 兩個交易方向。在空倉情況下傳入 SELL,產生的訂單交易方向是賣空。
# Q4:真實交易中,各市場支持的訂單類型
A:
| 市場 | 品種 | 限價單 | 市價單 | 競價限價單 | 競價市價單 | 絕對限價單 | 特別限價單 | 特別限價且要求 全部成交訂單 | 止損市價單 | 止損限價單 | 觸及市價單(止盈) | 觸及限價單(止盈) | 跟蹤止損市價單 | 跟蹤止損限價單 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 香港市場 | 證券類產品(含股票、ETFs、 窩輪、牛熊、界內證) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 期權 | ✓ | X | - | - | - | - | - | X | ✓ | X | ✓ | X | ✓ | |
| 期貨 | ✓ | ✓ | - | ✓ | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| 美國市場 | 證券類產品(含股票、ETFs) | ✓ | ✓ | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 期權 | ✓ | ✓ | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| 期貨 | ✓ | ✓ | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| A 股通市場 | 證券類產品(含股票、ETFs) | ✓ | X | - | - | - | - | - | X | ✓ | X | ✓ | X | ✓ |
| 新加坡市場 | 期貨 | ✓ | ✓ | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 日本市場 | 期貨 | ✓ | ✓ | - | - | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
# Q5:各市場支持的訂單操作
A:
- 港股支持修改訂單、取消訂單、生效、失效、刪除
- 美股僅支持修改訂單和取消訂單
- A 股通僅支持取消訂單
- 期貨支持修改訂單、取消訂單、刪除
# Q6:OpenD 啟動參數 future_trade_api_time_zone 如何使用?
A:由於期貨帳戶支持交易的品種分佈在全球多個交易所,交易所的所屬時區各有不同,因此期貨交易 API 的時間顯示就成為了一個問題。
OpenD 啟動參數中新增了 future_trade_api_time_zone 這一參數,供全球不同地區的期貨交易者靈活指定時區。預設時區為 UTC+8,如果您更習慣美東時間,只需將此參數設定為 UTC-5 即可。
提示
- 此參數僅會對期貨交易接口類對象生效。港股交易、美股交易、A 股通交易接口類對象的時區,仍然按照交易所所在的時區進行顯示。
- 此參數會影響的接口包括:響應訂單推送回調,響應成交推送回調,查詢今日訂單,查詢歷史訂單,查詢當日成交,查詢歷史成交,下單。
# Q7:通過 OpenAPI 下的訂單,能在 APP 上面看到嗎?
A:可以看到。
通過 OpenAPI 成功發出下單指示後,您可以在 APP 的 交易 頁面,查看今日訂單、訂單狀態、成交情況等等,也可以在 消息—訂單消息 中收到成交提醒的通知。
# Q8:哪些品類支持在非交易時段下單?
A:所有的訂單,都需要在開市期間才能夠成交。
OpenAPI 僅對一部分品類,支持了 非交易時段下單 的功能(APP 上支持更多品類的非交易時段下單功能)。具體請參考下表:
| 市場 | 標的類型 | 模擬交易 | 真實交易 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Futu HK | Moomoo US | Moomoo SG | Moomoo AU | Moomoo MY | Moomoo CA | Moomoo JP | |||
| 香港市場 | 股票、ETFs、窩輪、牛熊、界內證 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | X | X |
| 期權 | ✓ | ✓ | X | X | X | X | X | X | |
| 期貨 | ✓ | ✓ | X | X | X | X | X | X | |
| 美國市場 | 股票、ETFs | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 期權 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| 期貨 | ✓ | ✓ | X | ✓ | X | ✓ | X | X | |
| A 股市場 | A 股通股票 | ✓ | ✓ | ✓ | ✓ | X | X | X | X |
| 非 A 股通股票 | ✓ | X | X | X | X | X | X | X | |
| 新加坡市場 | 股票、ETFs、窩輪、REITs、DLCs | X | X | X | X | X | X | X | X |
| 期貨 | ✓ | ✓ | X | ✓ | X | X | X | X | |
| 日本市場 | 股票、ETFs、REITs | X | X | X | X | X | X | X | X |
| 期貨 | ✓ | ✓ | X | X | X | X | X | X | |
| 澳大利亞市場 | 股票、ETFs | X | X | X | X | X | X | X | X |
| 加拿大市場 | 股票 | X | X | X | X | X | X | X | X |
提示
- ✓:支持非交易時段下單
- X:暫不支持非交易時段下單(或暫不支持交易)
# Q9:對於下單接口,各訂單類型對應的必要參數以及券商對單筆訂單的下單限制
A1: 各訂單類型對應的必要參數
| 參數 | 限價單 | 市價單 | 競價限價單 | 競價市價單 | 絕對限價單 | 特別限價單 | 特別限價且要求 全部成交訂單 | 止損市價單 | 止損限價單 | 觸及市價單(止盈) | 觸及限價單(止盈) | 跟蹤止損市價單 | 跟蹤止損限價單 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| price | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| qty | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| code | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| trd_side | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| order_type | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| trd_env | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| aux_price | ✓ | ✓ | ✓ | ✓ | |||||||||
| trail_type | ✓ | ✓ | |||||||||||
| trail_value | ✓ | ✓ | |||||||||||
| trail_spread | ✓ |
Python 用户 注意,place_order 並未對 price 設置預設值,對於上述五類訂單類型,仍需對 price 傳參,price 可以傳入任意值。
A2:各券商對單筆訂單的股數及金額限制
| 券商 | 品類 | 單筆訂單股數上限 | 單筆訂單金額上限 |
|---|---|---|---|
| FUTU HK | A股通 | 1,000,000 股 | ¥5,000,000 |
| 美股 | 500,000 股 | $5,000,000 | |
| 香港股票期貨/期權 | 3,000 手 | 無限制 | |
| moomoo US | 美股 | 500,000 股 | $10,000,000 |
| moomoo SG | 美股 | 500,000 股 | $5,000,000 |
| moomoo AU | 美股 | 無限制 | 無限制 |
# Q10:對於修改訂單接口,修改訂單時,各訂單類型對應的必要參數
A:
| 參數 | 限價單 | 市價單 | 競價限價單 | 競價市價單 | 絕對限價單 | 特別限價單 | 特別限價且要求 全部成交訂單 | 止損市價單 | 止損限價單 | 觸及市價單(止盈) | 觸及限價單(止盈) | 跟蹤止損市價單 | 跟蹤止損限價單 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| modify_order_op | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| order_id | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| price | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| qty | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| trd_env | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| aux_price | ✓ | ✓ | ✓ | ✓ | |||||||||
| trail_type | ✓ | ✓ | |||||||||||
| trail_value | ✓ | ✓ | |||||||||||
| trail_spread | ✓ |
Python 用户 注意,modify_order 並未對 price 設置預設值,對於上述五類訂單類型,仍需對 price 傳參,price 可以傳入任意值。
# Q11:交易接口返回“當前證券業務帳戶尚未同意免責協議”?
A:
點擊下方連結完成協議確認,重啟 OpenD 即可正常使用交易功能。
| 所屬券商 | 協議確認 |
|---|---|
| FUTU HK | 點擊這裏 |
| Moomoo US | 點擊這裏 |
| Moomoo SG | 點擊這裏 |
| Moomoo AU | 點擊這裏 |
| Moomoo CA | 點擊這裏 |
| Moomoo MY | 點擊這裏 |
| Moomoo JP | 點擊這裏 |
# Q12:典型日內交易者(PDT)相關
# 概述
客户使用moomoo證券(美國) 帳戶進行日內交易時,會受到美國 FINRA 的監管限制(此為美國券商受到的監管要求,與交易股票的所屬市場無關。其他國家或地區的券商
更多詳情,點擊這裏
# 進行日內交易的流程圖

# 我願意被標記為 PDT,且不希望程式交易被打斷,如何關閉“防止被標記為 PDT”?
A:
當您在連續的 5 個交易日內,進行第 4 次日內交易時,為了防止您被無意識地標記為 PDT,服務器會對此交易進行攔截。若您主動想被標記為 PDT,並且不希望服務器攔截,可以採取以下措施:
在 命令行 OpenD 中設定參數,將啟動參數 pdt_protection 的值修改為 0,以關閉“防止被標記為日內交易者”的功能。

注意:若您被標記 PDT,當您的帳戶權益小於$25000時,您將無法開倉。
# 如何關閉 DTCall 預警提醒?
A:
您被標記為 PDT 後,需要留意帳戶的日內交易購買力(DTBP),日內交易超出 DTBP 時將收到日內交易保證金追繳(DTCall)。服務器會在您即將開倉下單超出剩餘日內交易購買力前,阻止您的下單。若您仍然希望進行下單,並且不希望服務器攔截,可以採取以下措施:
在 命令行 OpenD 中設定參數,將啟動參數 dtcall_confirmation 的值修改為 0,以關閉“日內交易保證金追繳預警”的功能。

注意:若您開倉訂單的市值大於您的剩餘日內交易購買力,並且在今日平倉當前標的,您將會收到日內交易保證金追繳通知(Day-Trading Call),只能通過存入資金才能解除。
# 如何查看 DTBP 的值?
A:
通過 查詢帳戶資金 接口,可以獲取日內交易相關的返回值,如:剩餘日內交易次數、初始日內交易購買力、剩餘日內交易購買力等。
# Q13:如何跟蹤訂單成交狀態
A: 下單後,可使用以下接口跟蹤訂單成交狀態:
| 交易環境 | 接口 |
|---|---|
| 真實交易 | 響應訂單推送回調,響應成交推送回調 |
| 模擬交易 | 響應訂單推送回調 |
注意:對於非 python 語言用户,在使用上述兩個接口之前,需要先進行 訂閲交易推送
# 響應訂單推送回調 的特點:
反饋 整個訂單 的資訊變動。當以下 8 個字段發生變化時,會觸發訂單推送:
訂單狀態,訂單價格,訂單數量,成交數量,觸發價格,跟蹤類型,跟蹤金額/百分比,指定價差
因此,當您進行下單、修改訂單,取消訂單、使生效、使失效操作,或者訂單在市場中發生了高級訂單被觸發、有成交變動的情況,都會觸發訂單推送。您只需要調用 響應成交推送回調,即可監聽這些資訊。
# 響應成交推送回調 的特點:
只反饋 單筆成交 的資訊。當以下 1 個字段發生變化時,會觸發訂單推送:
成交狀態
舉例:假設一筆限價單訂單 900 股,分成了 3 次才完全成交,每次成交分別是:200、300、400 股。

# Q14:下單接口返回“此產品最小單位為 xxx,請調整至最小單位的整數倍後再提交”?
A:
對於不同市場的標的,交易所有着不同的最小變動單位要求。如果提交的訂單價格不符合要求,訂單將會被拒絕。各市場價位規則如下:
# 價位規則
# 香港市場
以港交所官方説明為準,點擊 這裏。
# A 股市場
股票價位:0.01。
# 美國市場
股票價位:
| 合約價格 | 價位 |
|---|---|
| $1 以下 | $0.0001 |
| $1 以上 | $0.01 |
期權價位:
| 合約價格 | 價位 |
|---|---|
| $0.10 - $3.00 | $0.01 或者 $0.05 |
| $3.00 以上 | $0.05 或者 $0.10 |
期貨價位:不同合約價位規則不同。可以通過 獲取期貨合約資料 接口的返回欄位 最小變動的單位 查看。
# 怎麼避免訂單價格不在價位上?
方法一:通過 獲取實時擺盤 接口,獲取合法的交易價格。交易所擺盤上的價位一定是合法的價位。
方法二:通過 下單 接口的參數
價格微調幅度,將傳入價格自動調整到合法的交易價格上。例如:假設騰訊控股當前市價為 359.600,根據價位規則,對應的最小變動價位為 0.200。
假設您的下單傳入訂單價格為 359.678,價格微調幅度為 0.0015,代表接受 OpenD 對傳入價格自動向上調整到最近的合法價位,且不能超過 0.15%。此情景下,向上最近的合法價格為 359.800,價格實際需要調整的幅度為 0.034%,符合價格微調幅度的要求,因此最終提交的訂單價格為 359.800。
若價格微調幅度設置數值小於實際需要調整的幅度,OpenD 自動調整價位失敗,訂單仍會返回報錯“訂單價格不在價位上”。
# Q15:我的購買力足夠,為什麼下市價單會返回“購買力不足”?
A:
# 為什麼市價單會提示購買力不足
- 出於風控考量,系統給了市價單較高的購買力系數。在所有訂單參數都相同的情況下,選擇市價單會比限價單佔用更多的購買力。
- 而且對於不同的品種,和不同的市場情況,風控系統會對市價單的購買力系數做動態調整。所以在下市價單時,若您通過最大購買力去計算最大可買數量,計算的結果很可能是不準確的。
# 如何計算正確的可買數量
不建議自己計算,您可以通過 查詢最大可買可賣 接口獲取正確的可買數量。
# 如何儘可能買更多
您可以用價格為對價的限價單,替代市價單進行交易。
其中,對價:買1價(下賣單時)或 賣1價(下買單時)
# Q16:API模擬交易下單,為什麼手機版看不到?
A:
手機版、桌面版、網頁版,美股模擬交易帳戶,已經從【美股模擬帳戶】升級成為功能更豐富的【美股融資融券帳戶】。
OpenAPI 暫未升級(規劃中),目前只能使用舊的【美股模擬帳戶】,且舊的【美股模擬帳戶】無法在其他客户端上展示,請謹慎使用。
# Q17:交易接口參數使用説明
# 1. 什麼是交易對象?
您的平台賬號下一般會開設一個保證金綜合帳戶,其中有多個交易子帳戶(正常有兩個,一個綜合證券帳戶,一個綜合期貨帳戶;根據需要還可能有綜合外匯帳戶等其他子帳戶)。一些特殊用户或機構客户可能會在多個券商下開設多個綜合帳戶。
創建交易對象,是初步篩選子帳戶的過程。
- 使用 OpenSecTradeContext 創建的交易對象,調用 get_acc_list 時只會返回證券交易帳戶
- 使用 OpenFutureTradeContext 創建的交易對象,調用 get_acc_list 時只會返回期貨交易帳戶
參數 security_firm 用來篩選對應歸屬券商的帳戶,參數 filter_trdmarket 用來篩選對應交易市場權限的帳戶。
# 1.1 security_firm 券商參數
OpenAPI 目前支持的券商有 這些。
創建的交易對象,在調用 get_acc_list 時,會返回 security_firm 對應券商的真實帳戶和所有模擬交易帳戶(這是因為模擬交易沒有券商的概念,所以無論 security_firm 傳什麼,都會返回所有的模擬帳戶)。
security_firm 的預設值是 FUTUSECURITIES,FUTU HK 券商帳戶可以不填此參數,但需要獲取其他券商的帳戶時,需要修改券商參數。
- Example 1
trd_ctx = OpenSecTradeContext(security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.get_acc_list()
print(data)
2
3
- Output
acc_id trd_env acc_type uni_card_num card_num security_firm sim_acc_type trdmarket_auth acc_status
0 281756478396547854 REAL MARGIN 1001200163530138 1001369091153722 FUTUSECURITIES N/A [HK, US, HKCC, HKFUND, USFUND] ACTIVE
1 3450309 SIMULATE CASH N/A N/A N/A STOCK [HK] ACTIVE
2 3548731 SIMULATE MARGIN N/A N/A N/A OPTION [HK] ACTIVE
3 281756455998014447 REAL MARGIN N/A 1001100320482767 FUTUSECURITIES N/A [HK] DISABLED
2
3
4
5
- Example 2
trd_ctx = OpenSecTradeContext(security_firm=SecurityFirm.FUTUSG)
ret, data = trd_ctx.get_acc_list()
print(data)
2
3
- Output
acc_id trd_env acc_type uni_card_num card_num security_firm sim_acc_type trdmarket_auth acc_status
0 3450309 SIMULATE CASH N/A N/A N/A STOCK [HK] ACTIVE
1 3548731 SIMULATE MARGIN N/A N/A N/A OPTION [HK] ACTIVE
2
3
# 1.2 filter_trdmarket 交易市場參數
OpenAPI 目前支持的交易市場有 這些。
創建的交易對象,在調用 get_acc_list 時,會返回所有擁有 filter_trdmarket 市場交易權限的帳戶;當 filter_trdmarket 入參傳 NONE 時,不過濾市場,返回所有的帳戶。
filter_trdmarket 的預設參數是 HK,在綜合帳戶體系下,這個參數用來篩選不同市場下的模擬交易帳戶。
- Example 1
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.US)
ret, data = trd_ctx.get_acc_list()
print(data)
2
3
- Output
acc_id trd_env acc_type uni_card_num card_num security_firm sim_acc_type trdmarket_auth acc_status
0 281756478396547854 REAL MARGIN 1001200163530138 1001369091153722 FUTUSECURITIES N/A [HK, US, HKCC, HKFUND, USFUND] ACTIVE
1 3450310 SIMULATE MARGIN N/A N/A N/A STOCK [US] ACTIVE
2 3548732 SIMULATE MARGIN N/A N/A N/A OPTION [US] ACTIVE
3 281756460292981743 REAL MARGIN N/A 1001100520714263 FUTUSECURITIES N/A [US] DISABLED
2
3
4
5
- Example 2
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.NONE)
ret, data = trd_ctx.get_acc_list()
print(data)
2
3
- Output
acc_id trd_env acc_type uni_card_num card_num security_firm sim_acc_type trdmarket_auth acc_status
0 281756478396547854 REAL MARGIN 1001200163530138 1001369091153722 FUTUSECURITIES N/A [HK, US, HKCC, HKFUND, USFUND] ACTIVE
1 3450309 SIMULATE CASH N/A N/A N/A STOCK [HK] ACTIVE
2 3450310 SIMULATE MARGIN N/A N/A N/A STOCK [US] ACTIVE
3 3450311 SIMULATE CASH N/A N/A N/A STOCK [CN] ACTIVE
4 3548732 SIMULATE MARGIN N/A N/A N/A OPTION [US] ACTIVE
5 3548731 SIMULATE MARGIN N/A N/A N/A OPTION [HK] ACTIVE
6 281756455998014447 REAL MARGIN N/A 1001100320482767 FUTUSECURITIES N/A [HK] DISABLED
7 281756460292981743 REAL MARGIN N/A 1001100520714263 FUTUSECURITIES N/A [US] DISABLED
8 281756468882916335 REAL MARGIN N/A 1001100610464507 FUTUSECURITIES N/A [HKCC] DISABLED
9 281756507537621999 REAL CASH N/A 1001100910390035 FUTUSECURITIES N/A [HKFUND] DISABLED
10 281756550487294959 REAL CASH N/A 1001101010406844 FUTUSECURITIES N/A [USFUND] DISABLED
2
3
4
5
6
7
8
9
10
11
12
提示
當 filter_trdmarket 入參NONE時,可以返回所有的交易帳戶。其中第0行是真實帳戶,1~5行均為模擬交易帳戶,6~10行是已失效的真實帳戶。這些失效帳戶都是單市場帳戶,現已被綜合帳戶替代。但歷史訂單和歷史成交還在這些已失效的帳戶中,可以通過這些帳戶來查詢。
OpenFutureTradeContext 對象中沒有 filter_trdmarket 參數,只有 security_firm 參數,功能與 OpenSecTradeContext 一樣。
# 2. 交易接口參數
在使用具體的交易接口(如下單、查詢訂單列表)時,接口中的 trd_env, acc_index 和 acc_id 參數,會先篩選確認一個唯一的帳戶,對此帳戶實施對應的接口行為。

總結
- 根據 trd_env 篩選出真實帳戶還是模擬帳戶
- 在篩選結果中,優先選擇 acc_id 指定的帳戶
- 如果 acc_id 為0,則通過 acc_index選取對應賬號
- 報錯場景:指定的 acc_id 不存在,或 acc_index 超出範圍
# 3. 應用舉例
# 3.1 綜合證券帳戶實盤下單
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.NONE, security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.unlock_trade("123123")
if ret == RET_OK:
print("解鎖成功")
ret, data = trd_ctx.place_order(45, 200, 'HK.00700', TrdSide.BUY,
order_type=OrderType.NORMAL,
trd_env=TrdEnv.REAL, # 和預設參數一樣,可以不填
acc_id=0) # 和預設參數一樣,可以不填
print(data)
2
3
4
5
6
7
8
9
# 3.2 綜合期貨帳戶查詢實盤訂單列表
trd_ctx = OpenFutureTradeContext(security_firm=SecurityFirm.FUTUSECURITIES)
ret, data = trd_ctx.order_list_query(trd_env=TrdEnv.REAL, # 和預設參數一樣,可以不填
acc_id=0) # 和預設參數一樣,可以不填
print(data)
2
3
4
5
# 3.3 港股模擬現金帳戶查詢帳戶資金
# filter_trdmarket 填 TrdMarket.HK
# trd_env 填 TrdEnv.SIMULATE
# acc_index 填 0
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.HK)
ret, data = trd_ctx.accinfo_query(trd_env=TrdEnv.SIMULATE, acc_index=0)
print(data)
2
3
4
5
6
# 3.4 美股模擬保證金帳戶下單期權
# 通過 filter_trdmarket 和 trd_env 篩選完之後只剩兩個帳戶
# 第0個是美股現金帳戶(交易股票),第1個是美股保證金帳戶(交易期權)
# acc_index 填 1 指定美股保證金帳戶
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.US)
ret, data = trd_ctx.place_order(10, 1, code="US.AAPL250618P550000",trd_side=TrdSide.BUY,
trd_env=TrdEnv.SIMULATE,
acc_index=1)
print(data)
2
3
4
5
6
7
8
# 3.5 日本期貨模擬帳戶查詢最大可買賣
# 將 get_acc_list 的結果打印出來,可以看到日本期貨模擬帳戶的 acc_id 是 6271199
# 請求最大可買賣接口時傳入這個 acc_id
trd_ctx = OpenFutureTradeContext()
ret, data = trd_ctx.acctradinginfo_query(order_type=OrderType.NORMAL,
price=5000,
trd_env=TrdEnv.SIMULATE,
acc_id=6271199,
code="JP.NK225main")
print(data)
2
3
4
5
6
7
8
9
# 4. OpenAPI 中的帳戶如何與 APP/桌面版對應
APP 上的帳戶僅顯示卡號後 4 位數字,我們將 get_acc_list 的返回結果打印出來後,有 uni_card_num 列和 card_num 列,分別對應綜合帳戶的卡號,和單幣種帳戶(已廢棄)的卡號。通過卡號後 4 位數就能把 API 中獲取到的賬號與 APP 上對應起來了。