Skip to content

Commit c903930

Browse files
committed
[Mod] 添加Tickoverview
1 parent b019c71 commit c903930

File tree

1 file changed

+65
-1
lines changed

1 file changed

+65
-1
lines changed

vnpy_postgresql/postgresql_database.py

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from vnpy.trader.database import (
1919
BaseDatabase,
2020
BarOverview,
21+
TickOverview,
2122
DB_TZ,
2223
convert_tz
2324
)
@@ -128,14 +129,30 @@ class Meta:
128129
indexes = ((("symbol", "exchange", "interval"), True),)
129130

130131

132+
class DbTickOverview(Model):
133+
"""Tick汇总数据表映射对象"""
134+
135+
id: AutoField = AutoField()
136+
137+
symbol: str = CharField()
138+
exchange: str = CharField()
139+
count: int = IntegerField()
140+
start: datetime = DateTimeField()
141+
end: datetime = DateTimeField()
142+
143+
class Meta:
144+
database: PeeweePostgresqlDatabase = db
145+
indexes: tuple = ((("symbol", "exchange"), True),)
146+
147+
131148
class PostgresqlDatabase(BaseDatabase):
132149
"""PostgreSQL数据库接口"""
133150

134151
def __init__(self) -> None:
135152
""""""
136153
self.db = db
137154
self.db.connect()
138-
self.db.create_tables([DbBarData, DbTickData, DbBarOverview])
155+
self.db.create_tables([DbBarData, DbTickData, DbBarOverview, DbTickOverview])
139156

140157
def save_bar_data(self, bars: List[BarData]) -> bool:
141158
"""保存K线数据"""
@@ -203,6 +220,11 @@ def save_bar_data(self, bars: List[BarData]) -> bool:
203220

204221
def save_tick_data(self, ticks: List[TickData]) -> bool:
205222
"""保存TICK数据"""
223+
# 读取主键参数
224+
tick: TickData = ticks[0]
225+
symbol: str = tick.symbol
226+
exchange: Exchange = tick.exchange
227+
206228
# 将TickData数据转换为字典,并调整时区
207229
data = []
208230

@@ -227,6 +249,31 @@ def save_tick_data(self, ticks: List[TickData]) -> bool:
227249
),
228250
).execute()
229251

252+
# 更新Tick汇总数据
253+
overview: DbTickOverview = DbTickOverview.get_or_none(
254+
DbTickOverview.symbol == symbol,
255+
DbTickOverview.exchange == exchange.value,
256+
)
257+
258+
if not overview:
259+
overview: DbTickOverview = DbTickOverview()
260+
overview.symbol = symbol
261+
overview.exchange = exchange.value
262+
overview.start = ticks[0].datetime
263+
overview.end = ticks[-1].datetime
264+
overview.count = len(ticks)
265+
else:
266+
overview.start = min(ticks[0].datetime, overview.start)
267+
overview.end = max(ticks[-1].datetime, overview.end)
268+
269+
s: ModelSelect = DbTickData.select().where(
270+
(DbTickData.symbol == symbol)
271+
& (DbTickData.exchange == exchange.value)
272+
)
273+
overview.count = s.count()
274+
275+
overview.save()
276+
230277
return True
231278

232279
def load_bar_data(
@@ -364,6 +411,14 @@ def delete_tick_data(
364411
& (DbTickData.exchange == exchange.value)
365412
)
366413
count = d.execute()
414+
415+
# 删除Tick汇总数据
416+
d2: ModelDelete = DbTickOverview.delete().where(
417+
(DbTickOverview.symbol == symbol)
418+
& (DbTickOverview.exchange == exchange.value)
419+
)
420+
d2.execute()
421+
367422
return count
368423

369424
def get_bar_overview(self) -> List[BarOverview]:
@@ -382,6 +437,15 @@ def get_bar_overview(self) -> List[BarOverview]:
382437
overviews.append(overview)
383438
return overviews
384439

440+
def get_tick_overview(self) -> List[TickOverview]:
441+
"""查询数据库中的Tick汇总信息"""
442+
s: ModelSelect = DbTickOverview.select()
443+
overviews: list = []
444+
for overview in s:
445+
overview.exchange = Exchange(overview.exchange)
446+
overviews.append(overview)
447+
return overviews
448+
385449
def init_bar_overview(self) -> None:
386450
"""初始化数据库中的K线汇总信息"""
387451
s: ModelSelect = (

0 commit comments

Comments
 (0)