You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
7.7 KiB
144 lines
7.7 KiB
#!/usr/bin/env python3
|
|
"""追加期货分表模型到 models.py"""
|
|
|
|
append_content = '''
|
|
|
|
|
|
# ============================================
|
|
# 期货分表结构 (新增)
|
|
# ============================================
|
|
|
|
class FuturesKLine1DBase(Base):
|
|
"""期货日线K线 - 基础表"""
|
|
__tablename__ = "futures_klines_1d_base"
|
|
__table_args__ = (
|
|
Index("idx_futures_1d_base_symbol_ts", "symbol_id", "ts"),
|
|
Index("idx_futures_1d_base_symbol_date", "symbol_id", "trade_date"),
|
|
)
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
settlement = Column(Numeric(18, 4), nullable=True, comment="结算价")
|
|
pre_settlement = Column(Numeric(18, 4), nullable=True, comment="昨结算价")
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
class FuturesKLine1DQuote(Base):
|
|
"""期货日线K线 - 行情指标表"""
|
|
__tablename__ = "futures_klines_1d_quote"
|
|
__table_args__ = (
|
|
Index("idx_futures_1d_quote_symbol_date", "symbol_id", "trade_date"),
|
|
)
|
|
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
trade_date = Column(String(10), nullable=False, index=True, comment="交易日 YYYY-MM-DD")
|
|
change_pct = Column(Numeric(8, 4), nullable=True, comment="涨跌幅%")
|
|
change_5d_pct = Column(Numeric(8, 4), nullable=True, comment="5日涨跌幅%")
|
|
change_10d_pct = Column(Numeric(8, 4), nullable=True, comment="10日涨跌幅%")
|
|
change_20d_pct = Column(Numeric(8, 4), nullable=True, comment="20日涨跌幅%")
|
|
ma5 = Column(Numeric(18, 4), nullable=True, comment="5日均线")
|
|
ma10 = Column(Numeric(18, 4), nullable=True, comment="10日均线")
|
|
ma20 = Column(Numeric(18, 4), nullable=True, comment="20日均线")
|
|
ma30 = Column(Numeric(18, 4), nullable=True, comment="30日均线")
|
|
ma60 = Column(Numeric(18, 4), nullable=True, comment="60日均线")
|
|
macd_dif = Column(Numeric(18, 6), nullable=True, comment="MACD DIF")
|
|
macd_dea = Column(Numeric(18, 6), nullable=True, comment="MACD DEA")
|
|
macd_bar = Column(Numeric(18, 6), nullable=True, comment="MACD BAR")
|
|
oi_change = Column(BigInteger, nullable=True, comment="持仓量变化")
|
|
oi_change_pct = Column(Numeric(8, 4), nullable=True, comment="持仓量变化%")
|
|
amplitude = Column(Numeric(8, 4), nullable=True, comment="振幅%")
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
class FuturesKLine1MBase(Base):
|
|
"""期货1分钟K线 - 基础表"""
|
|
__tablename__ = "futures_klines_1m_base"
|
|
__table_args__ = (Index("idx_futures_1m_base_symbol_ts", "symbol_id", "ts"),)
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
class FuturesKLine5MBase(Base):
|
|
"""期货5分钟K线 - 基础表"""
|
|
__tablename__ = "futures_klines_5m_base"
|
|
__table_args__ = (Index("idx_futures_5m_base_symbol_ts", "symbol_id", "ts"),)
|
|
id = Column(BigInteger, primary_key=True, autoincrement=True)
|
|
symbol_id = Column(String(20), nullable=False, index=True, comment="合约代码")
|
|
ts = Column(DateTime, nullable=False, comment="时间戳")
|
|
trade_date = Column(String(10), nullable=False, comment="交易日")
|
|
open = Column(Numeric(18, 4), nullable=False, comment="开盘价")
|
|
high = Column(Numeric(18, 4), nullable=False, comment="最高价")
|
|
low = Column(Numeric(18, 4), nullable=False, comment="最低价")
|
|
close = Column(Numeric(18, 4), nullable=False, comment="收盘价")
|
|
volume = Column(BigInteger, nullable=False, comment="成交量")
|
|
amount = Column(Numeric(20, 4), nullable=False, comment="成交额")
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
created_at = Column(DateTime, default=datetime.now, comment="创建时间")
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
class FuturesRealTimeQuote(Base):
|
|
"""期货实时行情快照"""
|
|
__tablename__ = "futures_realtime_quotes"
|
|
symbol_id = Column(String(20), primary_key=True, comment="合约代码")
|
|
update_time = Column(DateTime, nullable=False, comment="更新时间")
|
|
last_price = Column(Numeric(18, 4), nullable=True, comment="最新价")
|
|
open = Column(Numeric(18, 4), nullable=True, comment="开盘价")
|
|
high = Column(Numeric(18, 4), nullable=True, comment="最高价")
|
|
low = Column(Numeric(18, 4), nullable=True, comment="最低价")
|
|
pre_close = Column(Numeric(18, 4), nullable=True, comment="昨收")
|
|
pre_settlement = Column(Numeric(18, 4), nullable=True, comment="昨结算")
|
|
settlement = Column(Numeric(18, 4), nullable=True, comment="结算价")
|
|
volume = Column(BigInteger, nullable=True, comment="成交量")
|
|
amount = Column(Numeric(20, 4), nullable=True, comment="成交额")
|
|
open_interest = Column(BigInteger, nullable=True, comment="持仓量")
|
|
bid1 = Column(Numeric(18, 4), nullable=True, comment="买一价")
|
|
bid1_volume = Column(BigInteger, nullable=True, comment="买一量")
|
|
ask1 = Column(Numeric(18, 4), nullable=True, comment="卖一价")
|
|
ask1_volume = Column(BigInteger, nullable=True, comment="卖一量")
|
|
limit_up = Column(Numeric(18, 4), nullable=True, comment="涨停价")
|
|
limit_down = Column(Numeric(18, 4), nullable=True, comment="跌停价")
|
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment="更新时间")
|
|
|
|
|
|
# 向后兼容别名
|
|
FuturesKLine1M = FuturesKLine1MBase
|
|
FuturesKLine5M = FuturesKLine5MBase
|
|
FuturesKLine1D = FuturesKLine1DBase
|
|
'''
|
|
|
|
# 读取原始文件
|
|
with open('app/repositories/models.py', 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# 检查是否已存在
|
|
if 'class FuturesKLine1DBase' not in content:
|
|
with open('app/repositories/models.py', 'w', encoding='utf-8') as f:
|
|
f.write(content + append_content)
|
|
print('Futures split tables appended successfully!')
|
|
else:
|
|
print('Futures split tables already exist.')
|