Other Questions

About 2 min

Q1: How to use your paper trading account?

When you finish the registration process on the API developer info page, a paper trading account will be generated. You can also check the status of your paper trading account in Tiger trade APP 『Trade』tab.

When you are placing orders, use your paper account number as your account id.

Q2: What are the difference between sandbox, paper, live account/environments?

Demo and live trading needs to be done on production environment, while sandbox is an independent developing environment,and it is used for development only under certain senarios. A different set of Tigerid and RSA keys are required if you want to use the sandbox environment

Using the paper account is recommended over sandbox.

Q3: Questions or Comments?

If you have questions regarding use OpenAPI or SDK, please join our official QQ chat group. Group ID: 441334668 Please provide us with the following information when you are reporting an issue

  • Details of the Request, including the name of the interface and the parameters passed in
  • Error message

Q4: invalid signature

{"code":40013,"data":"","message":"invalid signature","timestamp":1527732508206}

Reason: You have probably altered the openapi public key (tiger_public_key) by mistake. Alse check for your private key too see if it has the correct value.

Q5: certificate verify failed

File "....../tigeropen/tiger_open_client.py", line ..., in execute
File "....../tigeropen/common/util/web_utils.py", line ..., in do_post
raise RequestException('[' + THREAD_LOCAL.uuid + ']post connect failed. ' + str(e))
tigeropen.common.exceptions.RequestException: post connect failed. 
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)

response sign varify faild. Varification Failed

Reason: A possible cause is that the openapi public key has been lost or altered. A solution is to use online platform to re-generate the RSA key pairs. Format needs to be set as pkcs#1

Q6: load_pkcs1_der error

rsa/key.py:492 _load_pkcs1_der
ValueError: Unable to read this file, version 136 != 0

python sdk only supports pkcs#1. PKCS#8 is not supported. Make sure to have the RSA key in the right format

Q7: common param error(public key error)

Reason: a possible cause is that you have filled in a wrong account id. Please check if the value of TigerOpenClientConfig.account is correnct

Q8: common param error(public key error)

{"code":1000,"message":"common param error(public key error)", "timestamp":1574386825800}

Reason: tiger_id is incorrect, or you do not have a valid public key on file. Other possible reason is that "is_sandbox" is set as True

Q9: permission denied(Current user and device do not have permissions in the US market)

Reason: You do not have API quote permission(Note that Quote permissions for app will not grant you the same prevailage for API). Please go to the Tiger Trade app to buy API Market Data. If you already have an active API quote permission, use QuoteClient.grab_quote_permission() and see if the problem still presists

Q10:user token error(user token cannot be empty)

{code=2400, message=user token error(user token cannot be empty), timestamp=1676447219319}

Reason:Hong Kong license needs to specify the token path

# Use the props_path parameter to specify the token path, such as '/Users/xxx/xxx/', if not specified, take the current path
client_config = TigerOpenClientConfig(props_path='.')

Q11: protobuf Version Issue

Our long links use the proto3 version protocol, if you install a lower version of the protobuf library, you will encounter problems, please make sure to use the new version

Timestamp Conversion

The default time format in Open API is UNIX timestamp. Refer to the following example for how to convert a timestamp into human readable time in your timezone:

from datetime import datetime
from pytz import timezone

time_stamp = 1546635600
tz = timezone('Asia/Chongqing')

datetime.fromtimestamp(time_stamp, tz)
datetime.datetime(2019, 1, 5, 5, 0, tzinfo=<DstTzInfo 'Asia/Chongqing' CST+8:00:00 STD>)

MarketStatus Object

Use get_market_status as an example. This API returns a MarketStatus object。

a_list = [MarketStatus({'market': 'US', 'status': 'PreMarket', 'open_time': datetime.datetime(2019, 1, 7, 9, 30, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>)})]
us_market_status = a_list[0]
Last update: