写点什么

我和 TiDB 的故事:十年理财之路之 TiDB 如何让我收益达到 30 万的

  • 2024-03-29
    北京
  • 本文字数:2525 字

    阅读完需:约 8 分钟

作者: tidb 狂热爱好者原文来源:https://tidb.net/blog/98470a5a


作为一个收入一般的程序猿,前几年试着做了股票投资,职业习惯,让我试着用 tidb 去做了一些关于股票的数据分析,接下来,我想把我的一些想法分析给大家:


我的初步思路按照一下几个方面开始做分析:



另外,在股票投资中,需要用到数学公式去理解和管理投资风险。如下面的这个数据公式,只要好好理解该公式原理,能更好的帮助我们在投资中做决策:


  1. 盈利与成本的计算

  2. 股票收益率

  3. 凯利公式 



  • ( f^* ) 是应该投资的资金比例。

  • ( b ) 是每次投资的盈利比率。

  • ( p ) 是获胜的概率。

  • ( q ) 是失败的概率,( q = 1 - p )。


如何用数学公式选择出年利率比较高的股票,用那几个数学公式能帮助我更好的投资,用历史收益率购买靠谱吗?


使用历史收益率来选择年利率较高的股票是一种常见的方法,但它有其局限性。历史收益率可以提供关于股票过去表现的信息,但并不总能准确预测未来表现。


以下是一些考虑因素:



下面是我写的一些实例,希望可以给大家一些思路:


用 python y yfinance 计算纳斯达克前 100 的净资产收益率 (ROE): pd.concat 写


import yfinance as yf
import pandas as pd
import mysql.connector
from sqlalchemy import create\_engine
复制代码

定义纳斯达克前 100 家公司的股票代码列表

nasdaq\_top\_100 = \['AAPL', 'MSFT', 'AMZN' ] # 请补全列表

创建一个空的列表来存储每家公司的 DataFrame


dataframes = \[]
复制代码

遍历股票代码列表

for ticker in nasdaq\_top\_100:

获取股票数据

stock = yf.Ticker(ticker)
复制代码

获取财务报表数据

balance\_sheet = stock.balance\_sheet
income\_statement = stock.financials
复制代码

计算 ROE

net\_income = income\_statement.loc\['Net Income']
shareholder\_equity = balance\_sheet.loc\['Stockholders Equity']
roe = net\_income / shareholder\_equity
复制代码

创建一个 DataFrame 来存储当前公司的 ROE

df = pd.DataFrame({'Ticker': \[ticker], 'ROE': \[roe]})

将 DataFrame 添加到列表中


dataframes.append(df)
复制代码


# 使用 pd.concat 合并所有公司的 DataFrame


roe_df = pd.concat(dataframes)

输出结果

`print(roe\_df)`
#url = 'mysql+pymysql://username:password\@hostname:port/dbname?charset=utf8'
#engine = sa.create\_engine(url, echo=False)
engine = create\_engine('mysql+pymysql://a:jmdjsj\@127.0.0.1/a')
roe\_df.to\_sql('df', engine, index=False,
method = "multi",chunksize = 10000 ,if\_exists='replace')
复制代码


如何用 tidbserverless 给自己投资理财


一般来说 roe 高的股票投资收益会好很多



mysql> select \* from df;
\+--------+-----------------------------------------------------------------------------------------------------------+
\| Ticker | ROE |
\+--------+-----------------------------------------------------------------------------------------------------------+
\| AAPL | 2023-09-30 1.56076
2022-09-30 1.969589
2021-09-30 1.500713
2020-09-30 0.878664
dtype: object |
\| MSFT | 2023-06-30 0.350887
2022-06-30 0.436755
2021-06-30 0.431522
2020-06-30 0.374298
dtype: object |
\| AMZN | 2023-12-31 0.150712
2022-12-31 -0.018638
2021-12-31 0.24134
2020-12-31 0.228374
dtype: object |
复制代码


然后我们用 gpt 给的另一端计算年化收益率的代码来算他们的历史收益


import yfinance as yf

下载以太坊过去 5 年的数据

eth\_data = yf.download('AMZN', period='5y')

计算每日收益率

daily\_returns = eth\_data\['Adj Close'].pct\_change()

计算累积收益率

cumulative\_returns = (1 + daily\_returns).cumprod() - 1

计算 5 年的总收益率

total\_return\_5y = cumulative\_returns.iloc\[-1]

年化收益率

annualized\_return = (1 + total\_return\_5y)\*\*(1/5) - 1

输出结果

print(f"5年总收益率: {total\_return\_5y:.2%}")
print(f"年化收益率: {annualized\_return:.2%}")
复制代码


从这些数据来说 AMZN 的收益比 apple 和微软收益都差。我们带入历史收益来看看。


jiangming\@admin\njiangming \~ % python3 apple.py
\[\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*100%%\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*] 1 of 1 completed
复制代码


5 年总收益率: 272.70%


年化收益率: 30.10%


jiangming\@admin\njiangming \~ % python3 AMZN.py
\[\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*100%%\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*] 1 of 1 completed
复制代码


5 年总收益率: 101.90%


年化收益率: 15.09%


我准备用 tidb 的 serverless 开发一个理财网站。把各个股票的年华 roe 都算出来。数据库用 tidb 的 serverless 我主要做内容


类似如下的代码。计算出来各个股票哪个最值得投资。这也算 tidb 的有效应用之一


import yfinance as yfimport pandas as pdimport mysql.connectorfrom sqlalchemy import create\_engine
复制代码

定义纳斯达克前 100 家公司的股票代码列表

nasdaq\_top\_100 = \['AAPL', 'MSFT', 'AMZN' ] # 请补全列表

创建一个空的列表来存储每家公司的 DataFrame

dataframes = \[]

遍历股票代码列表

for ticker in nasdaq\_top\_100:

获取股票数据

stock = yf.Ticker(ticker)

获取财务报表数据

balance_sheet = stock.balance_sheetincome_statement = stock.financials
复制代码

计算 ROE

net_income = income_statement.loc['Net Income']shareholder_equity = balance_sheet.loc['Stockholders Equity']roe = net_income / shareholder_equity
复制代码

创建一个 DataFrame 来存储当前公司的 ROE

df = pd.DataFrame({'Ticker': [ticker], 'ROE': [roe]})

将 DataFrame 添加到列表中

dataframes.append(df)

使用 pd.concat 合并所有公司的 DataFrame

roe\_df = pd.concat(dataframes)

输出结果

print(roe\_df)\#url = 'mysql+pymysql://username:password\@hostname:port/dbname?charset=utf8'\#engine = sa.create\_engine(url, echo=False)engine = create\_engine('mysql+pymysql://a:jmdjsj\@127.0.0.1/a')roe\_df.to\_sql('df', engine, index=False,method = "multi",chunksize = 10000 ,if\_exists='replace')
复制代码


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
我和 TiDB 的故事:十年理财之路之 TiDB 如何让我收益达到30万的_新版本/特性解读_TiDB 社区干货传送门_InfoQ写作社区