File size: 4,241 Bytes
e610a2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee37d63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e610a2f
 
 
 
 
 
 
 
 
 
 
 
 
 
ee37d63
e610a2f
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# Institutional Hotspot Rules

Date: 2026-05-21

Hierarchy entry point: `docs/hotspot/README.md`

## Purpose

Translate 120-day Taiwanese institutional-flow behavior into testable hotspot
scanner features. These rules are hypotheses for ranking and validation; they
are not production trading advice.

## Data Contract

Each rule is evaluated as of a completed trading day.

Required input columns:

- `foreign_net`
- `trust_net`
- `dealer_net`
- `institutional_net`
- `close`
- `ma10`
- `ma20`
- `volume`
- `turnover`

Rolling windows:

```text
short flow = 5 trading days
medium flow = 20 trading days
long flow = 60 trading days
institutional memory = 120 trading days
```

Missing flow data should produce neutral features and an explicit skipped or
partial-data reason in validation output.

## Accumulation Rules

### 120-Day Combined Accumulation

```text
flow_120d_accumulation =
  institutional_net_120d > 0
  and institutional_net_120d_percentile >= 70
```

Interpretation:

- Long-window institutional demand exists.
- Use as a rank boost only when liquidity coverage is acceptable.

### 20-Day Acceleration

```text
flow_20d_acceleration =
  institutional_net_20d > 0
  and institutional_net_20d / 20 > institutional_net_120d / 120
```

Interpretation:

- Recent buying is stronger than the long-window pace.
- Use with price/volume confirmation to avoid stale accumulation.

## Institution-Specific Support Rules

### Investment Trust 10MA Support

```text
trust_10ma_support =
  trust_net_5d > 0
  and trust_net_20d > 0
  and close >= ma10
```

Risk variant:

```text
trust_10ma_break =
  trust_net_20d > 0
  and close < ma10
```

Interpretation:

- Trust buying above 10MA is supportive.
- A 10MA break after trust buying is a hotspot penalty, not a short signal by
  itself.

### Foreign 20MA Support

```text
foreign_20ma_support =
  foreign_net_20d > 0
  and close >= ma20
```

Risk variant:

```text
foreign_20ma_break =
  foreign_net_20d > 0
  and close < ma20
```

Interpretation:

- Foreign accumulation above 20MA is supportive.
- A 20MA break after foreign accumulation should lower rank confidence.

### Dealer Confirmation

```text
dealer_confirmation =
  dealer_net_5d > 0
  and (foreign_net_5d > 0 or trust_net_5d > 0)
```

Interpretation:

- Dealer buying confirms another institutional buyer.
- Dealer-only buying should be weaker than foreign or trust confirmation until
  validation proves otherwise.

## Divergence And Risk Rules

### Flow Divergence Risk

```text
flow_divergence_risk =
  close_20d_return > 0
  and institutional_net_20d <= 0
```

### Distribution Risk

```text
flow_distribution_risk =
  close >= close_60d_high * 0.95
  and institutional_net_20d < institutional_net_60d / 3
```

Interpretation:

- Price near highs with fading institutional support is a rank penalty.
- Keep this separate from bearish prediction labels.

### Volume-Spike Fade Breakdown

```text
volume_spike_fade_breakdown =
  volume[t-3] >= 2.0 * average_volume[t-23:t-4]
  and volume[t-2] <= 0.75 * volume[t-3]
  and high[t-2] <= high[t-3]
  and close[t-1] < open[t-1]
  and close[t] < open[t]
  and close[t] < ma20[t]
```

Interpretation:

- The earlier volume spike did not attract follow-through buying.
- Two black candles plus MA20 break means the hotspot may have shifted away.
- Use as a hotspot rank penalty and display risk flag, not a hard sell rule.

## Hotspot Score Composition

Initial experimental score:

```text
hotspot_score =
  volume_turnover_rank
  + flow_120d_accumulation
  + flow_20d_acceleration
  + trust_10ma_support
  + foreign_20ma_support
  + dealer_confirmation
  - flow_divergence_risk
  - flow_distribution_risk
  - volume_spike_fade_breakdown
```

The exact weights must be learned or grid-searched in the harness. Do not
hard-code permanent production weights without validation.

## Validation Requirements

- Use the no-lookahead split from `docs/full_market_hotspot_harness.md`.
- Evaluate top 20, top 30, and top 50 hotspot lists.
- Compare against the current local hot-stock ranking baseline.
- Record per-rule ablations so a single noisy flow rule can be removed without
  discarding the whole scanner.
- Promotion requires the gates in `docs/full_market_hotspot_harness.md`.