akshare 中的bond_cov_comparison提供了可转债的转债代码、转债最新价、转股价、正股名称、正股最新价
输入要购买的可转债的数量【以一手为单位,一手等于10张】,计算可转债的面值、市值、转股后的股票数量、现金、股票市值
可转债的面值等于可转债的数量*1000
可转债的市值等于可转债的数量*转债最新价*10
转股后的股票数量等于可转债的面值除于转股价,取整数
现金等于可转债的面值减去转股后的股票数量*转股价,取两位小数,不要四舍五入
股票市值等于转股后的股票数量*正股最新价,取两位小数,不要四舍五入
打印可转债的面值、转股价、市值、转股后的股票名称、数量、正股最新价、现金、股票市值
import akshare as ak
import pandas as pd
import math
class ConvertibleBondCalculator:
def __init__(self):
self.bond_info_df = None
def fetch_bond_info(self):
self.bond_info_df = ak.bond_cov_comparison()
def calculate_bond_values(self):
if self.bond_info_df is None:
print("请先获取可转债信息!")
return
bond_code = input("请输入可转债代码:")
matching_df = self.bond_info_df[
self.bond_info_df['转债代码'].str.contains(bond_code, case=False)
]
if matching_df.empty:
print("无效的可转债代码!")
return
bond_quantity = int(input("请输入可转债数量:"))
convert_price = matching_df.iloc[0]['转股价']
bond_price = matching_df.iloc[0]['转债最新价']
stock_name = matching_df.iloc[0]['正股名称']
stock_price = matching_df.iloc[0]['正股最新价']
bond_face_value = bond_quantity * 1000
bond_market_value = bond_quantity * bond_price * 10
stock_quantity = bond_face_value // convert_price
cash_value = round(bond_face_value - stock_quantity * convert_price, 2)
stock_market_value = round(stock_quantity * stock_price, 2)
bond_name = matching_df.iloc[0]['转债名称']
print(f"可转债代码:{bond_code}")
print(f"转债名称:{bond_name}")
print(f"可转债面值:{bond_face_value}")
print(f"转股价:{convert_price}")
print(f"可转债市值:{bond_market_value}")
print(f"转股后的股票名称:{stock_name}")
print(f"转股后的股票数量:{stock_quantity}")
print(f"正股最新价:{stock_price}")
print(f"现金:{cash_value}")
print(f"股票市值:{stock_market_value}")
if __name__ == '__main__':
calculator = ConvertibleBondCalculator()
calculator.fetch_bond_info()
calculator.calculate_bond_values()
运行结果
请输入可转债代码:113044
请输入可转债数量:100
可转债代码:113044
转债名称:大秦转债
可转债面值:100000
转股价:6.22
可转债市值:119324.0
转股后的股票名称:大秦铁路
转股后的股票数量:16077.0
正股最新价:7.31
现金:1.06
股票市值:117522.87