- 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)
107 lines
3.2 KiB
Markdown
107 lines
3.2 KiB
Markdown
# Intraday Margin Trading Automation
|
||
|
||
Complete automated system for HK/US intraday margin trading with LongPort SDK.
|
||
|
||
## Architecture
|
||
|
||
```
|
||
8:30 Beijing → hk_intraday_scanner.py → TOP3 candidates → QQ
|
||
9:30 Beijing → hk_intraday_monitor.py → entry signals → auto order → QQ
|
||
15:45 Beijing → hk_intraday_close.py → close all system positions → QQ
|
||
|
||
21:00 Beijing → us_intraday_scanner.py → TOP3 candidates → QQ
|
||
21:30 Beijing → us_intraday_monitor.py → entry signals → auto order → QQ
|
||
3:45 Beijing → us_intraday_close.py → close all system positions → QQ
|
||
```
|
||
|
||
## Scoring Formula
|
||
|
||
```
|
||
score = min(ADR% / 4, 1) × 40 + min(VolumeRatio / 2, 1) × 30 + min(TurnoverRate / 2, 1) × 30
|
||
```
|
||
|
||
- ADR%: Average Daily Range (近5日高低价差百分比)
|
||
- VolumeRatio: LongPort CalcIndex.VolumeRatio
|
||
- TurnoverRate: LongPort CalcIndex.TurnoverRate
|
||
|
||
Score > 60 = excellent, 40-60 = good, < 40 = not ideal
|
||
|
||
## Entry Signals (5-min SMA)
|
||
|
||
**做多条件:**
|
||
- current > SMA5 > SMA10
|
||
- current > previous close (上涨趋势)
|
||
|
||
**做空条件:**
|
||
- current < SMA5 < SMA10
|
||
- current < previous close (下跌趋势)
|
||
|
||
## Position Sizing
|
||
|
||
```python
|
||
buying_power = account.buy_power # HKD or USD
|
||
position_size = buying_power * 0.25 # 25% per trade
|
||
shares = int(position_size / current_price / 100) * 100 # HK: round to 100
|
||
shares = int(position_size / current_price) # US: round to 1
|
||
```
|
||
|
||
## Stop Loss / Take Profit
|
||
|
||
```python
|
||
atr = sum(max(h-l, abs(h-pc), abs(l-pc)) for ...) / n # 5-min ATR
|
||
|
||
# 做多
|
||
stop_loss = max(min(lows[-5:]), entry - atr * 2)
|
||
take_profit = entry + atr * 3
|
||
|
||
# 做空
|
||
stop_loss = min(max(highs[-5:]), entry + atr * 2)
|
||
take_profit = entry - atr * 3
|
||
```
|
||
|
||
盈亏比 = 3:2 = 1.5:1
|
||
|
||
## Position Tracking (CRITICAL)
|
||
|
||
Entries tracked in `~/.hermes/trading/{hk,us}_intraday_entries.json`:
|
||
|
||
```json
|
||
{
|
||
"3690.HK": {
|
||
"side": "buy",
|
||
"entry_price": 66.10,
|
||
"stop_loss": 65.85,
|
||
"take_profit": 66.77,
|
||
"shares": 100,
|
||
"order_id": "3686893095794171904",
|
||
"time": "2026-06-25T09:45:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
## Safety Rules
|
||
|
||
1. **ONLY CLOSE SYSTEM-OPENED POSITIONS** — verify `order_id` exists before closing
|
||
2. **NEVER touch user's manual positions** (UNH, RGTI, 3416.HK, etc.)
|
||
3. **Day trade only** — close all at 15:45 HK / 3:45 US Beijing
|
||
4. **Single trade max** — 25% of buying power
|
||
5. **Stop loss mandatory** — 2× ATR from entry
|
||
|
||
## Cron Jobs
|
||
|
||
| Job | Schedule (EDT) | Schedule (Beijing) | Script |
|
||
|-----|----------------|-------------------|--------|
|
||
| HK Scanner | `30 20 * * 1-5` | 8:30 | hk_intraday_scanner.py |
|
||
| HK Monitor | `*/15 9-15 * * 1-5` | 21:15-3:45 | hk_intraday_monitor.py |
|
||
| HK Close | `45 15 * * 1-5` | 3:45 | hk_intraday_close.py |
|
||
| US Scanner | `0 9 * * 1-5` | 21:00 | us_intraday_scanner.py |
|
||
| US Monitor | `*/15 21-23,0-3 * * 1-5` | 9:00-15:45 | us_intraday_monitor.py |
|
||
| US Close | `45 3 * * 2-6` | 3:45 | us_intraday_close.py |
|
||
|
||
## Pitfalls
|
||
|
||
- **Period enum**: Use `Period.Min_5` not `Period.Min5` (underscore required)
|
||
- **buy_power**: `account.buy_power` not `account.available_cash`
|
||
- **SecurityQuote**: Use `q.last_done`, `q.prev_close`, `q.high`, `q.low`, `q.open` — no `change_rate` attribute
|
||
- **Entry file path**: `~/.hermes/trading/` not `~/.hermes/skills/...`
|