- 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)
129 lines
4.5 KiB
Markdown
129 lines
4.5 KiB
Markdown
# VWAP + Multi-Indicator T-Trading Panel
|
|
|
|
做T (T-trading) = buying/selling around an existing position to lower cost basis via intraday swings.
|
|
Best for high-volatility stocks with 10%+ daily ranges (e.g. quantum stocks, biotech, meme stocks).
|
|
|
|
## Indicator Stack for T-Trading
|
|
|
|
| Indicator | What it tells you | T-trading signal |
|
|
|-----------|-------------------|------------------|
|
|
| **VWAP** | Intraday volume-weighted avg price (the "fair value" today) | Price > VWAP = sell zone; < VWAP = buy zone |
|
|
| **RSI(14)** | Overbought/oversold momentum | >70 = overbought (sell); <30 = oversold (buy) |
|
|
| **Bollinger(20,2)** | Volatility channel | Touch upper band = sell; touch lower band = buy |
|
|
| **ATR(14)** | Average True Range — how much it swings per period | Higher ATR = better for T-trading |
|
|
| **Volume ratio** | Current vol vs average | >1.5x = confirming move; <0.5x = weak/noisy |
|
|
|
|
## VWAP Calculation (from 30-min candles)
|
|
|
|
```python
|
|
def calc_vwap(candles):
|
|
"""Volume-Weighted Average Price"""
|
|
cum_pv, cum_vol = 0, 0
|
|
for c in candles:
|
|
typical = (float(c.high) + float(c.low) + float(c.close)) / 3
|
|
vol = float(c.volume)
|
|
cum_pv += typical * vol
|
|
cum_vol += vol
|
|
return cum_pv / cum_vol if cum_vol else 0
|
|
```
|
|
|
|
⚠️ VWAP resets each trading day. Use intraday candles (5min, 30min), NOT daily candles.
|
|
|
|
## RSI Calculation
|
|
|
|
```python
|
|
def calc_rsi(candles, period=14):
|
|
closes = [float(c.close) for c in candles]
|
|
if len(closes) < period + 1:
|
|
return None
|
|
gains, losses = [], []
|
|
for i in range(1, len(closes)):
|
|
diff = closes[i] - closes[i-1]
|
|
gains.append(max(diff, 0))
|
|
losses.append(max(-diff, 0))
|
|
avg_gain = sum(gains[-period:]) / period
|
|
avg_loss = sum(losses[-period:]) / period
|
|
if avg_loss == 0:
|
|
return 100
|
|
rs = avg_gain / avg_loss
|
|
return 100 - (100 / (1 + rs))
|
|
```
|
|
|
|
## Bollinger Bands
|
|
|
|
```python
|
|
def calc_bollinger(candles, period=20, std_mult=2):
|
|
closes = [float(c.close) for c in candles]
|
|
data = closes[-period:]
|
|
mid = sum(data) / period
|
|
std = (sum((x - mid)**2 for x in data) / period) ** 0.5
|
|
return mid + std_mult * std, mid, mid - std_mult * std # upper, mid, lower
|
|
```
|
|
|
|
## Composite Scoring System
|
|
|
|
Combine all indicators into a single score for clear buy/sell signals:
|
|
|
|
```python
|
|
score = 0 # Range: -100 (strong buy) to +100 (strong sell)
|
|
|
|
# VWAP
|
|
if price > vwap: score += 20 # above VWAP = sell bias
|
|
else: score -= 20 # below VWAP = buy bias
|
|
|
|
# RSI (30-min timeframe preferred for T-trading)
|
|
if rsi_30m > 70: score += 25 # overbought
|
|
elif rsi_30m < 30: score -= 25 # oversold
|
|
|
|
# Bollinger position
|
|
boll_pct = (price - boll_low) / (boll_up - boll_low)
|
|
if boll_pct > 0.8: score += 20 # near upper band
|
|
elif boll_pct < 0.2: score -= 20 # near lower band
|
|
|
|
# Volume confirmation
|
|
if vol_ratio > 1.5: score += 10 # volume confirms move
|
|
|
|
# Decision
|
|
if score > 30: action = "SELL (reverse T)"
|
|
elif score < -30: action = "BUY (forward T)"
|
|
else: action = "WAIT"
|
|
```
|
|
|
|
## T-Trading Execution Modes
|
|
|
|
### Manual (Alerts Only)
|
|
- Cron monitors price every 10-15 min during market hours
|
|
- Notifies user when price hits key levels
|
|
- User manually places order
|
|
|
|
### Semi-Automatic (Recommended for retail)
|
|
- Cron monitors price + calculates indicator score
|
|
- Auto-submits limit orders when score hits threshold
|
|
- Notifies user of every order placed
|
|
- Auto-cancels stale orders when price moves away
|
|
|
|
### Script Architecture
|
|
```
|
|
~/.hermes/scripts/
|
|
├── rgti_t_panel.py # Manual: run on-demand for indicator dashboard
|
|
├── rgti_alert.py # Alerts only: cron job, silent when no signal
|
|
└── rgti_auto_monitor.py # Semi-auto: cron + auto-place orders + notify
|
|
```
|
|
|
|
## Cron Setup (US Market Hours)
|
|
```
|
|
# Every 10 min during 9:00-15:59 ET (Mon-Fri)
|
|
*/10 9-15 * * 1-5
|
|
|
|
# Every 15 min (less aggressive)
|
|
*/15 9-15 * * 1-5
|
|
```
|
|
|
|
## Key Pitfalls
|
|
- **VWAP needs intraday candles**: Daily VWAP is meaningless. Use 5min or 30min candles.
|
|
- **RSI on 5min is noisy**: Use 30min RSI for T-trading decisions, 5min only for entry timing.
|
|
- **Don't T-trade low-volume stocks**: Need volume >1M daily for reliable fills.
|
|
- **GTC + OutsideRTH for auto-orders**: Use `GoodTilCanceled` + `OutsideRTH.AnyTime` so orders work pre-market, regular hours, and after-hours.
|
|
- **Position availability**: `available_quantity` (settled, sellable) ≠ `quantity` (total incl unsettled). Check before selling.
|
|
- **5-min cooldown between orders**: Prevent rapid-fire order spam; state file tracks last action time.
|