Account Changes

About 10 min

The following are all asynchronous APIs, you need to specify a method to respond to the returned result

Subscription and callback data format currently supports two ways, Protobuf and STOMP, we recommend using Protobuf. The current version uses STOMP by default, and will switch to the default Protobuf method in future versions.

Modify the PushClient initialization parameter use_protobuf, set it to True to enable the Protobuf method:

push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'), use_protobuf=True)

Protobuf method

Subscribe asset change

Subscribe method

PushClient.subscribe_asset(account=None)

Cancel method

PushClient.unsubscribe_asset()

Parameters

Parameter nametypedescription
accountstraccount id to subscribe to, or all associated accounts if not passed

Return

Need to use PushClient.asset_changed to return the result of the response. The return result is tigeropen.push.pb.AssetData_pb2.AssetData object

Callback Data Field Meaning
Asset Change Callback

FieldTypeDescription
accountstrmoney account number
currencystrCurrency. USD US dollar, HKD Hong Kong dollar
segTypestrSegmentation by trading species. s for equities, c for futures
availableFundsfloatavailable funds, overnight residual liquidity
excessLiquidityfloatcurrent residual liquidity
netLiquidationfloattotal assets (net liquidation value). Total equity is the sum of the net liquidation cash balance and the total market value of the securities in our account
equityWithLoanfloatcontains the total equity of the loan value. Equals Total Equity - U.S. Equity Options
buyingPowerfloatpurchasing power. Only applicable to equity varieties, i.e. meaningful when segment is S
cashBalancefloatCash amount. The sum of the current cash balance in all currencies
grossPositionValuefloatthe total value of the security
initMarginReqfloatinitial margin
maintMarginReqfloatmaintenance margin
timestampinttimestamp

Example

from tigeropen.push.pb.AssetData_pb2 import AssetData
from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'), use_protobuf=True)

def on_asset_changed(frame: AssetData):
    """"""
    print(f'asset change. {frame}')
    print(frame.availableFunds)
    print(frame.grossPositionValue)

push_client.asset_changed = on_asset_changed
push_client.connect(client_config.tiger_id, client_config.private_key)

push_client.subscribe_asset(account=client_config.account)
push_client.unsubscribe_asset()

Callback data example

account: "111111"
currency: "USD"
segType: "S"
availableFunds: 1593.1191893
excessLiquidity: 1730.5666908
netLiquidation: 2856.1016998
equityWithLoan: 2858.1016998
buyingPower: 6372.4767571
cashBalance: 484.1516697
grossPositionValue: 2373.95003
initMarginReq: 1264.9825105
maintMarginReq: 1127.535009
timestamp: 1677745420121

Subscribe Position change

Subscribe method

PushClient.subscribe_position(account=None)

Cancel method

PushClient.unsubscribe_position()

Parameters

Parameter nametypedescription
accountstrthe account id to subscribe to, or all associated accounts if not passed

Examples

from tigeropen.push.pb.PositionData_pb2 import PositionData
from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'), use_protobuf=True)

# Define the callback method
def on_position_changed(frame: PositionData).
    print(f'position change. {frame}')
    # Position underlying
    print(frame.symbol)
    # The cost of the position
    print(frame.averageCost)
    
# Bind callback method
push_client.position_changed = on_position_changed
# Connect
push_client.connect(client_config.tiger_id, client_config.private_key)

# Subscribe to position changes
PushClient.subscribe_position(account=client_config.account)
# Unsubscribe from position changes
PushClient.unsubscribe_position()

