神奇公式的启示
这位外国程序员小哥在《仍然击败市场的小书》中发现了神奇公式,这是一种简单却高效的投资策略,通过筛选低市盈率和高资产回报率的股票来发现潜在的投资机会。他决定将这一策略与自己的编程技能结合,以自动化的方式优化选股过程。

这本书简单介绍如下,大家看看理论是否靠谱:
2005年,乔尔·格林布拉特(Joel Greenblatt)出版了一本被认为是金融文学经典之一的书。在《跑赢市场的小册子》(《纽约时报》畅销书,印刷本达 30 万册)中,格林布拉特解释了投资者如何通过简单而系统地应用一个公式来寻找价格便宜的好企业,从而超越流行的市场平均水平。现在, 《仍然击败市场的小书》有了 2010 年新的引言和后记,更新并扩展了原书的研究结果。其中包括涵盖近期金融危机的数据和分析以及截至 2009 年底的模型表现。本书以简单易懂的风格探讨了成功股市投资的基本原则,然后揭示了作者经过时间考验的公式,该公式使购买成为可能平均公司自动以低于平均价格。尽管这个公式已经过广泛的测试,并且在学术和专业领域是一个突破,但格林布拉特用六年级的数学、平实的语言和幽默来解释 它 。他展示了如何利用他的方法大幅击败市场和职业经理人。您还将了解为什么几乎所有个人和专业投资者都无法成功,以及为什么即使每个人都“知道”这个公式,它仍然有效。
这本书引进中国后,名字变成了《股市稳赢》。名字有点通俗。
更多的用AI赚钱的案例请阅读以下专栏,现在限时优惠折扣,请订购。
Python简化选股
面对神奇公式网站按字母顺序排列股票、缺乏直接的排名和详细数据的问题,这位工程师开发了一个Python脚本。他使用yfinance库来获取股票的市盈率和资产回报率数据,再通过pandas库来处理和分析这些数据,最终根据神奇公式计算出每只股票的排名。
yfinance 数据检索
yfinance是一个非官方的雅虎财经库,允许使用雅虎公开可用
的 API 访问大量财务数据。
该库支持检索股票价格、财务数据、汇率等。它与其他 Python 库无缝集成,以进行进一步的数据分析和可视化。
用于数据操作的 Pandas
根据其网站,pandas 是“一种快速、强大、灵活且易于使用的开源数据分析和操作工具,构建在 Python 编程语言之上。”
它提供了两种主要的数据结构:Series和DataFrame,其中 DataFrame 对于我们手头的任务至关重要。它简化了多变量数据集的处理,类似于使用电子表格。
检索数据和排名的步骤
第0步:设置IDE
从技术上讲,您可以在终端上安装 Python 并使用任何文本编辑器编写代码。但如果您尚未设置 IDE,我们强烈建议您使用 IDE。
我不会详细介绍如何选择和设置IDE。如果您不知道从哪里开始,Google Colab 可能是一个不错的选择。它是免费的,并且我们需要的库已经预装了。
第 1 步:检索库存数据
我们使用 yfinance 来获取目标股票的市盈率和 ROA。
以下代码将返回您通常可以在雅虎财经的“摘要”和“统计”选项卡上找到的股票信息:
import yfinance as yf
# 通过股票代码检索数据
tickerData = yf.Ticker( 'MSFT' )
# 公司信息
tickerData.info
此代码片段以 JSON 格式检索股票信息,包括当前和预测的市盈率以及资产回报率 (ROA)。
第 2 步:将数据组织到 DataFrame 中
将一只股票的 yfinance JSON 数据转换为 Pandas DataFrame 非常简单:
import pandas as pd
# 将 JSON 转换为数据帧
df = pd.DataFrame([tickerData.info])
# 显示数据帧
display(df)
上面的代码将生成一个如下表:

显示 pandas 数据框的屏幕截图
Magic Formula 网站magicformulainvesting.com显示基于 Magic Formula 选定市值之上的前 30 或 50 只股票。
一个简单的 for 循环有助于将所有推荐股票聚合到一个 DataFrame 中:
# 30 只股票的股票代码。我这里只列出其中的5个作为例子。
stocks = [
'MO' ,
'AMN' , '
BTMD' ,
'BKE' ,
]
df_list = []
df_list.append(pd.DataFrame([yf.Ticker(ticker).info])) df = pd.concat(df_list)
第三步:通过魔法公式排名
我们通过添加市盈率和资产回报率评级栏来对股票进行排名,创建一个综合的“神奇排名”:
df[ 'PE Rank' ] = df[ 'trailingPE' ].rank(ascending= True )
df[ 'ROA Rank' ] = df[ 'returnOnAssets' ].rank(ascending= False )
df[ 'Magic Rank' ] = df[ 'PE Rank' ] + df[ 'ROA Rank' ]
为了关注相关数据,我们过滤结果:
df_selected = df. filter ([ 'symbol' , 'trailingPE' , 'returnOnAssets' , 'PE Rank' , 'ROA Rank' , 'Magic Rank' ])
最后,按“Magic Rank”排序揭示了我们的最佳股票选择:
df_sorted = df_selected.sort_values(by= 'Magic Rank' , 升序= False )
print(df_sorted)
结果是按 Magic Rank 排名的新股票表,如下所示:

自动化股票排名的力量
通过这个脚本,程序够自动从数十只股票中筛选出符合神奇公式标准的最佳股票,从而简化了选股过程,提高了投资的效率和准确性。相信用Python就能迅速提取一批符合价值规律的股票池,不仅仅会节省了我们大量的时间,也让我们的投资决策更加数据驱动和科学。
更多的用AI赚钱的案例请阅读以下专栏,现在限时优惠折扣,请订购。