继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 趣味项目:50行代码,带你自制一个“加密货币心电图”

慕盖茨9520025
关注TA
已关注
手记 18
粉丝 0
获赞 0

很多想学量化交易的同学,一上来就被复杂的数学模型和枯燥的 API 文档劝退了。其实,量化最有趣的地方在于——你可以用代码重新定义你观察世界的方式。

今天我们不讲枯燥的理论,来做一个好玩且实用的小项目:用 Python 给以太坊(ETH)画一张实时的“心电图”。看着价格在屏幕上实时跳动,那种掌控感是非常棒的。

我们需要准备什么?

  1. Python 环境(Anaconda 或原生都可以)。

  2. 绘图库matplotlib,Python 数据可视化的神器。

  3. 数据源:我们需要一个能实时“说话”的接口,而不是需要我们不停去问(轮询)的接口。这里我们用 WebSocket 协议,配合 AllTick 的数据服务,它的格式非常适合新手练手,没有复杂的鉴权坑。

步骤解析

第一步:建立连接我们像打电话一样,拨通交易所的数据线路。

第二步:收集数据电话接通后,对方会不断报价格。我们需要拿个小本子(List)把这些数字记下来,太旧的数字就扔掉。

第三步:画出来指挥电脑每秒钟根据本子上的数字重新画一次线。


完整代码实现复制下面的代码,直接运行,你就能拥有一个属于自己的行情终端:

import websocket
import json
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from datetime import datetime

# 用于存储时间和价格
times, prices = [], []

# WebSocket 消息回调
def on_message(ws, message):
    data = json.loads(message)
    price = float(data['price'])
    timestamp = datetime.fromtimestamp(data['timestamp'])
    
    times.append(timestamp)
    prices.append(price)
    
    # 保留最近 50 条数据
    if len(times) > 50:
        times.pop(0)
        prices.pop(0)

def on_open(ws):
    subscribe_msg = {
        "type": "subscribe",
        "symbol": "ETHUSD"
    }
    ws.send(json.dumps(subscribe_msg))

# 动态绘图函数
def animate(i):
    plt.cla()
    plt.plot(times, prices, color='orange', marker='o')
    plt.title("ETH 实时走势图")
    plt.xlabel("时间")
    plt.ylabel("价格(USD)")
    plt.xticks(rotation=45)
    plt.tight_layout()

# WebSocket 地址示例(AllTick API)
ws_url = "wss://ws.alltick.co/realtime"

ws = websocket.WebSocketApp(ws_url, on_message=on_message, on_open=on_open)

# 用线程运行 WebSocket
from threading import Thread
Thread(target=ws.run_forever, daemon=True).start()

# 实时刷新可视化
plt.show()

学习要点

  • 注意 times.pop(0) 这一行,这就是“滑动窗口”的概念,保证我们的内存不会爆掉。

  • 尝试修改 ws_url 中的代码,你也可以获取 BTC 或者其他资产的行情。

编程是为了解决问题,也是为了发现乐趣。希望这个小 demo 能打开你量化之路的大门。

https://img1.sycdn.imooc.com/3197db6908718d4616000893.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP