1、股票交易及量化投资回测分析系统的数据库设计-3

在阅读文章前,请读者朋友认真阅读免责声明:

         免责声明:本人所发表的所有文章、资源、知识等内容(包括免费、付费等)旨在向广大读者介绍我的职业生涯中积累的一些经验、知识等内容,受个人水平所限这些知识、经验、代码等不一定是最佳实践,也可能存在遗漏、错误,请广大读者自行甄别(甄别方式:自我学习、百度搜索、请教高手等等)。本人所提供的一切文章、资源、知识等内容仅供读者参考,如需使用本人提供的文章、资源、知识等内容进行生产活动、项目开发、编写代码、生产环境部署等,请读者慎重考虑,本人对由此可能造成的生产事故、经济损失等不承担任何责任。

        上一节介绍了银行相关表,本节将介绍证券相关表。

         思考一下,证券相关表需要存储哪些信息呢?主要有股票投资的总体信息以及持仓明细信息,因此证券相关的表应该设计如下表:

       1、 股票投资总体信息表

             本表主要存储:日期、券商代码、资金账号、总投入金额、总持股数量、账户盈亏、可用资金、可取资金、冻结资金、总成本、总股票市值、总资产等信息。

             本表数据需要进行日切,每天收市后,会对该表中的相应字段的值进行汇总计算,在交易日中,本表的数据也会实时进行计算,因为总投入金额、总持股数量、总股票市值等,会随着用户的操作,以及用户持有股票的实时价格进行变动,最终当交易日收市时,会根据当日收盘价固定下来。本表中的各字段值的计算方法应该遵循一定的公式来计算。

             例如:账户盈亏 = 总资产-总投入

                        总股票市值 = 所有持有股票市值之和 (动态变化的)

            本表中的数据应该每一个交易日一条数据,每个交易日收市之后程序需要执行日切操作,来计算当日收盘后的数据。历史数据可以用于数据分析等,例如盈亏分析等。

           2、股票持仓汇总表

                 记录用户的持仓情况,用户当前持有了哪些股票,平均成本、市值、盈亏等信息。主要包括如下字段:

            日期、资金账号、券商代码、股东账号、股票编码、股票名称、持有数量、可用数量、冻结数量、平均持有天数、总市值、总成本、现价、平均成本、持仓盈亏

            从本表可以知道用户持有股票的总体情况,持有哪几只股票,每只股票的市值、成本、盈亏情况,以及可用数量、冻结数量等信息,这些信息也是实时变化的,在交易日会根据股票现价的变动实时计算,该表信息经过汇总计算后会更新投资总体情况表中的相关字段。

         3、股票持仓详细记录

             本表记录的用户在交易日当天买卖股票的详细情况,买入了哪几只股票,买入的数量、时间、成本等信息。该表的信息也是动态的。本表的数据也需要进行日切操作,每天都有一份数据去记录当日持有股票的情况。

            主要包括以下字段:日期、开始持仓日期、股票持仓总表的主键、股票买入信息表主键、支持有天数、股票代码、股票数量、买入价格、成本价格、持有成本、股票现价、市值、持仓盈亏

       4、 股票买入信息表

            本表主要记录了买入股票的详细信息,本表为静态表。主要包括以下字段:

交割明细表主键、交易时间、交易流水号、资金号、股东账号、股票代码、交易类型、成交编号、成交数量、已被分摊比例、剩余可分摊股数、成交均价、成交金额、发生金额、佣金、交易规费、印花税、过户费、交易费用合计等

         5、 股票卖出信息表

              本表记录股票卖出的详细记录,数据可以来自证券软件导出的交割单,也可来自程序回测时自动触发的卖单,也可来自通过swing程序手工输入的卖单。

             本表主要包括以下字段:

