作为一个收入一般的程序猿,前几年试着做了股票投资,职业习惯,让我试着用tidb去做了一些关于股票的数据分析,接下来,我想把我的一些想法分析给大家:
我的初步思路按照一下几个方面开始做分析:
另外,在股票投资中,需要用到数学公式去理解和管理投资风险。如下面的这个数据公式,只要好好理解该公式原理,能更好的帮助我们在投资中做决策:
- 盈利与成本的计算
- 股票收益率
- 凯利公式
- ( 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 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')