"meme"股票热潮袭来!用 Python 跟踪并自动盯盘

火山方舟向量数据库机器学习

picture.image

美股“Meme”股票再次引发关注,游戏驿站GameStop(GME)和AMC娱乐(AMC)等股票的价格飙升引发了对meme股复兴的猜测。

沉寂三年后,曾引发2021年“散户大战华尔街”狂潮的“散户之王”Keith Gill重返社交媒体,疑似再次吹响号角。

picture.image

在上周一和周二,“meme股”游戏驿站(GameStop)和AMC院线的股价分别上涨179.21%和135.4%,造成空头损失超过24亿美元。

在这场火爆行情中,名为“stocksandrealestate”的X用户也在这短短的两天内,在美股二级市场上将1000美元“变”成了近7.2万美元。他感觉自己走向了“人生巅峰”,并将这一切归功于游戏驿站,在推文中直言:“游戏驿站改变了我的人生”。

什么是 "meme" 股票?

近年来,"meme" 股票已经成为投资界的热门话题。

所谓“meme”股票,可以简单理解为网红股票,是2020年在社交媒体平台Reddit子版块wallstreetbets崛起的一类特殊的股票。这些股票通常由散户推动,借助Reddit、X(之前的Twitter)等社交媒体平台实现病毒式传播,因此股价波动极大,炒作气氛浓厚。

picture.image

这些被散户追捧的Meme股票通常具备以下特征:

  1. 公司基本面走弱,股价低迷;

  2. 被对冲基金大量做空;

  3. 出现一些逆境反转的迹象。

当一支股票在社交网络上成为热议话题后,会吸引散户投资者大量购入,推动股价在短时间内急剧上涨,形成一支meme股。meme股的形成可视为散户与华尔街大鳄之间的智斗。散户不断推高股价,而对冲基金则不停地做空。这导致meme股的股价波动异常剧烈,短期内可能经历巨幅涨跌。

picture.image

这些股票通常由社交媒体平台(如 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 文件,以备后续查看。执行代码后获取的数据如下所示:

picture.image

最后,使用 smtplib 库配置 SMTP 服务器,发送包含股票数据的邮件通知。邮件正文使用 HTML 格式,附加详细的 Excel 报告,确保用户能够方便地查看最新的投资组合数据。这里我用的是163邮箱的smtp服务,获取的邮件如下:

picture.image

通过以上步骤,利用 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量化与投资交流群

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 GPU Scale-up 互联技术白皮书
近日,字节跳动正式发布基于以太网极致优化的 GPU Scale-up 互联技术白皮书,推出 EthLink 的创新网络方案,旨在为 AI 集群提供低延迟、高带宽的高速互联传输,满足 AI 应用对 GPU 之间高效通信的需求。这一举措标志着字节跳动在 AI 基础设施领域的突破,有望推动通用人工智能(AGI)和大语言模型(LLM)的进一步发展。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论