Tổng quan
Tổng quan về SSI FastConnect Go SDK — REST API và WebSocket streaming
Go SDK cho nền tảng giao dịch chứng khoán SSI. Hỗ trợ REST API và WebSocket streaming.
Yêu cầu: Go 1.22+
Phiên bản: 3.3.2 (ssisdk.Version)
Mã nguồn: github.com/SSI-Securities-Inc/ssi-sdk-go
Cài đặt
go get github.com/SSI-Securities-Inc/ssi-sdk-go/v3Kiến trúc Client
SDK sử dụng kiến trúc module với 4 client chuyên biệt:
| Client | Mô tả | Yêu cầu |
|---|---|---|
Auth | Xác thực & quản lý token | Config |
Data | Dữ liệu thị trường (OHLC, chỉ số, chứng khoán) | Auth (không cần OTP) |
Trading | Giao dịch + danh mục + tài khoản | Auth (cần OTP) |
Stream | Streaming realtime qua WebSocket | Auth (cần OTP) |
Luồng khởi tạo:
Config → Auth → Authenticate(otp) → Data / Trading / StreamAuth là client gốc — quản lý REST client và token. Data, Trading, và Stream đều nhận *Auth làm tham số và dùng chung HTTP connection.
Service của mỗi client:
| Client | Service | Truy cập | Mô tả |
|---|---|---|---|
Auth | TokenManager | auth.TokenManager | Xác thực, OTP, làm mới token |
Data | MarketDataService | data.MarketData | OHLC, chỉ số, chứng khoán, master data, sự kiện quyền |
Trading | TradingService | t.Trading | Đặt/sửa/huỷ lệnh, đặt/huỷ lệnh theo lô (batch), sức mua/bán, lệnh điều kiện (FCO) |
Trading | AccountService | t.Account | Thông tin tài khoản |
Trading | PortfolioService | t.Portfolio | Số dư, vị thế, sổ lệnh, PPMMR |
Stream | StreamingService | s.Streaming | Subscribe/unsubscribe dữ liệu realtime (mã, chỉ số, cờ phiên) và sự kiện lệnh |
Ngoài 4 client trên, package tradingws có client Trading WebSocket để gửi lệnh và truy vấn qua WebSocket. Package này nằm ngoài các facade, xem Trading WebSocket.
Các ví dụ trong tài liệu dùng giá trị giữ chỗ (
YOUR_...) và đọc OTP từ biến môi trường. Đừng ghi cứng OTP, khóa hay số tài khoản vào mã nguồn.
Bắt đầu nhanh
Chỉ lấy dữ liệu thị trường (không cần OTP)
package main
import (
"fmt"
"log"
"github.com/SSI-Securities-Inc/ssi-sdk-go/v3/ssi"
)
func main() {
config := ssi.NewConfig("YOUR_CLIENT_ID")
config.APIKey = "YOUR_API_KEY"
config.APISecret = "YOUR_API_SECRET"
auth := ssi.NewAuth(config)
defer auth.Close()
if _, err := auth.Authenticate(""); err != nil {
log.Fatal(err)
}
data := ssi.NewData(auth)
ohlc, err := data.MarketData.GetOHLC1Minute("SSI")
if err != nil {
log.Fatal(err)
}
fmt.Println(ohlc)
}Giao dịch (cần OTP)
package main
import (
"fmt"
"log"
"os"
"github.com/SSI-Securities-Inc/ssi-sdk-go/v3/ssi"
"github.com/SSI-Securities-Inc/ssi-sdk-go/v3/trading"
)
func main() {
config := ssi.NewConfig("YOUR_CLIENT_ID")
config.APIKey = "YOUR_API_KEY"
config.APISecret = "YOUR_API_SECRET"
config.PrivateKey = "YOUR_PRIVATE_KEY"
auth := ssi.NewAuth(config)
defer auth.Close()
if _, err := auth.Authenticate(os.Getenv("SSI_OTP")); err != nil { // YOUR_OTP
log.Fatal(err)
}
t := ssi.NewTrading(auth)
accounts, err := t.Account.GetAccountInfo()
if err != nil {
log.Fatal(err)
}
fmt.Println(accounts)
// Đây là lệnh thật: chỉ chạy trên môi trường và tài khoản bạn được phép giao dịch.
result, err := t.Trading.PlaceLimitOrder("YOUR_ACCOUNT_NO", "SSI", trading.OrderSideBuy, 100, 66000)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
}Streaming realtime (cần OTP)
package main
import (
"fmt"
"log"
"os"
"github.com/SSI-Securities-Inc/ssi-sdk-go/v3/ssi"
"github.com/SSI-Securities-Inc/ssi-sdk-go/v3/stream"
)
func main() {
config := ssi.NewConfig("YOUR_CLIENT_ID")
config.APIKey = "YOUR_API_KEY"
config.APISecret = "YOUR_API_SECRET"
config.PrivateKey = "YOUR_PRIVATE_KEY"
auth := ssi.NewAuth(config)
defer auth.Close()
if _, err := auth.Authenticate(os.Getenv("SSI_OTP")); err != nil { // YOUR_OTP
log.Fatal(err)
}
s := ssi.NewStream(auth)
defer s.Disconnect()
s.Streaming.SetOnData(func(msg interface{}) {
switch m := msg.(type) {
case *stream.TradeMessage:
fmt.Printf("[TRADE] %s | %.0f | %d\n", m.Symbol, m.Price, m.Quantity)
}
})
if err := s.Connect(); err != nil {
log.Fatal(err)
}
s.Streaming.SubscribeSymbolTrade([]string{"SSI"}, nil)
s.Wait(nil)
}Trường hợp sử dụng
| Trường hợp | Client | Xác thực |
|---|---|---|
| Dữ liệu thị trường (OHLC, chỉ số, chứng khoán) | Data | Không cần OTP |
| Đặt/sửa/huỷ lệnh, tài khoản, danh mục | Trading | Cần OTP |
| Streaming WebSocket realtime | Stream | Cần OTP |
| Gửi lệnh / truy vấn qua WebSocket | tradingws.TradingWS | Cần OTP |
Điều hướng tài liệu
- Cài đặt & Cấu hình: môi trường, packages,
Config. - Client Classes:
Auth,Data,Trading,Stream— khởi tạo và sử dụng. - API Services: chi tiết các method API, gồm đặt/huỷ lệnh theo lô (batch), streaming chỉ số và Trading WebSocket.
- Cấu hình: tham chiếu đầy đủ
Config. - Xử lý lỗi: các loại error và cách xử lý.
- Enums: hằng số như
OrderSide,OrderType,Board, ... - Models: các model dữ liệu và message streaming.