- 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)
3.9 KiB
3.9 KiB
Semi-Automatic T-Trading Setup
Architecture
┌─────────────────────────────────────────────┐
│ Cron (every 10 min, market hours only) │
│ ┌─────────────────────────────────────┐ │
│ │ rgti_auto_monitor.py │ │
│ │ 1. Get quote (Python SDK) │ │
│ │ 2. Check position availability │ │
│ │ 3. Check pending orders │ │
│ │ 4. If price in zone + no orders: │ │
│ │ → Auto place limit order │ │
│ │ 5. If price moved away: │ │
│ │ → Auto cancel stale order │ │
│ │ 6. Print message → WeChat delivery │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
Required SDK Calls
import os
from longport import openapi
# Load env
bashrc = open(os.path.expanduser("~/.bashrc")).read()
for line in bashrc.splitlines():
if line.startswith("export LONGPORT_") or line.startswith("export LONGBRIDGE_"):
parts = line.replace("export ", "").split("=", 1)
if len(parts) == 2:
os.environ[parts[0]] = parts[1].strip('"').strip("'")
os.environ["LONGBRIDGE_TRADE_ENABLED"] = "true"
cfg = openapi.Config.from_env()
trade_ctx = openapi.TradeContext(config=cfg)
quote_ctx = openapi.QuoteContext(config=cfg)
# Quote
resp = quote_ctx.quote(["SYMBOL.US"])
price = float(resp[0].last_done)
# Position (check available_quantity for sellable qty)
pos = trade_ctx.stock_positions()
for ch in pos.channels:
for p in ch.positions:
avail = int(p.available_quantity)
total = int(p.quantity)
# Pending orders
orders = trade_ctx.today_orders()
for o in orders:
status = str(o.status) # "NotReported", "PendingStatus", etc.
# Place order (GTC + outside RTH = works pre/regular/post market)
resp = trade_ctx.submit_order(
symbol="RGTI.US",
order_type=openapi.OrderType.LO,
side=openapi.OrderSide.Sell,
submitted_quantity=15,
time_in_force=openapi.TimeInForceType.GoodTilCanceled,
submitted_price=21.00,
outside_rth=openapi.OutsideRTH.AnyTime,
)
# Cancel
trade_ctx.cancel_order(order_id)
State File Pattern
Track active orders and cooldowns to prevent spam:
STATE_FILE = "~/.hermes/scripts/rgti_t_state.json"
def load_state():
try:
return json.load(open(STATE_FILE))
except:
return {"active_orders": [], "last_action_time": None, "trades_today": 0}
# Cooldown: 5 min between actions
last_t = state.get("last_action_time")
if last_t:
diff = (now - datetime.fromisoformat(last_t)).total_seconds()
if diff < 300:
sys.exit(0) # silent exit
Cron Job Setup
# Via Hermes cronjob tool:
cronjob(action="create",
name="RGTI半自动做T挂单",
no_agent=True, # Script-only, no LLM
schedule="*/10 9-15 * * 1-5", # Every 10 min, 9-15 ET, Mon-Fri
deliver="weixin",
script="rgti_auto_monitor.py") # Relative to ~/.hermes/scripts/
Key Design Decisions
- No agent (no_agent=True): Script runs directly, prints output → delivered as message. No LLM tokens wasted.
- Empty stdout = silent: If nothing to report, print nothing → no message sent.
- GTC + AnyTime: Orders persist across days and work in pre/post market.
- 5-min cooldown: Prevents rapid-fire order spam on volatile stocks.
- Auto-cancel stale orders: If price moves >$1.50 from order price, cancel and re-evaluate.
- State file for order tracking: Prevents duplicate orders and tracks today's trade count.