最近工作需要,编写了一个程序,实现了使用python读取交割单信息,自动计算每日账户资产。可以为账户收益率计算节省大量时间。
交割单为csv文件。可以将交易APP中的历史交割单数据导出后进行格式修改使用。
程序计算量比较小,计算结果直接显示即可。
实现原理:
- 将交割单数据从后向前一条一条读取。
- 交割日期大于指定日期的不显示,直接跳过。
- 交割日期小于等于指定日期的记录,第一条记录中的资金余额为账户资金余额。
- 每次新碰到一个证券代码,对应的证券余额是持仓证券的数量,如果不是新的证券代码,说明前面已经显示过了,这样重复证券代码的记录直接忽略。
- 证券数量大于0的记录,显示证券代码,证券名称和证券数量。证券数量为零的证券说明已经清仓了,不需要显示。
- 根据证券代码和指定日期,查询到对应的收盘价格。根据持仓数量和收盘价格可以算出证券市值。
- 持仓市值加上资金余额即账户收盘资产。
注意几点:
- 交割单中的证券余额和资金余额要准确。如果有误,需要手工调制。尤其是有红股和分红数据时。
- 根据证券代码和指定日期或者收盘价格有限制,只能自动获取A股上市股票的交易日收盘价格。如果指定日期是非交易日,baostock无法获得非交易日的收盘价格。这时候需要更换为交易日的日期。如果是基金,可以将基金对应日期的净值单独存在文件中,这样程序读取文件中的收盘净值即可。
不多说了,直接上代码。
'''
Created on 2021年8月26日
@author: yangs
此程序用于计算证券账户指定日期的资产总值。
第一步:读取对账单到dataframe中,
第二步:取指定日期之后的记录,重复的证券代码的,只显示最后一条记录。数量为0的也不显示。
第三步:根据证券代码和指定日期,获得收盘价格。股票的收盘价格从baostock中获取,并从手动表中补充其他的价格
第四步:计算出收盘后的账户资产值
数据源文件位置需要根据实际情况调整,缺省是当前目录
计算结果只用于显示。本程序较小,运行速度很快,直接显示内容。
'''
import pandas as pd
from datetime import datetime
import baostock as bs
class MyTools(object):
"""
工具类
"""
def __init__(self):
pass
def read_tradeFile(self, full_file_name):
'''
读取对账单文件。
返回格式: dataframe
对账单为csv文件,格式如下。
其中要用到的数据包括交收日期,证券代码,证券余额,资金余额。其他列数据暂时不用
序号,交收日期,证券代码,证券名称,交易类别,成交价格,成交数量,证券余额,成交金额,资金发生数,资金余额,,流水序号,业务标志,业务名称,发生金额,后资金额,货币类别,备注,,,,,,,,,,,,,费用合计,净佣金,规费,印花税,过户费,币种,合同号,资金账号,股东代码
1,2014-06-09,,,银行转存,,,,5475,5475.00 ,5475.00 ,,9,2041,银行转存,5475,5475,人民币,银行返回码[0000]返回信息[[0000]交易成功]|转账成功,,,,,,,,,,,,,,,,,,,,,
2,2014-06-16,,,银行转取,,,,-5475,-5475.00 ,0.00 ,,7,2042,银行转取,-5475,0,人民币,银行返回码[0000]返回信息[[0000]交易成功]|转账