美股“Meme”股票再次引发关注,游戏驿站GameStop(GME)和AMC娱乐(AMC)等股票的价格飙升引发了对meme股复兴的猜测。
沉寂三年后,曾引发2021年“散户大战华尔街”狂潮的“散户之王”Keith Gill重返社交媒体,疑似再次吹响号角。
在上周一和周二,“meme股”游戏驿站(GameStop)和AMC院线的股价分别上涨179.21%和135.4%,造成空头损失超过24亿美元。
在这场火爆行情中,名为“stocksandrealestate”的X用户也在这短短的两天内,在美股二级市场上将1000美元“变”成了近7.2万美元。他感觉自己走向了“人生巅峰”,并将这一切归功于游戏驿站,在推文中直言:“游戏驿站改变了我的人生”。
什么是 "meme" 股票?
近年来,"meme" 股票已经成为投资界的热门话题。
所谓“meme”股票,可以简单理解为网红股票,是2020年在社交媒体平台Reddit子版块wallstreetbets崛起的一类特殊的股票。这些股票通常由散户推动,借助Reddit、X(之前的Twitter)等社交媒体平台实现病毒式传播,因此股价波动极大,炒作气氛浓厚。
这些被散户追捧的Meme股票通常具备以下特征:
-
公司基本面走弱,股价低迷;
-
被对冲基金大量做空;
-
出现一些逆境反转的迹象。
当一支股票在社交网络上成为热议话题后,会吸引散户投资者大量购入,推动股价在短时间内急剧上涨,形成一支meme股。meme股的形成可视为散户与华尔街大鳄之间的智斗。散户不断推高股价,而对冲基金则不停地做空。这导致meme股的股价波动异常剧烈,短期内可能经历巨幅涨跌。
这些股票通常由社交媒体平台(如 Reddit)上的用户推动,其价格波动迅速且剧烈。通过分析这些社交媒体平台上的讨论,可以提前捕捉到市场趋势,帮助投资者抓住稍纵即逝的机会。
用 Python 跟踪“meme”股票,并自动盯盘
为了实现目的,首先我们使用 praw 库访问 Reddit API,获取像 wallstreetbets 等子版块中的热门帖子和评论数据。这些数据中包含了用户讨论的股票代码。我们通过正则表达式和字符串处理,将这些数据清洗并提取出潜在的股票代码。
其中,PRAW是一个用于与Reddit API交互的Python库。它允许用户通过简单的接口访问和操作Reddit的内容。PRAW的全称是“Python Reddit API Wrapper”,其主要功能是提供一个易于使用的方式来访问Reddit的API。
接着,使用 Counter 统计每个股票代码在讨论中的出现频率,识别出最热门的“meme”股票。然后,使用 yfinance 库获取这些股票的市场数据,包括开盘价、收盘价和最近的涨幅。
我们将这些数据整理成一个 pandas DataFrame,便于进一步处理和分析。可以将 DataFrame 保存为 Excel 文件,以备后续查看。执行代码后获取的数据如下所示:
最后,使用 smtplib 库配置 SMTP 服务器,发送包含股票数据的邮件通知。邮件正文使用 HTML 格式,附加详细的 Excel 报告,确保用户能够方便地查看最新的投资组合数据。这里我用的是163邮箱的smtp服务,获取的邮件如下:
通过以上步骤,利用 Python 的强大数据处理和自动化能力,可以实现从 Reddit 获取股票数据、分析市场趋势,并自动通过邮件实时更新投资组合的功能。 由于篇幅有限,仅展示部分代码,请在文章最末尾处获取完整python代码和数据文件。
实现步骤和完整代码
一、安装所需的Python库
要开始我们的项目,我们需要安装以下 Python 库:
praw
:用于访问 Reddit API。yfinance
:用于获取股票市场数据。pandas
:用于数据处理和分析。smtplib
:用于发送电子邮件。
安装命令:
pip install praw yfinance pandas smtplib
二、数据获取
通过 Reddit 获取 "meme" 股票的讨论数据。使用
praw
库,我们可以轻松地从 Reddit 获取热门讨论的帖子和评论。以下是获取 Reddit 数据的部分代码示例:
import praw
# 配置 Reddit API
reddit = praw.Reddit(
client_id="your\_client\_id",
client_secret="your\_client\_secret",
username="your\_reddit\_username",
password="your\_reddit\_password",
user_agent="your\_user\_agent",
request_timeout=30
)
# 获取热门讨论的帖子
subreddits = ['wallstreetbets', 'stocks', 'investing', 'StockMarket']
posts = []
for subreddit in subreddits:
subreddit_instance = reddit.subreddit(subreddit)
for submission in subreddit_instance.hot(limit=50):
submission.comments.replace_more(limit=0)
for comment in submission.comments.list():
posts.append(comment.body)
三、数据清洗与分析
处理获取的 Reddit 数据,识别潜在的股票代码。使用正则表达式和字符串操作,我们可以清洗 Reddit 数据并识别出潜在的股票代码:
import re
from collections import Counter
def remove_punc(word):
return re.sub(r'[^\w\s]', '', word)
def remove_emoji(word):
return word.encode('ascii', 'ignore').decode('ascii')
# 清洗数据
words = []
for post in posts:
for word in post.split():
cleaned_word = remove_punc(word)
cleaned_word = remove_emoji(cleaned_word)
if cleaned_word.isupper() and not containsNumber(cleaned_word):
words.append(cleaned_word)
# 统计股票代码出现的频率
stock_counts = Counter(words)
trending_stocks = {k: v for k, v in stock_counts.items() if v > 10}
四、获取股票市场数据
使用
yfinance
获取股票的市场数据。获取股票的开盘价、收盘价和涨幅:
import yfinance as yf
def get_stock_info(ticker):
stock = yf.Ticker(ticker)
hist = stock.history(period="5d")
if len(hist) >= 2:
open_price = hist['Open'][-1]
close_price = hist['Close'][-1]
change_percent = ((close_price - previous_close_price) / previous_close_price) * 100
return open_price, close_price, change_percent
return None, None, None
stock_info = []
for ticker, count in trending_stocks.items():
open_price, close_price, change_percent = get_stock_info(ticker)
if open_price:
stock_info.append((ticker, count, open_price, close_price, f"{change\_percent:.2f}%"))
五、生成报告
使用
pandas
将数据保存为 Excel 文件:
import pandas as pd
df = pd.DataFrame(stock_info, columns=['股票代码', '出现次数', '开盘价', '收盘价', '涨幅'])
df.to_excel('股票数据.xlsx', index=False)
六、自动化邮件发送
使用
smtplib
发送包含 Excel 附件和 HTML 表格的邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# 邮件配置
email_user = 'your\_email@163.com'
email_password = 'your\_email\_password'
email_receiver = 'receiver\_email@example.com'
email_subject = 'Reddit 热门股票,来看看你关注的有没有!'
# 生成邮件内容
top_10_html = df.head(10).to_html(index=False)
email_body = f"""
<p>嗨,股市小能手!</p>
<p>看看我们从Reddit上挖掘到的热门股票名单,快来瞧瞧有没有你关注的股票吧!</p>
<p>以下是Reddit上最火的前10只股票:</p>
{top\_10\_html}
<p>详情请查阅附件的Excel文件。</p>
<p>祝你投资愉快,财源滚滚!</p>
"""
# 创建邮件消息
msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_receiver
msg['Subject'] = email_subject
msg.attach(MIMEText(email_body, 'html'))
# 附加Excel文件
with open('股票数据.xlsx', 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
part.add_header('Content-Disposition', 'attachment', filename='股票数据.xlsx')
msg.attach(part)
# 发送邮件
try:
with smtplib.SMTP_SSL('smtp.163.com', 25) as server:
server.login(email_user, email_password)
server.sendmail(email_user, email_receiver, msg.as_string())
print(f"邮件已发送到 {email\_receiver},附件为 股票数据.xlsx.")
except Exception as e:
print(f"发送邮件失败: {e}")
改进和总结
为了进一步优化我们的投资工具,除了实时数据监控、自动交易和增加更多社交媒体数据源外,我们还可以考虑以下几个改进方向:
将更多的市场数据纳入分析范围,如交易量、波动率、市场情绪等。利用机器学习和人工智能技术,构建更复杂的预测模型。这些模型可以基于历史数据、社交媒体讨论趋势和其他市场指标,预测股票价格的未来走势,提高投资决策的准确性。
除了Reddit,还可以通过多源数据融合,可以获取更全面的市场情报,捕捉到更细微的市场情绪变化。并对社交媒体上的讨论进行情感分析,判断市场情绪的正负面。这可以帮助识别市场上的恐慌或乐观情绪,从而做出相应的投资决策。
通过以上改进,投资工具将更加强大和高效,能够提供更全面、准确的市场分析和投资建议。
扫描下方二维码, 获取完整代码和文件
欢迎加入ChatGPT量化与投资交流群