return
Need to use PushClient.position_changed to respond to the returned result with data type tigeropen.push.pb.PositionData_pb2.PositionData . The fields in the list item can be cross-referenced to position in [Position](/en/python/appendix1/ object.md#position-position) object.

FieldTypeDescription
accountstrmoney account number
symbolstrThe symbol of the underlying position, such as 'AAPL', '00700', 'ES', 'CN'
expirystrOnly options, warrants, CBBCs are supported
strikestronly supports options, warrants, CBBCs
rightstrOnly options, warrants, CBBCs are supported
identifierstrThe identifier of the underlying. The identifier for stocks is the same as the symbol. For futures, it will have the contract month, e.g. 'CN2201'
multiplierintthe number of lots, futures, options, warrants, CBBC only
marketstrmarket. US, HK
currencystrcurrency. USD, HKD
segTypestrClassification by trading species. s for stocks, c for futures
secTypestrSTK Stocks, OPT Options, WAR Warrants, IOPT CBBC, CASH FOREX, FUT Futures, FOP Future Options
positionintNumber of Positions
positionScaleintOffset of position size
averageCostfloatThe average price of a position
latestPricefloatthe current price of the underlying
marketValuefloatthe market value of the position
unrealizedPnlfloatP&L of the position
namestrthe name of the underlying
timestampinttimestamp

Callback data example Stock position change push

account: "1111111"
symbol: "BILI"
identifier: "BILI"
multiplier: 1
market: "US"
currency: "USD"
segType: "S"
secType: "STK"
position: 100
averageCost: 80
latestPrice: 19.83
marketValue: 1983
unrealizedPnl: -6017
timestamp: 1677745420121

Subscribe Order Status Change

Subscribe method

PushClient.subscribe_order(account=None)

Cancel method

PushClient.unsubscribe_order()

Parameters

Parameter nametypedescription
accountstrthe account id to subscribe to, or all associated accounts if not passed

Example

from tigeropen.push.pb.OrderStatusData_pb2 import OrderStatusData
from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
from tigeropen.common.consts import OrderStatus
from tigeropen.common.util.order_utils import get_order_status
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'), use_protobuf=True)

# Define the callback method
def on_order_changed(frame: OrderStatusData):
    print(f'order changed: {frame}')
    print(f'order status: {frame.status}')
    # convert status value to Enum
    status_enum = OrderStatus[frame.status]
    # or
    # status_enum = get_order_status(frame.status)
    
# Binding callback methods
push_client.order_changed = on_order_changed
# Connect
push_client.connect(client_config.tiger_id, client_config.private_key)

# Subscribe to order changes
PushClient.subscribe_order(account=client_config.account)
# Unsubscribe from order changes
PushClient.unsubscribe_order()

return
Need to use PushClient.order_changed response to return the results, data type tigeropen.push.pb.OrderStatusData_pb2.OrderStatusData

The meaning of the fields in the return result can be cross-referenced to Order in [Order](/en/python/appendix1/object.md#order -order) object

FieldTypeDescription
idintorder number
accountstrmoney account number
symbolstrThe symbol of the underlying position, such as 'AAPL', '00700', 'ES', 'CN'
expirystrOnly options, warrants, CBBCs are supported
strikestronly supports options, warrants, CBBCs
rightstrOnly options, warrants, CBBCs are supported
identifierstrThe identifier of the underlying. The identifier for stocks is the same as the symbol. For futures, it will have the contract month, e.g. 'CN2201'
multiplierintthe number of lots, futures, options, warrants, CBBC only
actionstrbuy and sell direction. BUY means buy, SELL means sell. market
marketstrmarket. US, HK
currencystrcurrency. USD US dollar, HKD Hong Kong dollar
segTypestrClassification by trading species. s means stock, c means futures
secTypestrSTK Stocks, OPT Options, WAR Warrants, IOPT CBBC, CASH FOREX, FUT Futures, FOP Future Options
orderTypestrorder type.' MKT' Market Order / 'LMT' Limit Order / 'STP' Stop Loss Order / 'STP_LMT' Stop Loss Limit Order / 'TRAIL' Trailing Stop Order
isLongbooleanwhether the position is long
totalQuantityintthe number of orders placed
totalQuantityScaleintOffset of the number of orders placed, e.g. totalQuantity=111, totalQuantityScale=2, then true totalQuantity=111*10^(-2)=1.11
filledQuantityinttotalQuantity of transactions (if the order is divided into multiple transactions, filledQuantity is the cumulative total number of transactions)
filledQuantityScaleinttotal number of transactions offset
avgFillPricefloatthe average price of the transaction
limitPricefloatlimit order price
stopPricefloatstop price
realizedPnlfloatrealized profit/loss (only consolidated accounts have this field)
statusstrorderStatus
replaceStatusstr[order change status](/en/python/appendix2/overview.md#order change status)
cancelStatusstr[order withdrawal status](/en/python/appendix2/overview.md#order withdrawal status)
outsideRthboolwhether to allow pre and after hours trading, only for US stocks
canModifyboolwhether can modify
canCancelboolwhether it can be cancelled
liquidationboolwhether the order is closed
namestrthe name of the underlying
sourcestrThe source of the order (from 'OpenApi', or other)
errorMsgstrerror message
attrDescstrorder description information
commissionAndFeefloatcommission fee total
openTimeinttime of the order
timestampintorder status last update time
userMarkstrremark
totalCashAmountfloattotal cash amount
filledCashAmountfloatfilled cash amount

Callback data example Stock order push example


Example of futures order push

{"id": "28875370355884032", "account": "736845", "symbol": "CL", "identifier": "CL2312", "multiplier":1000, "action": "BUY".
"market": "US", "currency": "USD", "segment": "C", "secType": "FUT", "orderType": "LMT", "isLong":true, "totalQuantity": "1".
"filledQuantity": "1", "avgFillPrice":77.76, "limitPrice":77.76, "status": "Filled", "outsideRth":true, "name": "WTI Crude Oil 2312".
"source": "android", "commissionAndFee":4.0, "openTime": "1669200792000", "timestamp": "1669200782221"}

Order execution details subscription and cancellation

Subscribe method

PushClient.subscribe_transaction(account=client_config.account)

Cancel method

PushClient.unsubscribe_transaction()

Parameters

Parameter nametypedescription
accountstrthe account id to subscribe to, or all associated accounts if not passed

Example

from tigeropen.push.pb.OrderTransactionData_pb2 import OrderTransactionData
from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'), use_protobuf=True)

# Define callback methods
def on_transaction_changed(frame: OrderTransactionData).
    print(f'transaction changed: {frame}')
    
# Bind the callback method
push_client.transaction_changed = on_transaction_changed
# Connect
push_client.connect(client_config.tiger_id, client_config.private_key)

# Subscribe
PushClient.subscribe_transaction(account=client_config.account)
# unsubscribe
PushClient.unsubscribe_transaction()

return
Need to use PushClient.transaction_changed response to return the results, data type tigeropen.push.pb.OrderTransactionData_pb2.OrderTransactionData
The meaning of the fields in the return result can be cross-referenced to get_transactions in [Transaction](/en/python/ appendix1/object.md#transaction-transactional-records)

fieldtypedescription
idintorderExecutionId
orderIdintorder number
accountstrfund account number
symbolstrThe code of the underlying position, e.g. 'AAPL', '00700', 'ES', 'CN'
identifierstrThe identifier of the underlying. The identifier of the stock is the same as the symbol. For futures, it will have the contract month, e.g. 'CN2201'
multiplierintnumber per lot (proprietary to options, futures)
BUY means BUY, SELL means SELL.market
marketstrmarket, US, HK
currencystrCurrency. USD, HKD
segTypestrSegmentation by trading instrument. s means stock, c means futures
secTypestrTrading variety, underlying type. STK denotes stock, FUT denotes futures.
filledPricefloatprice
The price of a stock is the same as the price of a futures contract.
createTimeintcreate time
updateTimeintupdate time
transactTimeinttransaction time
timestampinttimestamp

Callback data example


id: 2999543887211111111
orderId: 29995438111111111
account: "11111111"
symbol: "ZC"
identifier: "ZC2305"
multiplier: 5000
action: "BUY"
market: "US"
currency: "USD"
segType: "C"
secType: "FUT"
filledPrice: 6.385
filledQuantity: 1
createTime: 1677746237303
updateTime: 1677746237303
transactTime: 1677746237289
timestamp: 1677746237313

Stomp

Subscribe and unsubscibe to asset changes

Subscribe to asset changes

PushClient.subscribe_asset(account=None)

unsubscribe

PushClient.unsubscribe_asset()

Arguments

Argumentstypedescription
accountstrThe account id to be subscribed to. If this parameter is left empty, you are by default subscribe to changes of all accounts under your Tiger ID

Response

Use PushClient.asset_changed to process the data returned. The first parameter corresponds to account id, and the second parameter is a list that contains actual data

Refer to the following methods and objects for the explaination of data fields: get_prime_assetsget_assets

PortfolioAccount
Segment

PortfolioAccount
SecuritySegment
CommoditySegment

Parametertypedescription
segmentstrClassification by trade type. 'S' indicates equities, 'C' indicates futures, summary indicates aggregated asset information for global accounts
cashfloatCash amount. Sum of current cash balances in all currencies
available_fundsfloatAvailable funds, overnight residual liquidity
excess_liquidityfloatCurrent Residual Liquidity
equity_with_loanfloatContains total loan-to-value equity. Equal to total assets - US stock options
net_liquidationfloatTotal Assets (Net Liquidation Value).
gross_position_valuefloatTotal value of securities
initial_margin_requirementfloatInitial margin Requirement
maintenance_margin_requirementfloatMaintenance margin Requirement
buying_powerfloatPurchasing power. Only applicable to stock varieties, i.e. meaningful when segment is 'S'

Example

from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'))

# implement your own callback method
def on_asset_changed(account, items):
    """implement your own callback method"""
    print(f'asset change. account:{account}, items:{items}')


push_client.asset_changed = on_asset_changed
# establish connection
push_client.connect(client_config.tiger_id, client_config.private_key)

# subscribe
push_client.subscribe_asset(account=client_config.account)
# unsubscribe
PushClient.unsubscribe_asset()

Callback Data

account:123456, 
items:[('cash', 679760.8392063834), ('gross_position_value', 202318.91581133104), ('equity_with_loan', 881789.7550177145),
 ('net_liquidation', 882079.7550177145), ('initial_margin_requirement', 108369.06714828224), ('buying_power', 3093682.751477729),
  ('excess_liquidity', 793970.6843320723), ('available_funds', 773420.6878694323), ('maintenance_margin_requirement', 87819.07068564222),
   ('segment', 'S')]
   
account:111111, 
items:[('cash', 99997.18), ('gross_position_value', 15620.0), ('equity_with_loan', 99572.18), ('net_liquidation', 99997.18),
 ('initial_margin_requirement', 467.5), ('buying_power', 0.0), ('excess_liquidity', 99572.18), ('available_funds', 99529.68),
  ('maintenance_margin_requirement', 425.0), ('segment', 'C')]

Subscribe to Position Change

Method for Subscribing

PushClient.subscribe_position(account=None)

Method for Unsubscribing

PushClient.unsubscribe_position()

Arguments

ArgumentTypeDescription
accountstraccount id. If left empty, all the account information will be pushed

Example

from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'))

# Implement callback method
def on_position_changed(account, items):
    """
    :param account:
    :param items:
    :return:
    example of items:
        [('symbol', 'ABCD'), ('market_price', 3.68525), ('market_value', 0.0), ('sec_type', 'STK'),
        ('segment', 'summary'), ('currency', 'USD'), ('quantity', 0.0), ('average_cost', 3.884548)]
    """
    print(account, items)
    
push_client.position_changed = on_position_changed
# Connect
push_client.connect(client_config.tiger_id, client_config.private_key)

# Subscribe to position change
PushClient.subscribe_position(account=client_config.account)
# Unsubscribe
PushClient.unsubscribe_position()

Response
Implement PushClient.position_changed to process the data returned. First parameter is the account id, the second element is a list of new position information. Pleaser refer to get_position object for a detailed explaination of the data fields

Parameterstypedescription
segmentstrClassification by trade type. 'S' indicates equities, 'C' indicates futures.
symbolstrUnderlying position codes, such as 'AAPL', '00700', 'ES'
identifierstrThe identifier of the stock is the same as the symbol. For futures, it will have the contract month, e.g. 'CN2201'
currencystrCurrency. such as 'USD','HKD'
sec_typestrSecurity Type, 'STK','FUT'
market_pricefloatcurrent market price
market_valuefloatcurrent market value
quantityintposition quantity
average_costfloatposition average cost
unrealized_pnlfloatposition unrealized pnl

Callback data Example

# Stocks 
account:1111111, 
items:[('symbol', '09626'), ('currency', 'HKD'), ('sec_type', 'STK'), ('market_price', 305.0), ('quantity', 20), ('average_cost', 0.0), ('market_value', 6100.0), ('identifier', '09626'), ('unrealized_pnl', 6100.0), ('segment', 'S')]

# Options 
account:1111111, 
items:[('symbol', 'CN'), ('currency', 'USD'), ('sec_type', 'FUT'), ('market_price', 15620.0), ('quantity', 1), ('average_cost', 0.0), ('market_value', 15620.0), ('identifier', 'CN2201'), ('unrealized_pnl', 15620.0), ('segment', 'C')]

Subscribe to Order Status Change

Subscribe

PushClient.subscribe_order(account=client_config.account)

Unsubscribe

PushClient.unsubscribe_order()

Arguments

Argumenttypedescription
accountstr

Example

from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'))

# Implement your own callback method
def on_order_changed(account, items):
    """
    :param account:
    :param items:
    :return:
    items:
        [('order_type', 'LMT'), ('symbol', 'ABCD'), ('order_id', 1000101463), ('sec_type', 'STK'), ('filled', 100),
        ('quantity', 100), ('segment', 'summary'), ('action', 'BUY'), ('currency', 'USD'), ('id', 173612806463631360),
        ('order_time', 1568095814556), ('time_in_force', 'DAY'), ('identifier', 'ABCD'), ('limit_price', 113.7),
        ('outside_rth', True), ('avg_fill_price', 113.7), ('trade_time', 1568095815418),
        ('status', <OrderStatus.FILLED: 'Filled'>)]
    """
    print(account, items)
    
push_client.order_changed = on_order_changed
# Establish Connection
push_client.connect(client_config.tiger_id, client_config.private_key)

# Subscribe
PushClient.subscribe_order(account=client_config.account)
# Unsubscribe
PushClient.unsubscribe_order()

Response
Use PushClient.order_changed to proccess the data returned. First parameter is the account id, The second parameter is a list of all relevant data. Refer to get_order in Order object for a detailed explaination of the data fields

Argumentstypedescription
segmentstrtrading segment. S: Stock, C: Futures
idintOrder id
symbolstrTicker symbol. Example: 'AAPL', '00700', 'ES', 'CN'
identifierstrIdentifier of the asset. The identifier of a stock is identical to its symbol. For futures contract, its identifier includes its month code. Example 'CN2201'
currencystrCurrency. USD-US dollars, HKD-Hongkong dollars
sec_typestrSecurity type. Represents the type of the asset that you want to trade. STK-stocks, FUT-futures
actionstr'BUY' or 'SELL'
order_typestrOrder type。'MKT'-market order/'LMT'-limit order/'STP'-stop order/'STP_LMT'-stop limit order/'TRAIL'-trailing stop order
quantityintQuantity of the order
limit_pricefloatLimit price of the order
filledintFilled quantity
avg_fill_pricefloatAverage fill price
realized_pnlfloatRealized PNL
statustigeropen.common.consts.OrderStatusOrder Statusopen in new window
outside_rthboolIf matching outside the regular trading hour is allowed (U.S. market only)
order_timeintTime when the order is placed

Callback Data Example

# Stocks
account:111111
items: [('id', 25224910928347136), ('symbol', '09626'), ('currency', 'HKD'), ('sec_type', 'STK'), ('action', 'BUY'), ('quantity', 20), ('filled', 20), ('order_type', 'LMT'), ('avg_fill_price', 305.0), ('status', <OrderStatus.FILLED: 'Filled'>),  ('realized_pnl', 0.0), ('replace_status', 'NONE'), ('outside_rth', False), ('limit_price', 305.0), ('order_time', 1641349997000), ('identifier', '09626'), ('segment', 'S')]```
# Options
account:111111
items: [('id', 25224890075841536), ('symbol', 'CN'), ('currency', 'USD'), ('sec_type', 'FUT'), ('action', 'BUY'), ('quantity', 1), ('filled', 1), ('order_type', 'LMT'), ('avg_fill_price', 15620.0), ('status', <OrderStatus.FILLED: 'Filled'>), ('realized_pnl', 0.0), ('replace_status', 'NONE'), ('outside_rth', False), ('limit_price', 15638.0), ('order_time', 1641349838000), ('identifier', 'CN2201'), ('segment', 'C')]

Subscribe to Order transaction

Subscribe

PushClient.subscribe_transaction(account=client_config.account)

Unsubscribe

PushClient.unsubscribe_transaction()


Arguments

Argumenttypedescription
accountstrsubscribed account id,if not passed then all relative account will be subscribed

Example

from tigeropen.push.push_client import PushClient
from tigeropen.tiger_open_config import get_client_config
client_config = get_client_config(private_key_path='private key path', tiger_id='your tiger id', account='your account')

protocol, host, port = client_config.socket_host_port
push_client = PushClient(host, port, use_ssl=(protocol == 'ssl'))

# define callback method
def on_transaction_changed(account, items):
    """
    :param account:
    :param items:
    :return:
    items example:
      [('id', 28819544190616576), ('currency', 'USD'), ('sec_type', 'FUT'), ('market', 'SG'), ('symbol', 'CN'),
     ('multiplier', 1.0), ('action', 'BUY'), ('filled_quantity', 1.0), ('filled_price', 12309.0),
     ('order_id', 28819544031364096), ('transact_time', 1668774872538), ('create_time', 1668774872946),
      ('update_time', 1668774872946), ('identifier', 'CN2212'), ('timestamp', 1668774873002), ('segment', 'C')]
    """
    print(account, items)
    
# bind callback method
push_client.transaction_changed = on_transaction_changed
# connect
push_client.connect(client_config.tiger_id, client_config.private_key)

# subscribe
PushClient.subscribe_transaction(account=client_config.account)
# unsubscribe
PushClient.unsubscribe_transaction()

Response
use PushClient.transaction_changed to handle callback,first argument is 'account',second argument is a list。
The fields meaning can refer to get_transactions

NameTypeDescription
segmentStringSecurities Category C: (Commodities Futures), S: (Securities Stocks)
idlongtransaction ID
order_idlongunique order id
symbolStringStock ticker symbol, exmaple: 'AAPL', '00700', 'ES', 'CN'
identifierStringasset identifier. The identifier of stocks is identical to its symbol. Futures contracts will also includes their month code. Example: 'CN2201'
currencyStringCurrency. USD, HKD, etc.
marketStringmarket. US、HK
accountStringAccount
sec_typeStringSecurity type. STK-stocks, FUT-futures
actionStringBUY or SELL
multiplierintmultiplier for options, warrants and CBBC
filled_quantityLongfilled quantity
filled_pricedoublefilled price
filledintfilled quantity
transact_timelongtransaction time
create_timelongcreate time
update_timelongupdate time
timestamplongtimestamp

Callback data example

    items: [('id', 28819544190616576), ('currency', 'USD'), ('sec_type', 'FUT'), ('market', 'SG'), ('symbol', 'CN'),
     ('multiplier', 1.0), ('action', 'BUY'), ('filled_quantity', 1.0), ('filled_price', 12309.0),
     ('order_id', 28819544031364096), ('transact_time', 1668774872538), ('create_time', 1668774872946),
      ('update_time', 1668774872946), ('identifier', 'CN2212'), ('timestamp', 1668774873002), ('segment', 'C')]


Last update: