交易操作

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)

说明

查询单个合约的详细信息,包括名称、货币、最小交易单位等。

参数

参数名类型是否必填描述
symbolstring合约代码,如 "AAPL""00700"
secTypestring合约类型:STK(股票)/ OPT(期权)/ FUT(期货)/ WAR(权证)/ IOPT(牛熊证)

返回

json.RawMessage

返回合约详情,包含 symbolnamecurrencyexchangelotSize 等字段。

示例

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合约代码列表
secTypestring合约类型,同 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)

说明

查询期权或期货等衍生品的合约明细,包含行权价、到期日、合约乘数等衍生品特有字段。

参数

参数名类型是否必填描述
symbolstring衍生品代码,期权格式:"AAPL 250117C00150000"
secTypestring合约类型,通常为 OPTFUT

返回

json.RawMessage

返回衍生品合约信息,包含 strikeexpiryrightPUT/CALL)、multiplier 等字段。

示例

quoteContract, err := tc.QuoteContract("AAPL  250117C00150000", "OPT")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(quoteContract))

订单操作

Order 订单结构说明

model.Order 是下单、改单所需的订单对象,关键字段如下:

字段类型描述
Accountstring账户 ID
Symbolstring合约代码
SecTypestring合约类型:STK / OPT / FUT
Actionstring买卖方向:BUY(买入)/ SELL(卖出)
OrderTypestring订单类型:MKT(市价)/ LMT(限价)/ STP(止损)/ STP_LMT(止损限价)/ TRAIL(追踪止损)
TotalQuantityint64委托数量
LimitPricefloat64限价价格(LMT / STP_LMT 必填)
AuxPricefloat64触发价格(STP / STP_LMT / TRAIL 必填)
TimeInForcestring有效期:DAY(当日)/ GTC(撤单前有效)/ GTD(指定日期前有效)
OutsideRthbool是否允许盘前盘后交易(仅美股)
Expirystring期权/期货到期日,格式 "YYYYMMDD"
Strikestring期权行权价
Rightstring期权类型: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,可用于后续查询和操作。

参数

参数名类型是否必填描述
ordermodel.Order订单对象,参见上方 Order 结构说明

返回

json.RawMessage

返回下单结果,包含 id(订单 ID)、statussymbol 等字段。

示例

// 买入 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)

说明

在实际下单前预估订单的费用、影响和可行性,不会真正提交到交易所。

参数

参数名类型是否必填描述
ordermodel.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)的订单。

参数

参数名类型是否必填描述
idint64要修改的订单 ID
ordermodel.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)的订单,已成交订单无法撤销。

参数

参数名类型是否必填描述
idint64要撤销的订单 ID

返回

json.RawMessage

返回撤单结果。

示例

cancelResult, err := tc.CancelOrder(12345)
if err != nil {
    log.Fatal(err)
}
fmt.Println("撤单结果:", string(cancelResult))

订单查询

Orders 查询全部订单

tc.Orders()

说明

查询当前账户的全部历史订单,包含各种状态。

参数

无参数。

返回

json.RawMessage

返回订单列表,每条包含 idsymbolactionstatustotalQuantityfilledQuantitylimitPriceavgFillPricecreateTime 等字段。

示例

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

返回已成交订单列表,每条包含 avgFillPricefilledQuantitycommission 等成交信息。

示例

filledOrders, err := tc.FilledOrders()
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(filledOrders))

持仓与资产

Positions 查询持仓

tc.Positions()

说明

查询当前账户的所有持仓信息,包括股票、期权、期货等各类合约。

参数

无参数。

返回

json.RawMessage

返回持仓列表,每条包含 symbolquantityaverageCostmarketValueunrealizedPnlrealizedPnl 等字段。

示例

positions, err := tc.Positions()
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(positions))

Assets 查询资产

tc.Assets()

说明

查询账户的资产概览,包括账户净值、现金余额、保证金使用情况等。

参数

无参数。

返回

json.RawMessage

返回资产信息,包含 netLiquidation(账户净值)、cashBalancebuyingPowergrossPositionValueunrealizedPnlrealizedPnl 等字段。

示例

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)

说明

查询指定订单的逐笔成交明细,一个订单可能分多笔成交。

参数

参数名类型是否必填描述
idint64订单 ID

返回

json.RawMessage

返回成交明细列表,每条包含 filledQuantityfilledPricecommissionfilledTime 等字段。

示例

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)
}