A Python library for Longbridge Open API
Project description
Longbridge OpenAPI SDK for Python
SDK 提供了 HTTP / WebSocket Clients,方便地使用 Longbridge OpenAPI。
Longbridge OpenAPI SDK 基于 Rust 提供标准实现,通过 FFI 提供给 Python 使用。
目前,我们支持如下系统架构:
- Linux x86_64 & aarch64
- Mac x86_64 & aarch64
- Windows x86_64 & i686
Installation
$ pip3 install longbridge protobuf
Get started
下面我们以获取资产为例,演示一下如何使用 SDK。
开始需求
- 在 Longbridge 开户
- 完成 Python3 环境安装,并安装 Pip
- 从 Longbridge OpenAPI 官网获取
APP_KEY
,APP_SECRET
,ACCESS_TOKEN
等信息。
获取 APP_KEY, APP_SECRET, ACCESS_TOKEN
访问 Longbridge OpenAPI 网站,登录后,进入 “个人中心”。
在页面上会给出 “应用凭证” 凭证信息,我们拿到以后设置环境变量,便于后面开发使用方便。
$ export LONGBRIDGE_APP_KEY=从页面上获取到的 App Key
$ export LONGBRIDGE_APP_SECRET=从页面上获取到的 App Secret
$ export LONGBRIDGE_ACCESS_TOKEN=从页面上获取到的 Access Token
API Host
- HTTP API - https://openapi.lbkrs.com
- WebSocket - wss://openapi-quote.longbridge.global
NOTE: 为了便于演示,我们的例子里面均通过
LONGBRIDGE_APP_KEY
、LONGBRIDGE_APP_SECRET
、LONGBRIDGE_ACCESS_TOKEN
这样的环境变量来获取配置信息。如您在 Windows 环境不方便使用环境变量。可根据个人需要,修改 Python 代码。
调用 HTTP 请求
创建一个 main.py
贴入下面的代码:
import os
import json
from longbridge.http import Auth, Config, HttpClient
auth = Auth(os.getenv("LONGBRIDGE_APP_KEY"), os.getenv("LONGBRIDGE_APP_SECRET"), access_token=os.getenv("LONGBRIDGE_ACCESS_TOKEN"))
http = HttpClient(auth, Config(base_url="https://openapi.lbkrs.com"))
resp = http.get("/v1/asset/account")
print(json.dumps(resp.data, indent=2))
运行 main.py
后,会输出如下:
python3 main.py
{
"list": [
{
"cashInfos": [
{
"available_cash": "32966.49",
"currency": "HKD",
"frozen_cash": "0.00",
"redemption_cash": "0",
"settling_cash": "0.00",
"withdraw_cash": "32966.49"
},
{
"available_cash": "-6582.61",
"currency": "USD",
"frozen_cash": "5.76",
"redemption_cash": "0",
"settling_cash": "0.00",
"withdraw_cash": "-6582.61"
}
],
"currency": "HKD",
"margin_call": "3105871.08",
"max_finance_amount": "1093000",
"remaining_finance_amount": "702.348304552590266876",
"risk_level": "3",
"total_cash": "-2829.14"
}
]
}
订阅实时行情
创建一个 subscribe_quote.py
并写入下面的代码:
import os
import json
from longbridge.http import Auth, Config, HttpClient
from longbridge.ws import ReadyState, WsCallback, WsClient
from longbridge.quote.quote_pb2 import ( Command, PushQuote, SubscribeRequest, SubscriptionResponse, SubType)
class MyWsCallback(WsCallback):
def on_push(self, command: int, body: bytes):
if command == Command.PushQuoteData:
quote = PushQuote()
quote.ParseFromString(body)
print(f"Received -> {quote}")
else:
print(f"Received unknown -> {command}")
def on_state(self, state: ReadyState):
print(f"Received state -> {state}")
auth = Auth(os.getenv("LONGBRIDGE_APP_KEY"), os.getenv("LONGBRIDGE_APP_SECRET"), access_token=os.getenv("LONGBRIDGE_ACCESS_TOKEN"))
http = HttpClient(auth, Config(base_url="https://openapi.lbkrs.com"))
ws = WsClient("wss://openapi-quote.longbridge.global", http, MyWsCallback())
req = SubscribeRequest(symbol=["700.HK"], sub_type=[SubType.QUOTE], is_first_push=True)
result = ws.send_request(Command.Subscribe, req.SerializeToString())
resp = SubscriptionResponse()
resp.ParseFromString(result)
print(json.dumps(resp.sub_list))
做一次下单动作
下面我们做一次 委托下单 动作,我们假设要以 50 HKD 买入 700.HK
的数量为 100
。
NOTE: 为了防止测试买入成功,这里演示给了一个较低的价格,避免成交。OpenAPI 操作均等同与线上交易,请谨慎操作,开发调试注意参数细节。
创建一个 submit_order.py
并写入下面的代码:
import os
import json
from longbridge.http import Auth, Config, HttpClient
auth = Auth(os.getenv("LONGBRIDGE_APP_KEY"), os.getenv("LONGBRIDGE_APP_SECRET"), access_token=os.getenv("LONGBRIDGE_ACCESS_TOKEN"))
http = HttpClient(auth, Config(base_url="https://openapi.lbkrs.com"))
payload = {
"side": "Buy",
"symbol": "700.HK",
"order_type": "LO",
"submitted_price": "50",
"submitted_quantity": "200",
"time_in_force": "Day",
"remark": "Hello from Python SDK"
}
try:
resp = http.post("/v1/trade/order", payload=payload)
print(json.dumps(resp.data, indent=2))
except Exception as e:
print(f"Submit order error\ncode: {e.code}\nmessage: {e.message}")
执行 python3 submit_order.py
后,会输出如下:
{
"order_id": "707530744027713536"
}
加入下单失败,你可能会看到这样的错误信息:
Submit order error
code: 602035
message: 委托价不符合最小价格变动单位
获取当日订单
import os
import json
from longbridge.http import Auth, Config, HttpClient
auth = Auth(os.getenv("LONGBRIDGE_APP_KEY"), os.getenv("LONGBRIDGE_APP_SECRET"), access_token=os.getenv("LONGBRIDGE_ACCESS_TOKEN"))
http = HttpClient(auth, Config(base_url="https://openapi.lbkrs.com"))
resp = http.get("/v1/trade/order/today")
print(json.dumps(resp.data, indent=2))
如果前面你有提交订单,你应该会看到这样的结果:
{
"orders": [
{
"currency": "HKD",
"executed_price": "0",
"executed_quantity": "0",
"expire_date": "2022-05-10",
"last_done": "",
"limit_offset": "",
"msg": "",
"order_id": "707530744027713536",
"order_type": "LO",
"outside_rth": "UnknownOutsideRth",
"price": "50",
"quantity": "200",
"side": "Buy",
"status": "CanceledStatus",
"stock_name": "\u817e\u8baf\u63a7\u80a1",
"submitted_at": "1651917274",
"symbol": "700.HK",
"tag": "Normal",
"time_in_force": "Day",
"trailing_amount": "",
"trailing_percent": "",
"trigger_at": "0",
"trigger_price": "",
"trigger_status": "NOT_USED",
"updated_at": "1651917561"
},
{
// ...
}
]
}
上面例子已经完整演示了如何使用 SDK 访问 OpenAPI 的接口,更多其他接口请详细阅读 Longbridge OpenAPI 文档,根据不同的接口使用。
更多例子
https://github.com/longbridgeapp/openapi-python/tree/main/examples
Python SDK API 文档
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for longbridge-0.1.2-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02b33076318bbc326ef162062baf3a5836236768f6732a4d1feab60fcf82f0cf |
|
MD5 | 742d4bfd5e1d3cce5f239d4faaa7dd4f |
|
BLAKE2b-256 | 7f22dbe6de3f478e0499ae57f170942cfb8e11d7b2039eb119b1b36b5737c74d |
Hashes for longbridge-0.1.2-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b02c85cb73926412a480e9bcffc41f7dd97c65c5264d383aad1d4588defcd18e |
|
MD5 | 55d634c19c099d9a7be402b9b59d4510 |
|
BLAKE2b-256 | 96747ce7825f667d87cfef2a4e70840753564b1b0abacc555774acedd14b1f2a |
Hashes for longbridge-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd79ee73262f43d463e8e6a4e31f33b0ece9a8bc5d5de5cc6e3b4a5657420306 |
|
MD5 | f41f86604f37b4334e1ee51054073e68 |
|
BLAKE2b-256 | f8bfad994c8af61588c297e1ce7111b8d0994461d1209b6e7be7b5d29bfffaa5 |
Hashes for longbridge-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9e121179a55d633082a94dbe41f3ebef36fcd7f9c30061671c9bf5a46043b88 |
|
MD5 | ccf2bfff3b7403230f5839c30ab0c7c0 |
|
BLAKE2b-256 | 3334027a7ef5980680200cff08a9b7e74d545807e32512c70c5b024b21d2ac75 |
Hashes for longbridge-0.1.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00c950c89447f874e5e316710429e864ca925273e2e1398a190f94b4fe90eac8 |
|
MD5 | 3a733909bb37a2b6f44f80de07294373 |
|
BLAKE2b-256 | fce9c5405b693aaddf055830bb4beeac8630b6e8aa349ec48ccfc67daa42b6ed |
Hashes for longbridge-0.1.2-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31c14b1148e3c7719df345ed2e74f001229409bdde10e13f14560d901d0b8b7c |
|
MD5 | 311bd460ac1e8595f352f0b8336d4bc9 |
|
BLAKE2b-256 | 28f932fdb5769f828e9a717b5a86fb272859ff9fae2ce2fe6e541c4d69d6c6c2 |
Hashes for longbridge-0.1.2-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1f241bcba1173c8476e2689d225d65c576a1b5449e0c6b1738098190585d571 |
|
MD5 | c4891f865c432c541ae1c03793f097f4 |
|
BLAKE2b-256 | d77dfdc352d984adc1a76406bc8c8dd525b3965c58002b5eda66b82ca6e39713 |
Hashes for longbridge-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a36a15f6ec534fb343a5f732f41588e29c82273607ee80ef775fe5e4e0ee76d |
|
MD5 | 2e213b42228078aa52e4f1d342a7c571 |
|
BLAKE2b-256 | a7b303376fc505e50a12dd95f4389a6f32f4765036e521233334edf7046455d6 |
Hashes for longbridge-0.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 318d64828ef336bc2215730cf130f290f6606e0617e8adf6ea266f2883ff8d4c |
|
MD5 | be0b01825129fefc931694c0525715b5 |
|
BLAKE2b-256 | e48a9ef230df05da9b81b138399e39b079cbe80d8e8aef1dd3a62af91a888b36 |
Hashes for longbridge-0.1.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73fced30d69329eec9a21bcbc6f10af90ecb38540de7f9d98a1f86eac6e65d11 |
|
MD5 | e20a86dd82820dff01c1bb99e2d0ce83 |
|
BLAKE2b-256 | 16ec5291392acfc2d843bb42c2a97981daaa72385f249ae57aa9d13e17e5589b |
Hashes for longbridge-0.1.2-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd615729c519d4fb7d9e46ad33f2e82730fc828d7c5e7f065aec6365b01b4e5e |
|
MD5 | 33fb10208cca9742494bc2e30106f064 |
|
BLAKE2b-256 | e263737681a7f0e278ff61f9968df6d47f8682905f3e1d99815531b021f03128 |
Hashes for longbridge-0.1.2-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 098cd7492992f056408a6fb72ba0bdfab5ac2d4f2fcd140b0beff54ea5a7fc28 |
|
MD5 | 76b35afb040023c89fd252c66f957787 |
|
BLAKE2b-256 | 4b25085d0f9dcea623c5cefc0b7380d0c35d9411b69d09c0ea48b2d6a79e04be |
Hashes for longbridge-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7c9c2a00d9e66ed46a01f99f32e5ae20c4e3c04092cab3d25142bdd6481dd11 |
|
MD5 | ae1064037e4395ab12aaf71deb8b1333 |
|
BLAKE2b-256 | 44bd337786956824937d3200474d730de517de837e8b2e77e9f619dd01406ca0 |
Hashes for longbridge-0.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5abc31edddcc0393ab2d9d8451e2f5e97d64e2f6bf2f07c1a86c206e9a1f854b |
|
MD5 | b9e6e7fe58e2fa58a34b6259490f31e7 |
|
BLAKE2b-256 | 90f279cca3877ca5e343e0db01d92d331c8ab2edcd72f25cec3df7760472c175 |
Hashes for longbridge-0.1.2-cp38-cp38-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a130ca1023e172b0db2bb2e5ca468376362c6dfa349690c2adc2e16ff717a07a |
|
MD5 | c1a382824f49f19cf5887e4cb497ad3a |
|
BLAKE2b-256 | 2b449e59fbeb2c7a6b0116937280dd6b9cb48542c3642ee49efb76308748fa9c |
Hashes for longbridge-0.1.2-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd4d673078a030027112fdd324b6f3b922edd63e817ed38da9b6e22e9e8300f2 |
|
MD5 | f80ed3e27a7afe3b2115a5a941e48ae2 |
|
BLAKE2b-256 | 8f16a4699f648227207f4cfab5f11c637ee8ae9e94e2b91eca1c120fa96c023b |
Hashes for longbridge-0.1.2-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88664437650c5cc7ccba64c2b21e6e0149229c95b37c794724762c66e5847d24 |
|
MD5 | 81a684c21b69ed3f14bda271fc3dc0b4 |
|
BLAKE2b-256 | 9b3c6367fff3167270db4a5fcf716cfe55427ed87b347a66c1996ef776cb0531 |
Hashes for longbridge-0.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aeb750abfeed66810f4cfce98482f1371c37529443e495deaa5c7158c08a6fd8 |
|
MD5 | ecae90405f1d49173ffe532971065f58 |
|
BLAKE2b-256 | 8ef613bc7bcdab864a01b6ae30597b4b4820d76afaa97e857358bd2f01cbbc61 |
Hashes for longbridge-0.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f4c61db2f9db31d4a6b8cd384f75846f3fa5d33e5d043b6d68b563d81c71b17 |
|
MD5 | 6fc6da1baa07c5defd7c512f1508dc0b |
|
BLAKE2b-256 | e514185fa89de19234ed42f9bbe680c56f6a22f1a27e6deb6a41f4eb2d2a344e |
Hashes for longbridge-0.1.2-cp37-cp37m-macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 222da0209f7c774d356530bfecf60732f9ca0ba4b647926cc8faf5cd96d4e787 |
|
MD5 | 897b57133671986496e414181e448a6f |
|
BLAKE2b-256 | 67e663061843ca8c241be4792bc51bb76938a7ade41e5d89ee18674a17a5b0fc |