Files
Hermes-Skills/longbridge-cli/references/execute-code-pattern.py
T
mike 657dc41c46 Initial commit: Trading skills collection
- OKX交易自动化 (okx-auto-position, okx-crypto, okx-exchange)
- 交易信号处理 (signal-confirmation-templates, trading-signal-aggregator)
- 量化因子挖掘 (quant-factor-mining)
- 长桥集成 (longbridge-cli, longbridge-python-sdk)
- 六合彩分析 (lottery-hk)
- 股息投资 (dividend-investing, dividend-scanner)
- 日内交易 (intraday-trading)
- 同花顺 (tonghuashun)
2026-07-05 02:39:41 -04:00

45 lines
1.8 KiB
Python

# LongPort Python SDK via execute_code — reliable pattern
# Use this instead of terminal + source ~/.bashrc for Python SDK calls.
# The execute_code sandbox inherits LONGPORT_* env vars, so Config.from_env() works.
#
# Pitfalls:
# - execute_code sandbox does NOT inherit bashrc; LONGPORT_* must already be in
# the host env (they are, from ~/.bashrc on this system).
# - If Config.from_env() throws "missing environment variable", the sandbox
# couldn't find the var. Fall back to reading from bashrc via subprocess.
# - Decimal fields (market_cap, last_done, etc.) need float() conversion.
# - candlesticks() returns list sorted oldest-first; [-1] is latest.
# - adjust_type is required for candlesticks: use openapi.AdjustType.NoAdjust
# for raw data or openapi.AdjustType.ForwardAdjust for adjusted.
import os
# Safety net: if LONGPORT_* not in sandbox env, load from bashrc
if not os.environ.get("LONGPORT_APP_KEY"):
import subprocess
result = subprocess.run(
["bash", "-c", "source ~/.bashrc && env"],
capture_output=True, text=True
)
for line in result.stdout.split("\n"):
if "=" in line and "LONGPORT_" in line:
key, val = line.split("=", 1)
os.environ[key] = val
from longport import openapi
config = openapi.Config.from_env()
ctx = openapi.QuoteContext(config=config)
# --- Quote ---
resp = ctx.quote(["AAPL.US"])
q = resp[0]
print(f"Latest: {float(q.last_done)}, Open: {float(q.open)}, High: {float(q.high)}, Low: {float(q.low)}")
# --- Candlesticks (daily, 30 bars) ---
candles = ctx.candlesticks("AAPL.US", openapi.Period.Day, 30, openapi.AdjustType.NoAdjust)
first_close = float(candles[0].close)
last_close = float(candles[-1].close)
change_pct = (last_close - first_close) / first_close * 100
print(f"30d change: {first_close} -> {last_close} ({change_pct:+.2f}%)")