Go

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/v3

Kiến trúc Client

SDK sử dụng kiến trúc module với 4 client chuyên biệt:

ClientMô tảYêu cầu
AuthXác thực & quản lý tokenConfig
DataDữ liệu thị trường (OHLC, chỉ số, chứng khoán)Auth (không cần OTP)
TradingGiao dịch + danh mục + tài khoảnAuth (cần OTP)
StreamStreaming realtime qua WebSocketAuth (cần OTP)

Luồng khởi tạo:

Config → Auth → Authenticate(otp) → Data / Trading / Stream

Auth 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:

ClientServiceTruy cậpMô tả
AuthTokenManagerauth.TokenManagerXác thực, OTP, làm mới token
DataMarketDataServicedata.MarketDataOHLC, chỉ số, chứng khoán, master data, sự kiện quyền
TradingTradingServicet.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)
TradingAccountServicet.AccountThông tin tài khoản
TradingPortfolioServicet.PortfolioSố dư, vị thế, sổ lệnh, PPMMR
StreamStreamingServices.StreamingSubscribe/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ợpClientXác thực
Dữ liệu thị trường (OHLC, chỉ số, chứng khoán)DataKhông cần OTP
Đặt/sửa/huỷ lệnh, tài khoản, danh mụcTradingCần OTP
Streaming WebSocket realtimeStreamCần OTP
Gửi lệnh / truy vấn qua WebSockettradingws.TradingWSCầ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.

Trên trang này