# 交易相關

# Q1:模擬交易相關

A:

# 概述

模擬交易是在真實的市場環境中,用虛擬資金做交易,不會對您的真實帳戶的資產造成影響。

# 交易時間

模擬交易僅支持在常規交易時段交易,不支持在非交易時段、美股盤前盤後時段、A股港股盤前盤後競價時段交易。詳情可點擊 模擬交易規則

# 支持品類

OpenAPI 支持模擬交易的品類請參考 這裏

# 訂單

  1. 訂單類型:限價單和市價單。
  2. 修改訂單操作類型:模擬交易不支持使生效、使失效、刪除,僅支持支持修改訂單、 取消訂單。
  3. 成交:模擬交易不支持成交相關操作,包括 查詢今日成交查詢歷史成交響應成交推送回調
  4. 有效期限:模擬交易有效期限僅支持當日有效。
  5. 賣空:期權和期貨支持賣空。股票僅美股支持賣空。

# 操作平台

  1. 手機版:我的 — 模擬交易

sim-page

  1. 桌面版:左側模擬 tab

sim-page

  1. 網頁版:模擬交易界面

  2. OpenAPI:在調用接口時,設置參數交易環境為模擬環境即可。詳見 如何使用 OpenAPI 進行模擬交易

提示

  • 以上四種方式只是操作平台不同,四種方式操作的模擬帳戶是共通的。

# 如何使用 OpenAPI 進行模擬交易?

# 創建連接

先根據交易品種 創建相應的連接 。當交易品種是股票或期權時,請使用 OpenSecTradeContext。當交易品種是期貨時,請使用 OpenFutureTradeContext

# 獲取交易業務帳戶列表

使用 獲取交易業務帳戶列表 查看交易帳戶(包括模擬帳戶、真實帳戶)。以 Python 為例:返回欄位交易環境 trd_envSIMULATE,表示模擬帳戶。

  • 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()
1
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] 
1
2
3
4
5
6
7
8
9

提示

  • 模擬交易中,區分股票帳戶和期權帳戶,股票帳戶只能交易股票,期權帳戶只能交易期權;以 Python 為例:返回欄位中模擬帳戶類型 sim_acc_typeSTOCK,表示股票帳戶;為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()
1
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]  
1
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()
1
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
1
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()
1
2
3
4
5
6
7
8
9
  • Output
    trd_env             order_id
0  SIMULATE  4642000476506964749
1
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()
1
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
1
2

# 如何重置模擬帳戶?

目前 OpenAPI 不支持重置模擬帳戶,您可在手機版使用復活卡重置指定模擬帳戶,重置後帳戶資金將恢復至初始值,歷史訂單將會被清空。

# 具體操作

手機版:我的 — 模擬交易 — 我的頭像 — 我的道具 — 復活卡。 sim-page

# 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 的監管限制(此為美國券商受到的監管要求,與交易股票的所屬市場無關。其他國家或地區的券商

的交易帳戶則不受此限制)。若用户在任意連續的5個交易日內,進行日內交易 3 次以上,則會被標記為典型日內交易者(PDT)。
更多詳情,點擊這裏

# 進行日內交易的流程圖

PDT_process

# 我願意被標記為 PDT,且不希望程式交易被打斷,如何關閉“防止被標記為 PDT”?

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

US_para
注意:若您被標記 PDT,當您的帳戶權益小於$25000時,您將無法開倉。

# 如何關閉 DTCall 預警提醒?

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

US_para2
注意:若您開倉訂單的市值大於您的剩餘日內交易購買力,並且在今日平倉當前標的,您將會收到日內交易保證金追繳通知(Day-Trading Call),只能通過存入資金才能解除。

# 如何查看 DTBP 的值?

A:
通過 查詢帳戶資金 接口,可以獲取日內交易相關的返回值,如:剩餘日內交易次數、初始日內交易購買力、剩餘日內交易購買力等。

# Q13:如何跟蹤訂單成交狀態

A: 下單後,可使用以下接口跟蹤訂單成交狀態:

交易環境 接口
真實交易 響應訂單推送回調響應成交推送回調
模擬交易 響應訂單推送回調

注意:對於非 python 語言用户,在使用上述兩個接口之前,需要先進行 訂閲交易推送

# 響應訂單推送回調 的特點:

反饋 整個訂單 的資訊變動。當以下 8 個字段發生變化時,會觸發訂單推送:
訂單狀態訂單價格訂單數量成交數量觸發價格跟蹤類型跟蹤金額/百分比指定價差

因此,當您進行下單、修改訂單,取消訂單、使生效、使失效操作,或者訂單在市場中發生了高級訂單被觸發、有成交變動的情況,都會觸發訂單推送。您只需要調用 響應成交推送回調,即可監聽這些資訊。

# 響應成交推送回調 的特點:

只反饋 單筆成交 的資訊。當以下 1 個字段發生變化時,會觸發訂單推送:
成交狀態

舉例:假設一筆限價單訂單 900 股,分成了 3 次才完全成交,每次成交分別是:200、300、400 股。
example

# 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)
1
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
1
2
3
4
5
  • Example 2
trd_ctx = OpenSecTradeContext(security_firm=SecurityFirm.FUTUSG)
ret, data = trd_ctx.get_acc_list()
print(data)
1
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
1
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)
1
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
1
2
3
4
5
  • Example 2
trd_ctx = OpenSecTradeContext(filter_trdmarket=TrdMarket.NONE)
ret, data = trd_ctx.get_acc_list()
print(data)
1
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
1
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_indexacc_id 參數,會先篩選確認一個唯一的帳戶,對此帳戶實施對應的接口行為。 acc-select

總結

  1. 根據 trd_env 篩選出真實帳戶還是模擬帳戶
  2. 在篩選結果中,優先選擇 acc_id 指定的帳戶
  3. 如果 acc_id 為0,則通過 acc_index選取對應賬號
  4. 報錯場景:指定的 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)
1
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)
1
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)
1
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)
1
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)
1
2
3
4
5
6
7
8
9

# 4. OpenAPI 中的帳戶如何與 APP/桌面版對應

card-app APP 上的帳戶僅顯示卡號後 4 位數字,我們將 get_acc_list 的返回結果打印出來後,有 uni_card_num 列和 card_num 列,分別對應綜合帳戶的卡號,和單幣種帳戶(已廢棄)的卡號。通過卡號後 4 位數就能把 API 中獲取到的賬號與 APP 上對應起來了。