| Lập trình gọi dữ liệu Chứng khoán Việt Nam qua SSI API: Hướng dẫn kết nối và chuẩn hóa Pandas DataFrame thực chiến

Được viết bởi thanhdt vào ngày 30/05/2026 lúc 15:37 | 28 lượt xem

Với sự bùng nổ của giao dịch thuật toán (Algo Trading) tại thị trường Việt Nam, việc tự động hóa lấy dữ liệu giá cổ phiếu từ các công ty chứng khoán hàng đầu trở nên quan trọng hơn bao giờ hết. SSI Securities là một trong những đơn vị tiên phong cung cấp cổng API chính thức kết nối dữ liệu thị trường trực tiếp cho các nhà phát triển hệ thống giao dịch tự động.

Trong bài hướng dẫn thực chiến này, chúng ta sẽ cùng tìm hiểu cách lập trình kết nối, gọi dữ liệu từ SSI API thông qua thư viện ssi_fc_data, và sử dụng Pandas để biến đổi, chuẩn hóa dữ liệu thô thành cấu trúc chuẩn phục vụ việc thiết lập Bot Auto Trading.


🎨 Sơ đồ tổng quan luồng thu thập và xử lý dữ liệu của Bot


1. Cấu hình môi trường và kết nối Client SSI

Để gọi dữ liệu, bạn cần có tài khoản API được cấp bởi SSI và một file cấu hình bảo mật configDataSSI.py lưu trữ khóa API (API Key) và khóa bí mật (Secret Key).

Đầu tiên, chúng ta import các module cần thiết và khởi tạo đối tượng MarketDataClient:

# Import các module cốt lõi của SSI SDK
from ssi_fc_data import fc_md_client, model
import configDataSSI
import pandas as pd
import json

# Khởi tạo đối tượng Market Data Client sử dụng file config bảo mật
client = fc_md_client.MarketDataClient(configDataSSI)

2. Gọi dữ liệu giá cổ phiếu lịch sử (Daily Stock Price)

Phương thức daily_stock_price của SSI API cho phép chúng ta lấy lịch sử giá đóng cửa, mở cửa, khối lượng giao dịch của một mã cổ phiếu (ví dụ: VCB, SSI, TCB…) trong một khoảng thời gian xác định.

Thuật toán gọi dữ liệu thô:

symbol = 'VCB'
from_date = '01/07/2025'
to_date = '29/07/2025'

# 1. Tạo gói tin yêu cầu (Request Payload)
req = model.daily_stock_price(symbol, from_date, to_date)

# 2. Gửi yêu cầu qua Client và nhận kết quả dạng Dictionary
data_dict = client.daily_stock_price(configDataSSI, req)

# Kết quả thô chứa danh sách bản ghi nằm trong khóa "data"
data_list = data_dict['data']

3. Quy trình chuẩn hóa dữ liệu bằng Pandas DataFrame

Dữ liệu thô trả về từ SSI API có định dạng trường viết hoa toàn bộ và có tên cột đặc thù của hệ thống SSI (như TradingDate, HighestPrice, TotalTradedVol). Để tích hợp vào các thư viện tính toán chỉ báo kỹ thuật như Pandas-TA hay Backtesting.py, chúng ta cần thực hiện các bước chuẩn hóa sau:

  1. Lọc cột cần thiết: Giữ lại các cột OHLCV cơ bản.
  2. Đổi tên cột (Renaming): Đồng bộ tên cột về chuẩn quốc tế viết hoa đầu từ (Datetime, Open, High, Low, Close, Volume).
  3. Chuẩn hóa kiểu dữ liệu: Chuyển đổi cột khối lượng Volume từ chuỗi (string) sang định dạng số thực/số nguyên (numeric).
# 1. Chuyển đổi danh sách kết quả sang Pandas DataFrame
df = pd.DataFrame(data_list)

# 2. Lọc lấy các cột dữ liệu quan trọng nhất
df_filtered = df[['TradingDate', 'OpenPrice', 'HighestPrice', 'LowestPrice', 'ClosePrice', 'TotalTradedVol']].copy()

# 3. Đổi tên cột về định dạng chuẩn hóa
df_filtered.rename(columns={
    'TradingDate': 'Datetime',
    'OpenPrice': 'Open',
    'HighestPrice': 'High',
    'LowestPrice': 'Low',
    'ClosePrice': 'Close',
    'TotalTradedVol': 'Volume'
}, inplace=True)

# 4. Chuyển đổi cột khối lượng giao dịch sang kiểu số để tính toán
df_filtered['Volume'] = pd.to_numeric(df_filtered['Volume'])

