> For the complete documentation index, see [llms.txt](https://guide.ssi.com.vn/ssi-products/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide.ssi.com.vn/ssi-products/tieng-viet/fastconnect-trading/du-lieu-streaming.md).

# Dữ liệu streaming

## 1. Order Event

Thông tin streaming cập nhật trạng thái lệnh về đặt/ hủy/ sửa lệnh bao gồm những thông tin sau:

<table><thead><tr><th width="181.33333333333331">Tên trường</th><th width="139">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Tên event: orderEvent</td></tr><tr><td>uniqueID</td><td>string</td><td></td></tr><tr><td>prefix</td><td>string</td><td></td></tr><tr><td>ipAddress</td><td>string</td><td>Được xác định yêu cầu từ Client</td></tr><tr><td>notifyID</td><td>string</td><td>Số serrial của msg</td></tr><tr><td>orderID</td><td>string</td><td></td></tr><tr><td>instrumentID</td><td>string</td><td>Mã chứng khoán</td></tr><tr><td>buySell</td><td>string</td><td><p>buy (B): mua/Sell (S): bán đã đặt theo orderID của lệnh</p><p>B: Buy</p><p>S: Sell</p></td></tr><tr><td>orderType</td><td>string</td><td><p>Loại lệnh: </p><p>LO|ATO|ATC|MP|MTL|MOK|MAK|PLO</p></td></tr><tr><td>price</td><td>number</td><td>Giá</td></tr><tr><td>quantity</td><td>number</td><td>Khối lượng</td></tr><tr><td>marketID</td><td>string</td><td><p>Sàn: </p><p>VN: thị trường cơ sở</p><p>VNFE: thị trường phái sinh</p></td></tr><tr><td>origRequestID</td><td>string</td><td></td></tr><tr><td>account</td><td>string</td><td>Số tài khoản</td></tr><tr><td>cancelQty</td><td>number</td><td>Tổng khối lượng đã hủy</td></tr><tr><td>osqty</td><td>number</td><td>Tổng khối lượng chưa khớp</td></tr><tr><td>filledQty</td><td>number</td><td>Tổng khối lượng khớp</td></tr><tr><td>avgPrice</td><td>number</td><td>Giá trung bình</td></tr><tr><td>channel</td><td>string</td><td>Kênh đặt lệnh</td></tr><tr><td>inputTime</td><td>string</td><td>Unixtime</td></tr><tr><td>modifiedTime</td><td>string</td><td>Unixtime</td></tr><tr><td>isForceSell</td><td>Boolean</td><td></td></tr><tr><td>orderStatus</td><td>Boolean</td><td><p>Trạng thái lệnh:<br>WA: Chờ duyệt </p><p>RS: Chờ gửi </p><p>SD: Đã gửi </p><p>QU: Chờ khớp </p><p>FF: Đã khớp </p><p>PF: Khớp 1 phần </p><p>FFPC: Khớp 1 phần hủy phần còn lại </p><p>WM: Chờ sửa </p><p>WC: Chờ hủy </p><p>CL: Đã hủy </p><p>RJ: Từ chối </p><p>EX: Hết hiệu lực </p><p>SOR: Chờ kích hoạt </p><p>SOS: Đã kích hoạt </p><p>IAV: Lệnh trước phiên </p><p>SOI: Lệnh điều kiện trước phiên</p></td></tr><tr><td>origOrderID</td><td>string</td><td></td></tr><tr><td>rejectReason</td><td>string</td><td></td></tr><tr><td>stopOrder</td><td>string</td><td><p>Loại lệnh: </p><p>True: Đối với lệnh điều kiện </p><p>False: Đối với lệnh thường</p></td></tr><tr><td>stopType</td><td>string</td><td><p>Loại điều kiện. Bắt buộc nhập nếu stopType = true</p><p>- D: Down</p><p>- U: Up</p><p>- V: Trailling Up</p><p>- E: Trailing Down</p><p>- O: OCO</p><p>- B: BullBear</p></td></tr><tr><td>stopStep</td><td>number</td><td></td></tr><tr><td>stopPrice</td><td>number</td><td></td></tr><tr><td>profitPrice</td><td>number</td><td></td></tr></tbody></table>

Ví dụ:&#x20;

*Streaming đặt lệnh thành công*

{% tabs %}
{% tab title="Input" %}

```json
{ 
instrumentID: "SSI",
market: "VN",
buySell: "B",
orderType: "LO",
channelID: "IW",
price: 21000,
quantity: 300,
account: "0901351",
stopOrder: false,
stopPrice: 0,
stopType: "string",
stopStep: 0,
lossStep: 0,
profitStep: 0
requestID: "1678195",
code: “123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
 }
```

{% endtab %}

{% tab title="Output" %}

```json
{
"type":"orderEvent",
"data": {
"orderID":"12663204",
"notifyID":10, 
“instrumentID":"VN30F2106",
"uniqueID":"30304045",
"buySell":"B",
“orderType":"LO",
"ipAddress":"192.168.202.36",
"price":1410,"prefix":"2mw",
"quantity":10,
"marketID":"VNFE",
"origOrderId":"",
"account":"0901358",
"cancelQty":0,"osQty":10,
"filledQty":0,
"avgPrice":0,
"channel":"TA",
"inputTime":"1606277281849",
"modifiedTime":"1606277281850",
"isForceSell":"F",
"isShortSell":"F",
"orderStatus":"RS",
"rejectReason":"",
"origRequestID":"30304045",
"stopOrder":false,
"stopPrice":0,
"stopType":"",
"stopStep":0,
"profitPrice":0
}
}
```

{% endtab %}
{% endtabs %}

*Streaming đặt lệnh không thành công*

{% tabs %}
{% tab title="Input" %}

```json
{ 
instrumentID: "SSI",
market: "VN",
buySell: "B",
orderType: "LO",
channelID: "IW",
price: 1600,
quantity: 300,
account: "0901351",
stopOrder: false,
stopPrice: 0,
stopType: "string",
stopStep: 0,
lossStep: 0,
profitStep: 0
requestID: "1678195",
code: “123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
 }
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "type": "orderError",
  "data": {
    "message": "Price 1,600.00 exceeds ceiling price 808.50!",
    "notifyID": 15455,
    "data": null,
    "errorCode": "ERR500",
    "uniqueID": "02365132",
    "connectionID": "",
    "ipAddress": "192.168.202.87",
    "prefix": "23o"
  }
}
```

{% endtab %}
{% endtabs %}

*Streaming về sửa lệnh thành công*

{% tabs %}
{% tab title="Input" %}

```json
{
requestID: "93235974",
orderID: "12658867",
price: 1410,
quantity: 2,
account: "0901358",
instrumentID: "VN30F2106",
marketID: "VNFE",
buySell: "B",
orderType: "LO"
code:”123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
}son
```

{% endtab %}

{% tab title="Outputl" %}

```json
{
"type":"orderEvent",
"data": {
"orderID":"12663204",
"notifyID":11,
"instrumentID":"VN30F2106",
"uniqueID":"31618366",
"buySell":"B",
"orderType":"LO",
"ipAddress":"192.168.202.36",
"price":1410,
"prefix":"2mw",
"quantity":2,
"marketID":"VNFE",
"origOrderId":"",
"account":"0901358",
"cancelQty":0,
"osQty":2,
"filledQty":0,
"avgPrice":0,
"channel":"TA",
"inputTime":"1606277281849",
"modifiedTime":"1606277330852",
"isForceSell":"F",
"isShortSell":"F",
"orderStatus":"RS",
"rejectReason":"",
"origRequestID":"30304045",
"stopOrder": false,
"stopPrice":0,
"stopType":"",
"stopStep":0,
"profitPrice":0
}
}
```

{% endtab %}
{% endtabs %}

*Streaming sửa lệnh không thành công*

{% tabs %}
{% tab title="Input" %}

```json
{
requestID: "93235974",
orderID: "12658867",
price: 1000,
quantity: 2,
account: "0901358",
instrumentID: "VN30F2106",
marketID: "VNFE",
buySell: "B",
orderType: "LO"
code:”123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "type": "orderError",
  "data": {
    "message": "Price 1,000.00 exceeds ceiling price 808.50!",
    "notifyID": 15460,
    "data": null,
    "errorCode": "ERR500",
    "uniqueID": "65896571",
    "connectionID": "",
    "ipAddress": "192.168.202.87",
    "prefix": "23o"
  }
}
```

{% endtab %}
{% endtabs %}

*Streaming hủy lệnh thành công*

{% tabs %}
{% tab title="Input" %}

```json
{
orderID: "12658867",
account: "0901358",
marketID: "VNFE",
instrumentID: "VN30F2106",
buySell: "B",
requestID: "52513603"
code:”123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
"type":"orderEvent",
"data": {
"orderID":"12663204",
"notifyID":12,
"instrumentID":"VN30F2106",
"uniqueID":"59028516",
"buySell":"B",
"orderType":"LO",
"ipAddress":"192.168.202.36",
"price":1410
,"prefix":"2mw",
"quantity":2,
"marketID":"VNFE",
"origOrderId":"",
"account":"0901358",
"cancelQty":2,
"osQty":0,
"filledQty":0,
"avgPrice":0,
"channel":"TA",
"inputTime":"1606277281849",
"modifiedTime":"1606277330861",
"isForceSell":"F",
"isShortSell":"F",
"orderStatus":"CL",
"rejectReason":"",
"origRequestID":"30304045",
"stopOrder": false,
"stopPrice":0,
"stopType":"",
"stopStep":0,
"profitPrice":0
}
}
```

{% endtab %}
{% endtabs %}

*Streaming hủy lệnh không thành công*

{% tabs %}
{% tab title="Input" %}

```json
{
orderID: "12658867",
account: "0901358",
marketID: "VNFE",
instrumentID: "VN30F2106",
buySell: "B",
requestID: "52513603"
code:”123456789”,
deviceID: "MAC Address",
userAgent: “FCTrading”
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "type": "orderError",
  "data": {
    "message": "Invalid Order Transition Error!",
    "notifyID": 15468,
    "data": null,
    "errorCode": "ERR500",
    "uniqueID": "25162310",
    "ipAddress": ":",
    "192.168.202.87": ",",
    "prefix": ":",
    "23o": "}}"
  }
}
```

{% endtab %}
{% endtabs %}

## 2. OrderError

Khi yêu cầu đặt/hủy/sửa bị lỗi, hệ thống sẽ cập nhật qua streaming các thông tin như sau:&#x20;

<table><thead><tr><th width="179.33333333333331">Tên trường</th><th width="155">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Tên event: orderError</td></tr><tr><td>data</td><td> </td><td>Thông tin dữ liệu</td></tr><tr><td>Detail of data</td><td></td><td></td></tr><tr><td>uniqueid</td><td>string</td><td></td></tr><tr><td>ipaddress</td><td>string</td><td></td></tr><tr><td>notifyID</td><td>string</td><td></td></tr><tr><td>errorCode</td><td>string</td><td>Mã code lỗi trả ra</td></tr><tr><td>message</td><td>string</td><td>Thông tin lệnh lỗi</td></tr><tr><td>orderID</td><td>string</td><td>Số hiệu lệnh</td></tr><tr><td>instrumentID</td><td>string</td><td>Mã CK</td></tr><tr><td>buySell</td><td>string</td><td><p>Chiều mua/ bán<br>B: Buy</p><p>S: Sell</p></td></tr><tr><td></td><td></td><td></td></tr><tr><td>prefix</td><td>string</td><td> </td></tr><tr><td>orderType</td><td>string</td><td><p>Loại lệnh: </p><p>LO|ATO|ATC|MP|MTL|MOK|MAK|PLO</p></td></tr><tr><td>price</td><td>number</td><td>Giá</td></tr><tr><td>quantity</td><td>number</td><td>Khối lượng</td></tr><tr><td>marketID</td><td>string</td><td>Sàn</td></tr><tr><td>origOrderID</td><td>string</td><td> </td></tr><tr><td>account</td><td>string</td><td>Số tài khoản</td></tr><tr><td>channel</td><td>string</td><td>Kênh</td></tr><tr><td>inputTime</td><td>string</td><td>Thời gian nhận</td></tr><tr><td>modifiedTime</td><td>string</td><td>Thời gian sửa lệnh</td></tr><tr><td>isForceSell</td><td>Boolean</td><td>Luôn = F</td></tr><tr><td>isShortSell</td><td>Boolean</td><td>Luôn = F</td></tr><tr><td>origRequestID</td><td>string</td><td> </td></tr><tr><td>stopOrder</td><td>string</td><td>True hoặc False</td></tr><tr><td>stopPrice</td><td>number</td><td> </td></tr><tr><td>stopType</td><td>string</td><td><p>Loại điều kiện. Bắt buộc nhập nếu stopType = true</p><p>- D: Down</p><p>- U: Up</p><p>- V: Trailling Up</p><p>- E: Trailing Down</p><p>- O: OCO</p><p>- B: BullBear</p></td></tr><tr><td>stopStep</td><td>number</td><td> </td></tr><tr><td>profitPrice</td><td>number</td><td> </td></tr><tr><td>modifiable</td><td>string</td><td> </td></tr><tr><td>note</td><td>string</td><td>Ghi chú</td></tr></tbody></table>

Ví dụ:&#x20;

```json
{
  "type": "orderError",
  "data": {
    "message": "This channel has been block; disallow to place order ",
    "notifyID": 0,
    "errorCode": "ORD015",
    "uniqueID": "6163422",
    "orderID": "T20230504w3806163422",
    "instrumentID": "SSI",
    "ipAddress": "10.255.241.47",
    "buySell": "B",
    "prefix": "w38",
    "orderType": "LO",
    "price": 19600,
    "quantity": 200,
    "marketID": "VN",
    "origOrderId": "T20230504w3806163422",
    "account": "0322206",
    "channel": "TA",
    "inputTime": "1683165600160",
    "modifiedTime": "1683165600161",
    "isForceSell": "F",
    "isShortSell": "F",
    "origRequestID": "6163422",
    "stopOrder": false,
    "stopPrice": 0,
    "stopType": "",
    "stopStep": 0,
    "profitPrice": 0,
    "modifiable": false,
    "note": ""
  }
}
```

## 3. Order Match Event

Thông tin Streaming gồm những trường sau:&#x20;

<table><thead><tr><th width="182">Tên trường</th><th width="160">Kiểu dữ liệu</th><th width="282">Mô tả</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Tên event: orderMatchEvent</td></tr><tr><td>data</td><td> </td><td>Thông tin khớp lệnh</td></tr><tr><td>orderID</td><td>string</td><td>Thông tin orderID</td></tr><tr><td>instrumentID</td><td>string</td><td>Mã chứng khoán</td></tr><tr><td>ipAddress</td><td>string</td><td>IP xác định từ yêu cầu Client</td></tr><tr><td>uniqueID</td><td> string</td><td></td></tr><tr><td>notifyid</td><td>string</td><td></td></tr><tr><td>buySell</td><td>string</td><td> </td></tr><tr><td>matchPrice</td><td>number</td><td> giá khớp</td></tr><tr><td>matchQty</td><td>number</td><td> khối lượng khớp</td></tr><tr><td>prefix</td><td>string</td><td> </td></tr><tr><td>account</td><td>string</td><td> Số tài khoản</td></tr><tr><td>matchTime</td><td>string</td><td> Thời gian khớp</td></tr></tbody></table>

Ví dụ:

```json
{
  "type": "orderMatchEvent",
  "data": {
    "orderID": "16201867",
    "notifyID": 101180,
    "instrumentID": "BVS",
    "uniqueID": "24194396",
    "buySell": "B",
    "matchPrice": 1000,
    "ipAddress": "10.48.41.16",
    "matchQty": 100,
    "prefix": "t4c",
    "account": "1184411",
    "matchTime": "1656665019000"
  }
}
```

## 4. Vị thế phái sinh

Thông tin streaming vị thế phái sinh bao gồm vị thế mở và vị thế đã đóng trong ngày. &#x20;

<table><thead><tr><th width="177.33333333333331">Tên trường</th><th width="121">Kiểu dữ liệu</th><th>Mô tả</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>Tên event: clientPortfolioEvent</td></tr><tr><td>uniqueid</td><td>string</td><td> </td></tr><tr><td>connectionid</td><td>string</td><td> </td></tr><tr><td>ipaddress</td><td>string</td><td>IP được xác định từ yêu cầu Client</td></tr><tr><td>notifyid</td><td>string</td><td></td></tr><tr><td>account</td><td> string</td><td>Số tài khoản</td></tr><tr><td>marketid</td><td>string</td><td>Thị trường<br>- VNFE: Phái sinh</td></tr><tr><td>instrumentid</td><td>string</td><td>Mã chứng khoán</td></tr><tr><td>longqty</td><td>number</td><td>Vị thế long</td></tr><tr><td>shortqty</td><td>number</td><td>Vị thế short</td></tr><tr><td>Net</td><td>number</td><td>Vị thế net (Tính bằng long - short).</td></tr><tr><td>bidavgprice</td><td>number</td><td>Giá mua trung bình</td></tr><tr><td>askavgprice</td><td>number</td><td>Giá bán trung bình</td></tr><tr><td>tradeprice</td><td>number</td><td>Giá khớp</td></tr><tr><td>marketprice</td><td>number</td><td>Giá thị trường</td></tr><tr><td>floatingpl</td><td>number</td><td>Lãi/ Lỗ tạm tính</td></tr><tr><td>tradingpl</td><td>number</td><td>Lãi/ Lỗ đã chốt</td></tr></tbody></table>

Ví dụ:&#x20;

```json
{
  "type": "clientPortfolioEvent",
  "data": {
    "account": "0901358",
    "notifyID": 27,
    "data": null,
    "clientPortfoliosOpen": [
      {
        "martketID": "VNFE",
        "instrumentID": "VN30F2106",
        "longQty": 9,
        "shortQty": 0,
        "net": 9,
        "bidAvgPrice": 1402.4000244140625,
        "askAvgPrice": 0,
        "tradePrice": 0,
        "marketPrice": 873,
        "floatingPL": -476460000,
        "tradingPL": 0
      },
      {
        "martketID": "VNFE",
        "instrumentID": "VN30F2107",
        "longQty": 2,
        "shortQty": 0,
        "net": 2,
        "bidAvgPrice": 830,
        "askAvgPrice": 0,
        "tradePrice": 0,
        "marketPrice": 830,
        "floatingPL": 0,
        "tradingPL": 0
      }
    ],
    "uniqueID": null,
    "clientPortfoliosClose": null,
    "connectionID": "",
    "ipAddress": null,
    "prefix": null
  }
}
```

## 5. FCO Event

Thông tin streaming trạng thái lệnh điều kiện &#x20;

<table><thead><tr><th width="166" valign="top">Tên trường</th><th width="128" valign="top">Kiểu dữ liệu</th><th valign="top">Mô tả</th></tr></thead><tbody><tr><td valign="top">type</td><td valign="top">string</td><td valign="top">Type of event: “fcoEvent”</td></tr><tr><td valign="top"><p> </p><p>data</p><p> </p></td><td valign="top">json</td><td valign="top">Thông tin chi tiết của event</td></tr><tr><td valign="top"><p> </p><p>fcoId</p><p> </p></td><td valign="top">string</td><td valign="top">Id lệnh điều kiện</td></tr><tr><td valign="top"><p> </p><p>processStatus</p><p> </p></td><td valign="top"></td><td valign="top">Trạng thái lệnh điều kiện</td></tr><tr><td valign="top"><p> </p><p>matchedQuantity</p><p> </p></td><td valign="top">number</td><td valign="top">Khối lượng đã khớp</td></tr><tr><td valign="top"><p> </p><p>isPlaceOrder</p><p> </p></td><td valign="top">boolean</td><td valign="top">Trạng thái phát sinh lệnh con: true: Có lệnh thực phát sinh (xuất hiện lệnh ở Orderbook); false: Chưa có Lệnh thực phát sinh</td></tr><tr><td valign="top"><p> </p><p>instrumentID</p><p> </p></td><td valign="top">string</td><td valign="top">Mã chứng khoán. Mã chứng khoán, đối với mã phái sinh thì truyền theo mã 1M, 2M, 1Q, 2Q, VN30FYYMM ( Mã tổng quát và chi tiết phái sinh)</td></tr><tr><td valign="top"><p> </p><p>quantity</p><p> </p></td><td valign="top">number</td><td valign="top">Khối lượng muốn đặt lệnh</td></tr><tr><td valign="top"><p> </p><p>price</p><p> </p></td><td valign="top">string</td><td valign="top">Giá đặt (đơn vị đồng): 23500/MP/MOK/MTL</td></tr><tr><td valign="top"><p> </p><p>account</p><p> </p></td><td valign="top"><p> </p><p>string</p><p> </p></td><td valign="top">Tiểu khoản muốn đặt lệnh: ví dụ tài khoản đuôi 8 đuôi 6</td></tr><tr><td valign="top"><p> </p><p>updatedTime</p><p> </p></td><td valign="top"><p> </p><p>string</p><p> </p></td><td valign="top">Ngày bắt đầu thực hiên lệnh, định dạng YYYY/MM/DDThh:mm:ss. Nếu không truyền thì tính từ lúc tạo thành công</td></tr><tr><td valign="top"><p> </p><p>status</p><p> </p></td><td valign="top"><p> </p><p>string</p><p> </p></td><td valign="top">Tham chiếu bảng mã lỗi</td></tr><tr><td valign="top"><p> </p><p>message</p><p> </p></td><td valign="top"><p> </p><p>string</p><p> </p></td><td valign="top">Thông báo lỗi</td></tr><tr><td valign="top"><p> </p><p>username</p><p> </p></td><td valign="top"><p> </p><p>string</p><p> </p></td><td valign="top">ID người dùng tại SSI</td></tr></tbody></table>

Ví dụ:&#x20;

```json
{
  "type": "fcoEvent",
  "data": {
    "fcoId": "7528ac20-a340-4233-8bb7-a2379fc3c638",
    "notifyID": 1249008,
    "processStatus": "INIT",
    "matchedQuantity": 0,
    "isPlaceOrder": false,    
    "instrumentID": "ssi",
    "quantity": 4000,
    "price": "MP",
    "account": "1231496",
    "updatedTime": "1751966448000",
    "status": "200",
    "message": "Success",
    "username": "123149"
  }
}
```
