其他
Q1: 如何使用模拟盘?
登记开发者信息后,会自动生成一个模拟盘账户, 可以进入 Tiger trade APP 『交易』tab 下, 点击顶部区域切换查看实盘与模拟盘。
模拟盘的下单方法与实盘相同, 在place order 时 Account 参数传入模拟盘 Account, 而不是实盘 Account。
Q2: sandbox、 模拟、 实盘都是什么,有什么关系?
模拟与实盘交易都需要使用真实环境进行。
sandbox 是一套独立的开发环境,用于某些特殊情景下的开发调试。 需要使用独立的私钥与Tigerid。
推荐用户优先使用模拟账户对程序进行调试。
Q3: 有其他问题如何问题反馈?
使用上的疑问, 请添加官方QQ群咨询, 群号码:441334668。 收到错误返回后,为了尽快定位问题,给您反馈,请向提供以下信息(请优先使用chrome或者firefox等浏览器)。
- 请求信息,包括接口名称和请求参数
- 返回的错误信息
常见报错
Q4: 报错如下
{"code":40013,"data":"","message":"invalid signature","timestamp":1527732508206}
错误原因: 可能是误修改了sdk内置的openapi公钥(tiger_public_key),或者是私钥配置不正确,请仔细检查配置
Q5: 报错如下
File "....../tigeropen/tiger_open_client.py", line ..., in execute
self.__config.charset)
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. Verification Failed
错误原因: 可能是误修改了sdk内置的openapi公钥, 或者生成的密钥有问题, 可以尝试用密钥生成网站生成密钥对,版本选pkcs#1
也可以尝试通过该地址:「在线密钥生成」来生成RSA密钥,需要注意的是,密钥位数为:1024,python sdk密钥格式:PKCS#1,java sdk密钥格式:PKCS#8,输出格式:PEM/Base64,密码为空。
临时解决方法(不安全,关闭签名验证):
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
Q6: 报错如下
rsa/key.py:492 _load_pkcs1_der
ValueError: Unable to read this file, version 136 != 0
python sdk 仅支持 pkcs#1版本的私钥, 不支持 pkcs#8, 请确认生成密钥是为pkcs#1版本
Q7: 报错如下
account is not authrized to the api user
错误原因: 一般是账户填写有误,请检查TigerOpenClientConfig.account是否正确
Q8: 报错如下
{"code":1000,"message":"common param error(public key error)", "timestamp":1574386825800}
错误原因: 一般是 tiger_id 有误或者公钥未上传, 或者 is_sandbox设置成了True
Q9: 报错如下
permission denied(Current user and device do not have permissions in the US market)
错误原因: 一般是没有API行情权限(请注意, API行情权限不同于app行情权限), 请到app购买. 如果已经购买, 请调用 QuoteClient.grab_quote_permission() 抢占行情权限.
Q10:报错如下
{code=2400, message=user token error(user token cannot be empty), timestamp=1676447219319}
错误原因:香港牌照需指定token路径
# 用 props_path 参数指定token路径,如 '/Users/xxx/xxx/', 如不指定则取当前路径
client_config = TigerOpenClientConfig(props_path='.')
Q11: protobuf 协议版本问题 我们的长链接使用 proto3 版本协议, 如果安装的 protobuf 库版本较低,将会遇到问题,请确保使用新版本
Q12: windows系统报错如下
OSError: [Error 22] Invalid argument: 'D:\\Profram files\\OpenSSL........'
或
request sign failed. Short octet stream on tag decoding
错误原因: windows 路径错误. 字符串前加 r, 如 client_config.private_key = read_private_key(r'C:\Users\Foo\Desktop\Project\rsa_private_key.pem')
Q13: local issuer certificate
报错如下:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
可尝试安装 pip install certifi
, 参考:https://stackoverflow.com/questions/51925384/unable-to-get-local-issuer-certificate-when-using-requests
然后在代码开始处(比如配置client_config的地方), 添加如下代码:
import certifi
from urllib3 import PoolManager
from tigeropen.common.util import web_utils
web_utils.http_pool = PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
Q14: 使用 conda install tigeropen
报错
PackagesNotFoundError: The following packages are not available from current channels
原因: 不是所有可通过pip安装的包都可以直接用conda安装,需要配置conda的channel, 参考: https://stackoverflow.com/questions/48493505/packagesnotfounderror-the-following-packages-are-not-available-from-current-cha https://github.com/conda/conda/issues/13060
时间戳的转换
API 中返回的默认为毫秒时间戳, 参考以下方法转成本地时间:
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 等对象的使用方法
以 get_market_status 举例。 这个 API 返回了一个 MarketStatus 的列表。
a_list = [MarketStatus({'market': 'US', 'status': '盘前交易', '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]
us_market_status.market
'US'