邮件提醒配置(需提前开启SMTP服务,如QQ邮箱/163邮箱)

admin48 2026-02-27 18:09

Python比特币价格自动提醒:实时掌握行情,不错过任何机会

在数字货币市场,比特币价格波动剧烈,短短几分钟内就可能上涨或下跌数个百分点,对于投资者而言,及时掌握价格变化至关重要——无论是抓住买入时机、把握卖出点,还是规避短期风险,手动刷新网页或APP显然效率太低。Python比特币价格自动提醒就成了高效解决方案:通过几行代码搭建自动化监控系统,让价格变动主动“通知”你,真正做到实时响应、决策先行。

为什么选择Python实现比特币价格提醒

Python作为当下最受欢迎的编程语言之一,凭借其简洁的语法、丰富的第三方库和强大的生态,成为自动化任务的首选工具,对于比特币价格监控场景,Python的优势尤为突出:

  • 数据获取便捷:通过requestsccxt等库,可轻松对接Coinbase、Binance、OKX等主流交易所API,或爬取财经网站数据;
  • 提醒方式灵活:支持邮件、短信、微信、Telegram、钉钉等多种通知渠道,满足不同使用习惯;
  • 随机配图
i>自动化程度高:结合scheduleAPScheduler等库,可定时或实时触发监控,无需人工干预;
  • 扩展性强:可轻松集成技术指标分析(如MA、RSI)、价格突破检测等复杂逻辑,从“被动提醒”升级为“智能决策助手”。
  • 实现步骤:从零搭建比特币价格提醒系统

    第一步:环境准备

    安装必要的Python库:

    pip install requests schedule python-dotenv
    • requests:发送HTTP请求,获取价格数据;
    • schedule:定时任务调度(若需实时监控,可改用websockets库);
    • python-dotenv:管理API密钥等敏感信息,避免硬编码。

    第二步:获取比特币价格数据

    以Coinbase交易所为例,其公共API无需密钥即可获取实时价格,编写get_price.py

    import requests
    def get_btc_price():
        """获取比特币实时价格(USD)"""
        try:
            url = "https://api.coinbase.com/v2/prices/spot?currency=USD"
            response = requests.get(url, timeout=10)
            response.raise_for_status()  # 检查请求是否成功
            data = response.json()
            price = float(data['data']['amount'])
            return price
        except requests.RequestException as e:
            print(f"获取价格失败: {e}")
            return None
    if __name__ == "__main__":
        current_price = get_btc_price()
        if current_price:
            print(f"当前比特币价格: ${current_price:,.2f}")

    运行后,终端会输出类似“当前比特币价格: $43,256.78”的结果。

    第三步:设置价格阈值与提醒逻辑

    假设我们想在比特币价格上涨突破$45,000或下跌跌破$40,000时收到提醒,编写price_monitor.py

    from get_price import get_btc_price
    import smtplib
    from email.mime.text import MIMEText
    from dotenv import load_dotenv
    import os
    load_dotenv()  # 加载.env文件中的环境变量
    EMAIL_SENDER = os.getenv("EMAIL_SENDER")  # 发件人邮箱
    EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")  # 邮箱授权码
    EMAIL_RECEIVER = os.getenv("EMAIL_RECEIVER")  # 收件人邮箱
    def send_email(subject, content):
        """发送邮件提醒"""
        try:
            msg = MIMEText(content, 'plain', 'utf-8')
            msg['Subject'] = subject
            msg['From'] = EMAIL_SENDER
            msg['To'] = EMAIL_RECEIVER
            server = smtplib.SMTP_SSL('smtp.qq.com', 465)  # 以QQ邮箱为例
            server.login(EMAIL_SENDER, EMAIL_PASSWORD)
            server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())
            server.quit()
            print("邮件发送成功")
        except Exception as e:
            print(f"邮件发送失败: {e}")
    def check_price():
        """检查价格并触发提醒"""
        price = get_btc_price()
        if not price:
            return
        high_threshold = 45000  # 上限阈值
        low_threshold = 40000   # 下限阈值
        if price > high_threshold:
            subject = "比特币价格上涨提醒!"
            content = f"当前价格: ${price:,.2f},已突破上限阈值 ${high_threshold:,},建议关注市场动态。"
            send_email(subject, content)
        elif price < low_threshold:
            subject = "比特币价格下跌提醒!"
            content = f"当前价格: ${price:,.2f},已跌破下限阈值 ${low_threshold:,},注意风险控制。"
            send_email(subject, content)
        else:
            print(f"当前价格 ${price:,.2f} 在阈值范围内,暂无提醒。")
    if __name__ == "__main__":
        check_price()

    注意.env文件中需配置邮箱信息(示例):

    EMAIL_SENDER=your_email@qq.com
    EMAIL_PASSWORD=your_smtp_authorization_code
    EMAIL_RECEIVER=receiver_email@qq.com

    第四步:定时或实时监控

    方案1:定时监控(适合低频检查)

    使用schedule库每5分钟检查一次价格:

    import schedule
    import time
    def job():
        print(f"开始检查价格... {time.strftime('%Y-%m-%d %H:%M:%S')}")
        check_price()
    # 每5分钟执行一次
    schedule.every(5).minutes.do(job)
    # 若需每天固定时间执行(如早上9点)
    # schedule.every().day.at("09:00").do(job)
    print("价格监控已启动,按Ctrl+C停止...")
    while True:
        schedule.run_pending()
        time.sleep(1)

    运行后,程序每5分钟自动检查价格,若突破阈值则发送邮件。

    方案2:实时监控(适合高频响应)

    交易所通常提供WebSocket接口,可实现实时推送价格,以ccxt库为例:

    import ccxt
    import time
    def real_time_monitor():
        """实时监控比特币价格"""
        exchange = ccxt.coinbase()  # 初始化Coinbase交易所
        symbol = 'BTC/USD'          # 交易对
        while True:
            try:
                ticker = exchange.fetch_ticker(symbol)
                price = ticker['last']
                print(f"实时价格: ${price:,.2f} (时间: {time.strftime('%H:%M:%S')})")
                # 这里可添加价格判断逻辑(调用check_price函数)
                if price > 45000 or price < 40000:
                    check_price()  # 触发提醒
                time.sleep(1)  # 1秒刷新一次
            except Exception as e:
                print(f"实时监控出错: {e}")
                time.sleep(5)  # 出错后等待5秒重试
    if __name__ == "__main__":
        real_time_monitor()

    实时监控能第一时间捕捉价格变动,适合短线投资者或高频交易场景。

    扩展功能:从“提醒”到“智能决策”

    基础的价格提醒已能满足大部分需求,但通过Python的扩展能力,还可以实现更复杂的监控逻辑:

    多交易所价格对比

    不同交易所比特币价格可能存在微小价差,可编写脚本对比主流交易所价格,发现套利机会:

    def get_multiple_prices():
        """获取多个交易所比特币价格"""
        exchanges = {
            'Coinbase': ccxt.coinbase(),
            'Binance': ccxt.binance(),
            'OKX': ccxt.okx()
        }
        prices = {}
        for name, exchange in exchanges.items():
            try:
                ticker = exchange.fetch_ticker('BTC/USD')
                prices[name] = ticker['last']
            except Exception as e:
                print(f"获取{name}价格失败: {e}")
        return prices
    # 示例输出:{'Coinbase': 43250.00, 'Binance': 43248.50, 'OKX': 43252.00}

    技术指标触发提醒

    结合pandasnumpy计算移动平均线(MA)、相对强弱指数(RSI)等指标,在价格突破关键均线时提醒:

    import pandas as pd
    def calculate_ma(prices, period=20):
        """计算简单移动平均线"""
        df = pd.DataFrame(prices, columns=['price'])
        df['ma'] = df['price'].rolling(window=period).mean()
        return df['ma'].iloc[-1]
    # 示例:若当前价格突破20日均线,则提醒
    current_price = get_btc_price()
    ma20 = calculate_ma(historical_prices)  # historical_prices为历史价格数据
    if current_price > ma20:
        send_email("比特币突破20日均线提醒", f"当前价格 ${current_price:.2f} >
    本文转载自互联网,具体来源未知,或在文章中已说明来源,若有权利人发现,请联系我们更正。本站尊重原创,转载文章仅为传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网站转载使用,请保留本站注明的文章来源,并自负版权等法律责任。如有关于文章内容的疑问或投诉,请及时联系我们。我们转载此文的目的在于传递更多信息,同时也希望找到原作者,感谢各位读者的支持!
    最近发表
    随机文章
    随机文章