mirror of
https://ghfast.top/https://github.com/aeroxw/easy-tdx.git
synced 2026-09-12 15:44:15 +08:00
Merge pull request #13 from shom/main
修复easy-tdx tick SH 600519 --days 5
This commit is contained in:
@@ -12,6 +12,10 @@ from ...commands.base import BaseCommand
|
|||||||
from ..models import MacMultiTickChart, MacMultiTickDay, MacTick
|
from ..models import MacMultiTickChart, MacMultiTickDay, MacTick
|
||||||
|
|
||||||
_MSG_ID = 0x123E
|
_MSG_ID = 0x123E
|
||||||
|
_TICK_OFFSET = 71
|
||||||
|
_TICK_SIZE = struct.calcsize("<HffHH")
|
||||||
|
_TAIL_FMT = "<44sBHf5x2I5ffIf12s2fI"
|
||||||
|
_TAIL_SIZE = struct.calcsize(_TAIL_FMT)
|
||||||
|
|
||||||
|
|
||||||
class TickChartsCmd(BaseCommand[MacMultiTickChart]):
|
class TickChartsCmd(BaseCommand[MacMultiTickChart]):
|
||||||
@@ -61,15 +65,28 @@ class TickChartsCmd(BaseCommand[MacMultiTickChart]):
|
|||||||
# count(2) + send_last(1) + page_size(2) + total(2)
|
# count(2) + send_last(1) + page_size(2) + total(2)
|
||||||
(count, send_last, page_size, total) = unpack_from("<HBHH", body, 64, "tick_charts header2")
|
(count, send_last, page_size, total) = unpack_from("<HBHH", body, 64, "tick_charts header2")
|
||||||
|
|
||||||
|
max_ticks = max(0, (len(body) - _TICK_OFFSET - _TAIL_SIZE) // _TICK_SIZE)
|
||||||
|
actual_total = min(total, max_ticks)
|
||||||
|
if actual_total >= count * page_size:
|
||||||
|
tick_counts = [page_size] * count
|
||||||
|
else:
|
||||||
|
# start_date=None returns the latest partial trading day first,
|
||||||
|
# followed by complete historical days.
|
||||||
|
complete_days = min(count - 1, actual_total // page_size)
|
||||||
|
first_day_count = actual_total - complete_days * page_size
|
||||||
|
empty_days = count - complete_days - 1
|
||||||
|
tick_counts = [first_day_count] + [page_size] * complete_days + [0] * empty_days
|
||||||
|
|
||||||
days: list[MacMultiTickDay] = []
|
days: list[MacMultiTickDay] = []
|
||||||
for d in range(count):
|
tick_index = 0
|
||||||
|
for d, tick_count in enumerate(tick_counts):
|
||||||
ticks: list[MacTick] = []
|
ticks: list[MacTick] = []
|
||||||
for t in range(page_size):
|
for t in range(tick_count):
|
||||||
index = d * page_size + t
|
offset = _TICK_OFFSET + tick_index * _TICK_SIZE
|
||||||
offset = 71 + index * 14
|
|
||||||
(minutes, price, avg, vol, tick_reserved) = unpack_from(
|
(minutes, price, avg, vol, tick_reserved) = unpack_from(
|
||||||
"<HffHH", body, offset, f"tick_charts tick[{d}][{t}]"
|
"<HffHH", body, offset, f"tick_charts tick[{d}][{t}]"
|
||||||
)
|
)
|
||||||
|
tick_index += 1
|
||||||
ticks.append(
|
ticks.append(
|
||||||
MacTick(
|
MacTick(
|
||||||
# 多日分时里 minutes 在个别服务器/数据状态下可能 ≥ 1440
|
# 多日分时里 minutes 在个别服务器/数据状态下可能 ≥ 1440
|
||||||
@@ -93,7 +110,7 @@ class TickChartsCmd(BaseCommand[MacMultiTickChart]):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 尾部元数据
|
# 尾部元数据
|
||||||
tail_offset = 71 + count * page_size * 14
|
tail_offset = _TICK_OFFSET + actual_total * _TICK_SIZE
|
||||||
(
|
(
|
||||||
name_raw,
|
name_raw,
|
||||||
_decimal,
|
_decimal,
|
||||||
@@ -113,7 +130,7 @@ class TickChartsCmd(BaseCommand[MacMultiTickChart]):
|
|||||||
turnover,
|
turnover,
|
||||||
avg,
|
avg,
|
||||||
_industry,
|
_industry,
|
||||||
) = unpack_from("<44sBHf5x2I5ffIf12s2fI", body, tail_offset, "tick_charts tail")
|
) = unpack_from(_TAIL_FMT, body, tail_offset, "tick_charts tail")
|
||||||
|
|
||||||
return MacMultiTickChart(
|
return MacMultiTickChart(
|
||||||
market=market,
|
market=market,
|
||||||
|
|||||||
Reference in New Issue
Block a user