-
Notifications
You must be signed in to change notification settings - Fork 101
Expand file tree
/
Copy pathmac_bitmap.go
More file actions
278 lines (264 loc) · 14.6 KB
/
Copy pathmac_bitmap.go
File metadata and controls
278 lines (264 loc) · 14.6 KB
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
package gotdx
// MACFieldSelector 表示可写入 MAC 动态字段位图的字段或预设。
type MACFieldSelector interface {
applyMACFieldBitmap(*[20]byte)
}
// MACFieldBit 表示 MAC 动态字段位图中的单个字段位。
type MACFieldBit uint8
const (
MACFieldPreClose MACFieldBit = 0x0
MACFieldOpen MACFieldBit = 0x1
MACFieldHigh MACFieldBit = 0x2
MACFieldLow MACFieldBit = 0x3
MACFieldClose MACFieldBit = 0x4
MACFieldVol MACFieldBit = 0x5
MACFieldVolRatio MACFieldBit = 0x6
MACFieldAmount MACFieldBit = 0x7
MACFieldInsideVolume MACFieldBit = 0x8
MACFieldOutsideVolume MACFieldBit = 0x9
MACFieldTotalShares MACFieldBit = 0xa
MACFieldFloatShares MACFieldBit = 0xb
MACFieldEPS MACFieldBit = 0xc
MACFieldNetAssets MACFieldBit = 0xd
MACFieldSecurityTypePrice MACFieldBit = 0xe
MACFieldTotalMarketCapAb MACFieldBit = 0xf
MACFieldPEDynamic MACFieldBit = 0x10
MACFieldBidPrice MACFieldBit = 0x11
MACFieldAskPrice MACFieldBit = 0x12
MACFieldServerUpdateDate MACFieldBit = 0x13
MACFieldServerUpdateTime MACFieldBit = 0x14
MACFieldLotSizeInfo MACFieldBit = 0x15
MACFieldBoardStrength MACFieldBit = 0x16
MACFieldDividendYield MACFieldBit = 0x17
MACFieldBidVolume MACFieldBit = 0x18
MACFieldAskVolume MACFieldBit = 0x19
MACFieldLastVolume MACFieldBit = 0x1a
MACFieldTurnover MACFieldBit = 0x1b
MACFieldIndustry MACFieldBit = 0x1c
MACFieldIndustryChangeUp MACFieldBit = 0x1d
MACFieldStockTagFlags MACFieldBit = 0x1e
MACFieldDecimalPoint MACFieldBit = 0x1f
MACFieldBuyPriceLimit MACFieldBit = 0x20
MACFieldSellPriceLimit MACFieldBit = 0x21
MACFieldPriceDecimalInfo MACFieldBit = 0x22
MACFieldLotSize MACFieldBit = 0x23
MACFieldPreIOPV MACFieldBit = 0x24
MACFieldSpeedPct MACFieldBit = 0x25
MACFieldAvgPrice MACFieldBit = 0x26
MACFieldIOPV MACFieldBit = 0x27
MACFieldPETTMVolRelated MACFieldBit = 0x28
MACFieldExPricePlaceholder MACFieldBit = 0x29
MACFieldOperatingRevenue MACFieldBit = 0x2a
MACFieldFlagKCB MACFieldBit = 0x2b
MACFieldFlagBJ MACFieldBit = 0x2c
MACFieldCirculatingCapitalZ MACFieldBit = 0x2d
MACFieldAfterHoursVolume MACFieldBit = 0x2e
MACFieldPETTM MACFieldBit = 0x30
MACFieldPEStatic MACFieldBit = 0x31
MACFieldIndexMetric MACFieldBit = 0x37
MACFieldMainNetAmount MACFieldBit = 0x38
MACFieldBidAskRatio MACFieldBit = 0x39
MACFieldNonIndexFlag MACFieldBit = 0x3a
MACFieldChange20DPct MACFieldBit = 0x3b
MACFieldYTDPct MACFieldBit = 0x3c
MACFieldStockClassCode MACFieldBit = 0x3e
MACFieldPercentBase MACFieldBit = 0x3f
MACFieldMTDPct MACFieldBit = 0x40
MACFieldChange1yPct MACFieldBit = 0x41
MACFieldPrevChangePct MACFieldBit = 0x42
MACFieldChange3DPct MACFieldBit = 0x43
MACFieldChange60DPct MACFieldBit = 0x44
MACFieldChange5DPct MACFieldBit = 0x45
MACFieldChange10DPct MACFieldBit = 0x46
MACFieldPrev2ChangePct MACFieldBit = 0x47
MACFieldBid2Price MACFieldBit = 0x48
MACFieldAsk2Price MACFieldBit = 0x49
MACFieldAHCode MACFieldBit = 0x4a
MACFieldUnknownCode MACFieldBit = 0x4b
MACFieldOpenAmount MACFieldBit = 0x57
MACFieldAnnualLimitUpDays MACFieldBit = 0x58
MACFieldActivity MACFieldBit = 0x59
MACFieldDividendYieldRate MACFieldBit = 0x5b
MACFieldConsecutiveUpDays MACFieldBit = 0x5c
MACFieldLimitUpCount MACFieldBit = 0x5d
MACFieldLimitDownCount MACFieldBit = 0x5e
MACFieldIndustrySub MACFieldBit = 0x5f
MACFieldAuctionBuyLimit MACFieldBit = 0x66
MACFieldAuctionSellLimit MACFieldBit = 0x67
MACFieldVolSpeedPct MACFieldBit = 0x68
MACFieldShortTurnoverPct MACFieldBit = 0x69
MACFieldAmount2m MACFieldBit = 0x6a
MACFieldMainNetAmountCopy MACFieldBit = 0x6b
MACFieldMainNetRatio MACFieldBit = 0x6c
MACFieldRetailNetAmount MACFieldBit = 0x6d
MACFieldMainNet5mAmount MACFieldBit = 0x6e
MACFieldMainNet3DAmount MACFieldBit = 0x6f
MACFieldMainNet5DAmount MACFieldBit = 0x70
MACFieldMainNet10DAmount MACFieldBit = 0x71
MACFieldMainBuyNetAmount MACFieldBit = 0x72
MACFieldDDX MACFieldBit = 0x73
MACFieldDDY MACFieldBit = 0x74
MACFieldDDZ MACFieldBit = 0x75
MACFieldDDF MACFieldBit = 0x76
MACFieldStockFlagA MACFieldBit = 0x77
MACFieldStockFlagB MACFieldBit = 0x78
MACFieldAuctionVolRatio MACFieldBit = 0x7a
MACFieldPrevAmount MACFieldBit = 0x7b
MACFieldRecentIndicator MACFieldBit = 0x7d
MACFieldBid3Price MACFieldBit = 0x80
MACFieldBid4Price MACFieldBit = 0x81
MACFieldBid5Price MACFieldBit = 0x82
MACFieldAsk3Price MACFieldBit = 0x83
MACFieldAsk4Price MACFieldBit = 0x84
MACFieldAsk5Price MACFieldBit = 0x85
MACFieldBid3Volume MACFieldBit = 0x86
MACFieldBid4Volume MACFieldBit = 0x87
MACFieldUpCount MACFieldBit = 0x88
MACFieldAsk3Volume MACFieldBit = 0x89
MACFieldAsk4Volume MACFieldBit = 0x8a
MACFieldDownCount MACFieldBit = 0x8b
MACFieldBidAskDiff MACFieldBit = 0x8c
MACFieldChangeUpType MACFieldBit = 0x8d
MACFieldSafetyScore MACFieldBit = 0x8e
MACFieldHighlightCount MACFieldBit = 0x8f
MACFieldChangeAt1000 MACFieldBit = 0x90
MACFieldChangeAt1030 MACFieldBit = 0x91
MACFieldChangeAt1100 MACFieldBit = 0x92
MACFieldChangeAt1130 MACFieldBit = 0x93
MACFieldChangeAt1330 MACFieldBit = 0x94
MACFieldChangeAt1400 MACFieldBit = 0x95
MACFieldChangeAt1430 MACFieldBit = 0x96
MACFieldSomeBitmap MACFieldBit = MACFieldStockTagFlags
MACFieldPreIPOV MACFieldBit = MACFieldPreIOPV
MACFieldIPOV MACFieldBit = MACFieldIOPV
MACFieldGEMStarInfo MACFieldBit = MACFieldAfterHoursVolume
MACFieldDividendYieldPct MACFieldBit = MACFieldDividendYieldRate
MACFieldConstantNegOne MACFieldBit = MACFieldSafetyScore
MACFieldStockRating MACFieldBit = MACFieldHighlightCount
MACFieldBid2Volume MACFieldBit = MACFieldLimitUpCount
MACFieldAsk2Volume MACFieldBit = MACFieldLimitDownCount
MACFieldBid5Volume MACFieldBit = MACFieldUpCount
MACFieldAsk5Volume MACFieldBit = MACFieldDownCount
)
func (bit MACFieldBit) applyMACFieldBitmap(bitmap *[20]byte) {
if int(bit) >= len(bitmap)*8 {
return
}
bitmap[int(bit)/8] |= 1 << uint(int(bit)%8)
}
// MACPresetField 表示一组常用 MAC 动态字段预设。
type MACPresetField uint8
const (
MACPresetNone MACPresetField = 0
MACPresetOHLC MACPresetField = 1
MACPresetBasic MACPresetField = 2
MACPresetQuote MACPresetField = 3
MACPresetVolume MACPresetField = 4
MACPresetFundamental MACPresetField = 5
MACPresetEnhanced MACPresetField = 6
MACPresetAHCode MACPresetField = 7
MACPresetBoardStats MACPresetField = 8
MACPresetHandicap MACPresetField = 9
MACPresetCommon MACPresetField = 10
MACPresetDebug MACPresetField = 11
MACPresetAll MACPresetField = 12
)
func (preset MACPresetField) applyMACFieldBitmap(bitmap *[20]byte) {
switch preset {
case MACPresetNone:
return
case MACPresetOHLC:
for _, bit := range []MACFieldBit{MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetBasic:
for _, bit := range []MACFieldBit{MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose, MACFieldPreClose, MACFieldVol} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetQuote:
for _, bit := range []MACFieldBit{MACFieldBidPrice, MACFieldAskPrice, MACFieldBidVolume, MACFieldAskVolume, MACFieldLastVolume} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetVolume:
for _, bit := range []MACFieldBit{MACFieldVol, MACFieldAmount, MACFieldTurnover, MACFieldVolRatio} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetFundamental:
for _, bit := range []MACFieldBit{MACFieldTotalShares, MACFieldFloatShares, MACFieldEPS, MACFieldNetAssets} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetEnhanced:
for _, bit := range []MACFieldBit{MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose, MACFieldVol, MACFieldFloatShares, MACFieldActivity} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetAHCode:
for _, bit := range []MACFieldBit{MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose, MACFieldVol, MACFieldAHCode, MACFieldLotSize, MACFieldIndustry} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetBoardStats:
for _, bit := range []MACFieldBit{MACFieldLimitUpCount, MACFieldLimitDownCount, MACFieldUpCount, MACFieldDownCount} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetHandicap:
for _, bit := range []MACFieldBit{MACFieldBidPrice, MACFieldBid2Price, MACFieldBid3Price, MACFieldBid4Price, MACFieldBid5Price, MACFieldAskPrice, MACFieldAsk2Price, MACFieldAsk3Price, MACFieldAsk4Price, MACFieldAsk5Price, MACFieldBidVolume, MACFieldLimitUpCount, MACFieldBid3Volume, MACFieldBid4Volume, MACFieldUpCount, MACFieldAskVolume, MACFieldLimitDownCount, MACFieldAsk3Volume, MACFieldAsk4Volume, MACFieldDownCount} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetCommon:
for _, bit := range []MACFieldBit{MACFieldPreClose, MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose, MACFieldVol, MACFieldVolRatio, MACFieldAmount, MACFieldTotalShares, MACFieldFloatShares, MACFieldEPS, MACFieldNetAssets, MACFieldSecurityTypePrice, MACFieldTotalMarketCapAb, MACFieldPEDynamic, MACFieldLotSizeInfo, MACFieldDividendYield, MACFieldLastVolume, MACFieldTurnover, MACFieldStockTagFlags, MACFieldDecimalPoint, MACFieldBuyPriceLimit, MACFieldSellPriceLimit, MACFieldPriceDecimalInfo, MACFieldLotSize, MACFieldPreIOPV, MACFieldSpeedPct, MACFieldFlagKCB, MACFieldPETTM, MACFieldPEStatic, MACFieldMainNetAmount, MACFieldVolSpeedPct, MACFieldShortTurnoverPct, MACFieldCirculatingCapitalZ} {
bit.applyMACFieldBitmap(bitmap)
}
case MACPresetDebug:
for i := range bitmap {
bitmap[i] = 0xff
}
case MACPresetAll:
for _, bit := range []MACFieldBit{MACFieldPreClose, MACFieldOpen, MACFieldHigh, MACFieldLow, MACFieldClose, MACFieldVol, MACFieldVolRatio, MACFieldAmount, MACFieldInsideVolume, MACFieldOutsideVolume, MACFieldTotalShares, MACFieldFloatShares, MACFieldEPS, MACFieldNetAssets, MACFieldSecurityTypePrice, MACFieldTotalMarketCapAb, MACFieldPEDynamic, MACFieldBidPrice, MACFieldAskPrice, MACFieldServerUpdateDate, MACFieldServerUpdateTime, MACFieldLotSizeInfo, MACFieldBoardStrength, MACFieldDividendYield, MACFieldBidVolume, MACFieldAskVolume, MACFieldLastVolume, MACFieldTurnover, MACFieldIndustry, MACFieldIndustryChangeUp, MACFieldStockTagFlags, MACFieldDecimalPoint, MACFieldBuyPriceLimit, MACFieldSellPriceLimit, MACFieldPriceDecimalInfo, MACFieldLotSize, MACFieldPreIOPV, MACFieldSpeedPct, MACFieldAvgPrice, MACFieldIOPV, MACFieldPETTMVolRelated, MACFieldExPricePlaceholder, MACFieldOperatingRevenue, MACFieldFlagKCB, MACFieldFlagBJ, MACFieldCirculatingCapitalZ, MACFieldAfterHoursVolume, MACFieldPETTM, MACFieldPEStatic, MACFieldIndexMetric, MACFieldMainNetAmount, MACFieldBidAskRatio, MACFieldNonIndexFlag, MACFieldChange20DPct, MACFieldYTDPct, MACFieldStockClassCode, MACFieldPercentBase, MACFieldMTDPct, MACFieldChange1yPct, MACFieldPrevChangePct, MACFieldChange3DPct, MACFieldChange60DPct, MACFieldChange5DPct, MACFieldChange10DPct, MACFieldPrev2ChangePct, MACFieldBid2Price, MACFieldAsk2Price, MACFieldAHCode, MACFieldUnknownCode, MACFieldOpenAmount, MACFieldAnnualLimitUpDays, MACFieldActivity, MACFieldDividendYieldRate, MACFieldConsecutiveUpDays, MACFieldLimitUpCount, MACFieldLimitDownCount, MACFieldIndustrySub, MACFieldAuctionBuyLimit, MACFieldAuctionSellLimit, MACFieldVolSpeedPct, MACFieldShortTurnoverPct, MACFieldAmount2m, MACFieldMainNetAmountCopy, MACFieldMainNetRatio, MACFieldRetailNetAmount, MACFieldMainNet5mAmount, MACFieldMainNet3DAmount, MACFieldMainNet5DAmount, MACFieldMainNet10DAmount, MACFieldMainBuyNetAmount, MACFieldDDX, MACFieldDDY, MACFieldDDZ, MACFieldDDF, MACFieldStockFlagA, MACFieldStockFlagB, MACFieldAuctionVolRatio, MACFieldPrevAmount, MACFieldRecentIndicator, MACFieldBid3Price, MACFieldBid4Price, MACFieldBid5Price, MACFieldAsk3Price, MACFieldAsk4Price, MACFieldAsk5Price, MACFieldBid3Volume, MACFieldBid4Volume, MACFieldUpCount, MACFieldAsk3Volume, MACFieldAsk4Volume, MACFieldDownCount, MACFieldBidAskDiff, MACFieldChangeUpType, MACFieldSafetyScore, MACFieldHighlightCount, MACFieldChangeAt1000, MACFieldChangeAt1030, MACFieldChangeAt1100, MACFieldChangeAt1130, MACFieldChangeAt1330, MACFieldChangeAt1400, MACFieldChangeAt1430} {
bit.applyMACFieldBitmap(bitmap)
}
}
}
// MACFieldBitmap 根据字段位和预设组合构造 20 字节 MAC 动态字段位图。
func MACFieldBitmap(selectors ...MACFieldSelector) [20]byte {
var bitmap [20]byte
for _, selector := range selectors {
if selector == nil {
continue
}
selector.applyMACFieldBitmap(&bitmap)
}
return bitmap
}
// DefaultMACBoardMembersQuotesFieldBitmap 返回与当前稳定成分报价接口一致的默认字段位图。
func DefaultMACBoardMembersQuotesFieldBitmap() [20]byte {
return [20]byte{
0xff, 0xfc, 0xe1, 0xcc, 0x3f, 0x08, 0x03, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}
}
// FullMACBoardMembersQuotesFieldBitmap 返回 20 字节全 1 位图,适合实验性全字段请求。
func FullMACBoardMembersQuotesFieldBitmap() [20]byte {
return MACFieldBitmap(MACPresetDebug)
}
// MACBoardMembersQuotesFieldBitmapFromBits 根据 bit 列表组装 20 字节字段位图。
func MACBoardMembersQuotesFieldBitmapFromBits(bits ...int) [20]byte {
var bitmap [20]byte
for _, bit := range bits {
if bit < 0 || bit >= len(bitmap)*8 {
continue
}
bitmap[bit/8] |= 1 << uint(bit%8)
}
return bitmap
}
// DefaultMACSymbolQuotesFieldBitmap 返回 0x122B 常用批量报价位图。
func DefaultMACSymbolQuotesFieldBitmap() [20]byte {
return DefaultMACBoardMembersQuotesFieldBitmap()
}
// FullMACSymbolQuotesFieldBitmap 返回 0x122B 全字段实验位图。
func FullMACSymbolQuotesFieldBitmap() [20]byte {
return FullMACBoardMembersQuotesFieldBitmap()
}
// MACSymbolQuotesFieldBitmapFromBits 根据 bit 列表组装 0x122B/0x122C 通用位图。
func MACSymbolQuotesFieldBitmapFromBits(bits ...int) [20]byte {
return MACBoardMembersQuotesFieldBitmapFromBits(bits...)
}