Python 读取交割单计算每日账户资产v2

本文介绍了一名开发者如何使用Python编写程序,处理交割单数据,实现从CSV到XLS文件格式的转换,并通过命令行操作简化日常账户收益率计算。重点在于处理非交易日和不同证券类型的价格获取,确保资产值准确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作需要,编写了一个程序,实现了使用python读取交割单信息,自动计算每日账户资产。可以为账户收益率计算节省大量时间。

本次变动:1 将对账单文件从csv改为xls,2 增加了命令行方式。其他大致和上次一样。

程序计算量比较小,计算结果直接显示即可。

实现原理:

将交割单数据从后向前一条一条读取。

交割日期大于指定日期的不显示,直接跳过。

交割日期小于等于指定日期的记录,第一条记录中的资金余额为账户资金余额。

每次新碰到一个证券代码,对应的证券余额是持仓证券的数量,如果不是新的证券代码,说明前面已经显示过了,这样重复证券代码的记录直接忽略。

证券数量大于0的记录,显示证券代码,证券名称和证券数量。证券数量为零的证券说明已经清仓了,不需要显示。

根据证券代码和指定日期,查询到对应的收盘价格。根据持仓数量和收盘价格可以算出证券市值。

持仓市值加上资金余额即账户收盘资产。

关于对账单文件:

对账单文件是Excel 97-2003的格式。

交割单中的证券余额和资金余额要准确。如果有误,需要手工调制。尤其是有红股和分红数据对应的证券余额和资金余额。

某些券商的对账单中有对比对应的资金冻结和解冻。直接删掉这些记录,就按照资金未冻结处理。

如果对账单文件中包括基金交易的数据,也可以使用此程序。

查询日期:

查询日期如果不是交易日,则显示上一个交易日的信息。

证券价格:

A股当前交易的股票查对应询日期的价格可以通过baostock获得。其他日期只能手工按照固定格式列出;港股和基金的价格也只能手工给出。程序会读取对应文件,从而获得指定日期的价格。

以下为代码。


'''
Created on 2021年8月26日

@author: yangs
此程序用于计算证券账户指定日期的资产总值。

第一步:读取对账单到dataframe中。
注意对账单的格式要正确,并且需要自己验证个股票代码后面对应的证券余额的正确性。
查询日期按照年月日写作 XXXX-XX-XX 
新股中签后的代码和数量需要自己确保正确。从券商系统导出的数据一般有下列问题,需要手动处理正确后本程序才能正确显示资产值。
1 股息分红的记录中,股票代码后面的证券数量可能不正确,需要手工修正
2 红股入账时的证券数量可能不正确,需要手工修正。
3 冻结和解冻资金会导致剩余金额有变动,所以这个资金变动可以忽略。需要删掉冻结和解冻。然后修正资金余额
4 新股新债申购中签后,会有中签记录,冻结资金,新股债入账,到最后的卖出。对应的股票代码可能变了好几次。需要手工调制为一个代码,并且修正扣款和持股的逻辑关系。
  如果记录扣款了,就要记录对应的持股。
5 新股新债的持股可能早于交易日期。因此需要在股票价格对应的文件中补全交易日之前的价格。
6 冻结的资金,如果一直没有解冻。就直接按照已解冻修正资金余额。
7 目前支持的港股就三个 福寿园,腾讯控股,京东。超出这三个的需要自己修改程序。

第二步:取指定日期之前的记录,重复的证券代码的,只显示最后一条记录。数量为0的也不显示。

第三步:根据证券代码和指定日期,获得收盘价格。股票的收盘价格从baostock中获取,并从手动表中补充其他的价格
注意,港股需要特殊处理

第四步:计算出收盘后的账户资产值

注意:本版本程序对应的 数据源文件是 Excel 97-2003版本

'''

import pandas as pd
from pandas import read_excel
from datetime import datetime
import baostock as bs
from sqlparse.sql import Begin
import sys


class MyTools(object):
    """
    工具类
    """
    def __init__(self):
        pass
    
    def para_input(self):
        if(len(sys.argv ) == 1):
            check_date = "2020-12-31"
            input_files = ["2006-2015gtja_check_sheetV2.xls","2014-2022gfgx_check_sheetV2.xls","2020-2022ggpa_check_sheet.xls"]
        elif( len(sys.argv ) == 2):
            check_date = sys.argv[1]
            input_files = ["2006-2015gtja_check_sheetV2.xls","2014-2022gfgx_check_sheetV2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值