交易操作
Go SDK 通过 TradeClient 提供全部交易接口。以下为完整可运行示例:
package main
import (
"fmt"
"log"
"github.com/tigerfintech/openapi-sdks/go/client"
"github.com/tigerfintech/openapi-sdks/go/config"
"github.com/tigerfintech/openapi-sdks/go/model"
"github.com/tigerfintech/openapi-sdks/go/trade"
)
func main() {
cfg, err := config.NewClientConfig(
config.WithPropertiesFile("tiger_openapi_config.properties"),
)
if err != nil {
log.Fatal(err)
}
httpClient := client.NewHttpClient(cfg)
tc := trade.NewTradeClient(httpClient, cfg.Account)
// 查询持仓
positions, err := tc.Positions()
if err != nil {
log.Fatal(err)
}
fmt.Println("持仓:", string(positions))
// 构造限价单并预览
order := model.LimitOrder(cfg.Account, "AAPL", "STK", "BUY", 10, 150.0)
preview, err := tc.PreviewOrder(order)
if err != nil {
log.Fatal(err)
}
fmt.Println("预览结果:", string(preview))
// 实际下单
result, err := tc.PlaceOrder(order)
if err != nil {
log.Fatal(err)
}
fmt.Println("下单结果:", string(result))
}合约查询
Contract 查询单个合约
tc.Contract(symbol string, secType string)
说明
查询单个合约的详细信息,包括名称、货币、最小交易单位等。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbol | string | 是 | 合约代码,如 "AAPL"、"00700" |
| secType | string | 是 | 合约类型:STK(股票)/ OPT(期权)/ FUT(期货)/ WAR(权证)/ IOPT(牛熊证) |
返回
json.RawMessage
返回合约详情,包含 symbol、name、currency、exchange、lotSize 等字段。
示例
contract, err := tc.Contract("AAPL", "STK")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(contract))
// 查询港股
hkContract, err := tc.Contract("00700", "STK")Contracts 批量查询合约
tc.Contracts(symbols []string, secType string)
说明
批量查询多个合约信息,减少网络请求次数。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | []string | 是 | 合约代码列表 |
| secType | string | 是 | 合约类型,同 Contract |
返回
json.RawMessage
返回合约信息数组,结构同 Contract。
示例
contracts, err := tc.Contracts([]string{"AAPL", "TSLA", "MSFT"}, "STK")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(contracts))QuoteContract 查询衍生品合约
tc.QuoteContract(symbol string, secType string)
说明
查询期权或期货等衍生品的合约明细,包含行权价、到期日、合约乘数等衍生品特有字段。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbol | string | 是 | 衍生品代码,期权格式:"AAPL 250117C00150000" |
| secType | string | 是 | 合约类型,通常为 OPT 或 FUT |
返回
json.RawMessage
返回衍生品合约信息,包含 strike、expiry、right(PUT/CALL)、multiplier 等字段。
示例
quoteContract, err := tc.QuoteContract("AAPL 250117C00150000", "OPT")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(quoteContract))订单操作
Order 订单结构说明
model.Order 是下单、改单所需的订单对象,关键字段如下:
| 字段 | 类型 | 描述 |
|---|---|---|
| Account | string | 账户 ID |
| Symbol | string | 合约代码 |
| SecType | string | 合约类型:STK / OPT / FUT |
| Action | string | 买卖方向:BUY(买入)/ SELL(卖出) |
| OrderType | string | 订单类型:MKT(市价)/ LMT(限价)/ STP(止损)/ STP_LMT(止损限价)/ TRAIL(追踪止损) |
| TotalQuantity | int64 | 委托数量 |
| LimitPrice | float64 | 限价价格(LMT / STP_LMT 必填) |
| AuxPrice | float64 | 触发价格(STP / STP_LMT / TRAIL 必填) |
| TimeInForce | string | 有效期:DAY(当日)/ GTC(撤单前有效)/ GTD(指定日期前有效) |
| OutsideRth | bool | 是否允许盘前盘后交易(仅美股) |
| Expiry | string | 期权/期货到期日,格式 "YYYYMMDD" |
| Strike | string | 期权行权价 |
| Right | string | 期权类型:CALL / PUT |
便捷构造函数(推荐使用):
// 限价单
order := model.LimitOrder(account, symbol, secType, action string, qty int64, price float64)
// 市价单
order := model.MarketOrder(account, symbol, secType, action string, qty int64)
// 止损单
order := model.StopOrder(account, symbol, secType, action string, qty int64, auxPrice float64)PlaceOrder 下单
tc.PlaceOrder(order model.Order)
说明
提交订单到交易所。下单成功后返回订单 ID,可用于后续查询和操作。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| order | model.Order | 是 | 订单对象,参见上方 Order 结构说明 |
返回
json.RawMessage
返回下单结果,包含 id(订单 ID)、status、symbol 等字段。
示例
// 买入 10 股 AAPL 限价单,价格 $150
order := model.LimitOrder(cfg.Account, "AAPL", "STK", "BUY", 10, 150.0)
result, err := tc.PlaceOrder(order)
if err != nil {
log.Fatal(err)
}
fmt.Println("订单 ID:", string(result))
// 市价卖出
sellOrder := model.MarketOrder(cfg.Account, "AAPL", "STK", "SELL", 10)
result, err = tc.PlaceOrder(sellOrder)
// 盘前/盘后交易
extOrder := model.LimitOrder(cfg.Account, "AAPL", "STK", "BUY", 5, 148.0)
extOrder.OutsideRth = true
extOrder.TimeInForce = "DAY"
result, err = tc.PlaceOrder(extOrder)PreviewOrder 预览订单
tc.PreviewOrder(order model.Order)
说明
在实际下单前预估订单的费用、影响和可行性,不会真正提交到交易所。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| order | model.Order | 是 | 订单对象 |
返回
json.RawMessage
返回预览信息,包含预估佣金、印花税、保证金占用等字段。
示例
order := model.LimitOrder(cfg.Account, "AAPL", "STK", "BUY", 10, 150.0)
preview, err := tc.PreviewOrder(order)
if err != nil {
log.Fatal(err)
}
fmt.Println("预估费用:", string(preview))ModifyOrder 修改订单
tc.ModifyOrder(id int64, order model.Order)
说明
修改已提交但未完全成交的订单,可修改价格、数量等参数。仅支持状态为待成交(pending)的订单。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | int64 | 是 | 要修改的订单 ID |
| order | model.Order | 是 | 包含新参数的订单对象 |
返回
json.RawMessage
返回修改结果。
示例
// 将订单 12345 的限价价格从 150 改为 148
modOrder := model.LimitOrder(cfg.Account, "AAPL", "STK", "BUY", 10, 148.0)
modResult, err := tc.ModifyOrder(12345, modOrder)
if err != nil {
log.Fatal(err)
}
fmt.Println("修改结果:", string(modResult))CancelOrder 取消订单
tc.CancelOrder(id int64)
说明
撤销指定订单。只能撤销状态为待成交(pending)的订单,已成交订单无法撤销。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | int64 | 是 | 要撤销的订单 ID |
返回
json.RawMessage
返回撤单结果。
示例
cancelResult, err := tc.CancelOrder(12345)
if err != nil {
log.Fatal(err)
}
fmt.Println("撤单结果:", string(cancelResult))订单查询
Orders 查询全部订单
tc.Orders()
说明
查询当前账户的全部历史订单,包含各种状态。
参数
无参数。
返回
json.RawMessage
返回订单列表,每条包含 id、symbol、action、status、totalQuantity、filledQuantity、limitPrice、avgFillPrice、createTime 等字段。
示例
orders, err := tc.Orders()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(orders))ActiveOrders 查询待成交订单
tc.ActiveOrders()
说明
查询当前挂单中(未完全成交)的订单列表。
参数
无参数。
返回
json.RawMessage
返回待成交订单列表,结构同 Orders。
示例
activeOrders, err := tc.ActiveOrders()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(activeOrders))InactiveOrders 查询已撤销订单
tc.InactiveOrders()
说明
查询已撤销或已过期的订单列表。
参数
无参数。
返回
json.RawMessage
返回已撤销订单列表,结构同 Orders。
示例
inactiveOrders, err := tc.InactiveOrders()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(inactiveOrders))FilledOrders 查询已成交订单
tc.FilledOrders()
说明
查询所有已完全成交的订单列表。
参数
无参数。
返回
json.RawMessage
返回已成交订单列表,每条包含 avgFillPrice、filledQuantity、commission 等成交信息。
示例
filledOrders, err := tc.FilledOrders()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(filledOrders))持仓与资产
Positions 查询持仓
tc.Positions()
说明
查询当前账户的所有持仓信息,包括股票、期权、期货等各类合约。
参数
无参数。
返回
json.RawMessage
返回持仓列表,每条包含 symbol、quantity、averageCost、marketValue、unrealizedPnl、realizedPnl 等字段。
示例
positions, err := tc.Positions()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(positions))Assets 查询资产
tc.Assets()
说明
查询账户的资产概览,包括账户净值、现金余额、保证金使用情况等。
参数
无参数。
返回
json.RawMessage
返回资产信息,包含 netLiquidation(账户净值)、cashBalance、buyingPower、grossPositionValue、unrealizedPnl、realizedPnl 等字段。
示例
assets, err := tc.Assets()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(assets))PrimeAssets 查询综合账户资产
tc.PrimeAssets()
说明
查询综合账户(Prime 账户)的资产信息,包含各子账户的汇总数据。
参数
无参数。
返回
json.RawMessage
返回综合账户资产信息,结构同 Assets,并含有子账户明细。
示例
primeAssets, err := tc.PrimeAssets()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(primeAssets))OrderTransactions 查询成交明细
tc.OrderTransactions(id int64)
说明
查询指定订单的逐笔成交明细,一个订单可能分多笔成交。
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| id | int64 | 是 | 订单 ID |
返回
json.RawMessage
返回成交明细列表,每条包含 filledQuantity、filledPrice、commission、filledTime 等字段。
示例
transactions, err := tc.OrderTransactions(12345)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(transactions))通用方法
当 SDK 尚未封装某个 API 时,可通过 ExecuteRaw 直接调用底层接口:
package main
import (
"fmt"
"log"
"github.com/tigerfintech/openapi-sdks/go/client"
"github.com/tigerfintech/openapi-sdks/go/config"
)
func main() {
cfg, err := config.NewClientConfig(
config.WithPropertiesFile("tiger_openapi_config.properties"),
)
if err != nil {
log.Fatal(err)
}
httpClient := client.NewHttpClient(cfg)
// 直接传入 API 方法名和 JSON 参数
resp, err := httpClient.ExecuteRaw("market_state", `{"market":"US"}`)
if err != nil {
log.Fatal(err)
}
fmt.Println("原始响应:", resp)
}Updated 8 days ago