# Hiển thị 5 bản ghi đầu tiên
print(df_filtered.head())

4. Lập trình viết hàm đóng gói gọi dữ liệu chuyên nghiệp

Để thuận tiện cho việc gọi lại dữ liệu khi chạy các chiến lược thực chiến hoặc lọc mã cổ phiếu hàng loạt, chúng ta nên đóng gói toàn bộ quy trình trên vào các hàm Python chuyên nghiệp:

Hàm lấy dữ liệu Daily OHLC:

def load_data_ssi_daily(symbol, from_date, to_date):
    from ssi_fc_data import fc_md_client, model
    import pandas as pd
    import configDataSSI

    client = fc_md_client.MarketDataClient(configDataSSI)
    
    # Sử dụng daily_ohlc API để gọi dữ liệu nến ngày chuẩn
    req = model.daily_ohlc(symbol, from_date, to_date, 1, 500, True)
    data_dict = client.daily_ohlc(configDataSSI, req)
    
    if 'data' not in data_dict or not data_dict['data']:
        print(f"⚠️ Không lấy được dữ liệu nến ngày cho {symbol}")
        return None
        
    data = pd.DataFrame(data_dict['data'])
    
    # Chuẩn hóa cột
    data.rename(columns={
        'TradingDate': 'Datetime',
        'open': 'Open',
        'high': 'High',
        'low': 'Low',
        'close': 'Close',
        'volume': 'Volume'
    }, inplace=True)
    
    return data[['Datetime', 'Open', 'High', 'Low', 'Close', 'Volume']]

Hàm lấy dữ liệu trong ngày (Intraday OHLC – Nến 1 phút):

Đối với các hệ thống Bot chạy tần suất cao cần nến trong ngày (Intraday), SSI API hỗ trợ gọi dữ liệu chi tiết từng phút:

def load_data_ssi_intraday(symbol, from_date, to_date):
    from ssi_fc_data import fc_md_client, model
    import pandas as pd
    import configDataSSI

    client = fc_md_client.MarketDataClient(configDataSSI)
    
    # Intraday OHLC hỗ trợ lấy nến phút
    req = model.intraday_ohlc(symbol, from_date, to_date, 1, 1000, True)
    data_dict = client.intraday_ohlc(configDataSSI, req)
    
    if 'data' not in data_dict or not data_dict['data']:
        print(f"⚠️ Không lấy được dữ liệu intraday cho {symbol}")
        return None
        
    data = pd.DataFrame(data_dict['data'])
    
    # Chuẩn hóa
    data.rename(columns={
        'TradingDate': 'Datetime',
        'open': 'Open',
        'high': 'High',
        'low': 'Low',
        'close': 'Close',
        'volume': 'Volume'
    }, inplace=True)
    
    return data[['Datetime', 'Open', 'High', 'Low', 'Close', 'Volume']]

🎓 Làm chủ công nghệ và xây dựng Bot giao dịch tự động

Gọi dữ liệu thị trường chính xác và tổ chức dữ liệu khoa học là viên gạch đầu tiên giúp bạn xây dựng nên một hệ thống giao dịch tự động ổn định và sinh lời bền vững.

Nếu bạn muốn nâng tầm kỹ năng lập trình, làm chủ toàn bộ quy trình từ Kết nối dữ liệu thời gian thực, Lập trình chiến lược giao dịch tự động hóa, Backtest chuyên sâu và Quản trị rủi ro đa tầng, hãy tham gia ngay chương trình đào tạo chất lượng cao tại Hướng Nghiệp Dữ Liệu:

👉 Khóa học Lập trình Bot Auto Trading thực chiến – Vibe Code Python Bot

  • Chương trình thực chiến 1-1: Bạn sẽ học trực tiếp cùng chuyên gia công nghệ, giải quyết trực tiếp mã nguồn dự án của riêng bạn.
  • Thư viện mã nguồn độc quyền: Được bàn giao toàn bộ mã nguồn kết nối các cổng giao dịch lớn (SSI, Exness, Binance, OANDA) cùng các cơ chế kiểm soát vị thế (Hedging) nâng cao.
  • Định hướng phát triển bền vững: Nắm vững nền tảng phân tích định lượng (Quantitative Analysis) để trở thành chuyên gia tự doanh trên thị trường tài chính chuyên nghiệp.

💬 LIÊN HỆ ĐĂNG KÝ VÀ TƯ VẤN TRỰC TIẾP QUA ZALO