交割明细表主键、交易时间、资金账号、股东账号、流水号、股票编码、交易类型、成交数量、成交均价、成交金额、发生金额、佣金、交易规费、印花税、过户费、卖的总费用、实际应阔、盈亏分摊标志、总持有成本、买卖费用总计、每股卖出价格

             6、股票买卖关联表

             该表会将卖单和买单建立关联,用来核算单笔卖单的盈亏,一笔卖单可能对应多笔买单。买单和卖单的关联可以采用不同的算法来计算该笔卖单的盈亏,比如可以选择最小成本优先的算法,即该卖单优先选择低成本价的买单进行对应。不同的算法对应着不同的盈亏,程序的设计应该支持选择不同的算法。

              主要包含字段如下:

               卖单主键、买单主键、买入日期、买入数量、买入分摊比例、买入分摊数量、持有天数、资金时间价值、买入价格、买入实际价格、买入分摊成交金额、买入分摊金额、买入时分摊佣金、买入时分摊印花税、买入时分摊过户费、买入时分摊费用合计、卖出股票数量、成交均价、卖分摊的比例、卖出时该买单分摊的各项费用、该买单的总费用、持有成本、成本价、实际盈亏

            7、 交割单明细表

          记录交割详细信息的表,该数据可以来自证券系统中导出的交割单信息,也可以由程序回测时生成。

           主要包括以下字段:交易发生时间、流水号、资金账号信息、股东信息、流水号、股东编码、成交类型、成交编号、成交均价、成交金额、发生金额、佣金、交易规费、印花税、过户费、费用合计、股票余额、资金余额等信息。

            系统进行回测时,系统会先初始化相关表信息,然后按顺序读取交割单明细表信息,模拟进行买卖股票。这种方式适用于从证券软件中导出交割明细,然后在导入交割单明细表,开启回测。

          也可以在系统初始化后,由程序开始回测,这时系统会加载定制的策略,按照策略从指定的日期开始进行回测操作,比如回测一年,最后将回测结果和沪深300等基准数据进行比对,看是否能够跑赢市场。

           交割单明细表一般会设计成两张表,一张表相对独立,仅仅用于保存自己的实盘数据,也就是从证券软件中导入的交割单数据。

           另一张交割单明细表会和上边提到的股票相关表构成一个完整的体系。回测时的数据就在这一套表内完成。而相对独立的交割单这个表主要是提供一个回溯机制,能够将您的实盘交易数据导入到我们的系统中。为后续通过程序进行实盘操作提供一个起点。

              8、资金流水表

                    本表主要记录资金的流水记录,支持的业务包括:银行转证券、证券转银行、利息归本、红利入账。

                    主要字段包括:交割单明细主键、发生时间、资金账号、券商代码、发生金额、交易类型等。

               从银行入金到证券账户时,该表会增加一条记录,同时也会更新股票总体信息表的相关字段,设计到一些逻辑的计算等。当进行证券转银行操作时,股票总体信息表的资金将会减少,本表也会增加一条明细记录。

              9、红利表

               本表记录了股票发放红利的信息,当股票发放红利时,会在该表中记录一条明细,同时也会更新股票总体信息表的相关字段。

              主要字段包括:交割单明细主键、发生时间、资金账号、券商代码、发生金额、交易类型等

             10、委托交易表、交易所交易信息表

              回测时,程序发出的买入、卖出交易指令,首先会发到该表,同时也发到交易所交易信息表,这样就模拟了一次下单,然后由交易所模拟程序根据逻辑决定交易所交易信息表中的某条交易数据是否应该成交,或者根据回测程序发出的撤单指令由交易所模拟程序来撤销改单。这样就通过程序模拟了一次完整的交易。交易所交易信息表中的数据有以下几种状态:待处理、已成交、已撤单。交易所模拟程序会将结果返回给回测程序。

          回测程序下单->订单数据保存至委托交易表->将订单数据发送至模拟交易服务器(交易所端)->交易所模拟程序回传结果给回测程序。

          委托交易表、交易所交易信息表一般应包含以下字段:委托时间、委托撤销时间、券商代码、资金账号、股东账号、股票编码、股票数量、交易方向、委托数量、委托状态、成交时间、成交数量、成交金额、成交均价等

         以上为证券相关表的设计了,根据以上的设计,可以完整的模拟整套的股票交易行为,比如:充值银行卡、银行卡转证券、证券转银行卡、买入股票、卖出股票,对当前账户的总体情况查询,买入卖出明细查询、盈亏分析等。后续的回测程序也是对这些表的操作。再根据情况编写交易策略,已插件等方式嵌入到回测程序中,就可以进行回测了,根据回测结果的分析,可以检验交易策略是否成功,通过添加策略、回测,根据回测结果进行参数调整,这样我们就得到了一个完整的回测平台。

          证券相关表设计完成后,下一步可以考虑交易数据存储相关的表设计了,比如:日行情数据表、股票信息表、股票分类信息表、财务数据等等,考虑到数据量巨大,我们应该要精心设计,我会逐步发布这些内容的,敬请期待。

         关于证券相关表的更详细的内容,我近期整理后会发布为付费文章,如果有感兴趣的读者可以给我留言,我会尽快发布。

        免责声明:本人所发表的所有文章、资源、知识等内容(包括免费、付费等)旨在向广大读者介绍我的职业生涯中积累的一些经验、知识等内容,受个人水平所限这些知识、经验、代码等不一定是最佳实践,也可能存在遗漏、错误,请广大读者自行甄别(甄别方式:自我学习、百度搜索、请教高手等等)。本人所提供的一切文章、资源、知识等内容仅供读者参考,如需使用本人提供的文章、资源、知识等内容进行生产活动、项目开发、编写代码、生产环境部署等,请读者慎重考虑,本人对由此可能造成的生产事故、经济损失等不承担任何责任。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
股票量化交易中非常重要的一环,它可以通过历史数据对交易策略进行模拟和评估,从而评估策略的可行性和优劣性。在Python中,有很多开源的量化交易框架可以用来进行股票,如zipline、backtrader等。 下面是一个使用zipline框架进行简单交易策略的例子: 1. 安装zipline ```python pip install zipline ``` 2. 编写交易策略代码 ```python from zipline.api import order_target_percent, record, symbol def initialize(context): context.asset = symbol('AAPL') def handle_data(context, data): # 获取过去10天的收盘价 prices = data.history(context.asset, 'price', 10, '1d') # 计算平均价 mean_price = prices.mean() # 如果当前价格低于平均价,则买入 if data.current(context.asset, 'price') < mean_price: # 调整持仓比例至100% order_target_percent(context.asset, 1.0) # 否则卖出 else: # 调整持仓比例至0% order_target_percent(context.asset, 0.0) # 记录当前持仓比例 record(position=context.portfolio.positions[context.asset].amount) ``` 3. 运行 ```python from zipline import run_algorithm from zipline.api import symbol from datetime import datetime start = datetime(2016, 1, 1) end = datetime(2017, 1, 1) result = run_algorithm( start=start, end=end, initialize=initialize, capital_base=10000, handle_data=handle_data, bundle='quandl' ) ``` 在上述代码中,我们定义了一个简单的交易策略,即如果当前价格低于过去10天的平均价,则买入,否则卖出。然后我们使用zipline框架进行,设定开始和结束时间、初始资本、数据来源等参数,最终得到结果。 需要注意的是,这只是一个简单的例子,实际的交易策略可能会更加复杂,需要考虑更多的因素。另外,在进行股票时,也需要注意避免过度拟合或过度优化,以免出现虚高的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会C、Java多种开发语言的金哥

您的鼓励是我创作的动力源泉!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值