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)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# 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}%)")
|
||||
Reference in New Issue
Block a user