豪哥的世界

写了一个BTC价格记录器

最终结果:

价格记录器

虽然界面丑,但是给自己用已经够了。

功能上除了能显示价格之外,还有定时记录价格信息的功能,会记录在prices.csv文件中,程序如下:

import sys
import os
import csv
from PyQt6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QHBoxLayout
from PyQt6.QtCore import QTimer
from datetime import datetime, timezone, timedelta
from requests import Session
import json

# CoinMarketCap API密钥(请替换为您自己的API密钥)
API_KEY = "YOUR_API_KEY"

# 定义API端点和参数
url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest"
parameters = {
    "symbol": "BTC,ETH",
    "convert": "CNY"
}
headers = {
    "Accepts": "application/json",
    "X-CMC_PRO_API_KEY": API_KEY
}

def fetch_prices():
    # 发送API请求
    session = Session()
    session.headers.update(headers)
    response = session.get(url, params=parameters)
    data = json.loads(response.text)["data"]
    status = json.loads(response.text)["status"]

    # 提取所需数据
    price_day = datetime.fromisoformat(status["timestamp"])
    china_tz = timezone(timedelta(hours=8))
    china_dt = price_day.astimezone(china_tz).strftime("%Y-%m-%d %H:%M:%S")

    btc_to_cny = data["BTC"]["quote"]["CNY"]["price"]
    eth_to_cny = data["ETH"]["quote"]["CNY"]["price"]
    eth_to_btc = eth_to_cny / btc_to_cny

    # 更新标签文本
    date_label.setText(f"<span style='font-size:28px;'>{china_dt}</span>")

    btc_cny_label.setText(f"BTC/人民币: <span style='color:#057748;font-weight:bold;font-size:24px;text-align:right;'>{btc_to_cny:.2f}</span> 元")
    eth_cny_label.setText(f"ETH/人民币: <span style='color:#057748;font-weight:bold;font-size:24px;text-align:right;'>{eth_to_cny:.2f}</span> 元")
    eth_btc_label.setText(f"ETH/BTC  : <span style='color:#057748;font-weight:bold;font-size:24px;text-align:right;'>{eth_to_btc:.4f}</span> 个")

    # 将数据写入CSV文件
    with open("prices.csv", "a", newline="") as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow([china_dt, btc_to_cny, eth_to_cny, eth_to_btc])

# 创建PyQt6应用程序和主窗口
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("BTC价格查看器")

# 创建标签
date_label = QLabel()
btc_cny_label = QLabel()
eth_cny_label = QLabel()
eth_btc_label = QLabel()

# 创建垂直布局并添加标签
layout = QVBoxLayout()
layout.addWidget(date_label)
layout.addWidget(btc_cny_label)
layout.addWidget(eth_cny_label)
layout.addWidget(eth_btc_label)

# 设置主窗口的布局
window.setLayout(layout)

# 显示主窗口
window.show()

# 立即执行一次fetch_prices函数
fetch_prices()

# 创建定时器,每10秒钟调用fetch_prices函数
timer = QTimer()
timer.timeout.connect(fetch_prices)
timer.start(10000)  # 10000毫秒 = 10秒

# 运行应用程序
sys.exit(app.exec())

注意点:

  1. 注意在这一行 API_KEY = "YOUR_API_KEY" 需要填写你的CoinMarketCap API密钥,可以申请免费的API_KEY。

  2. timer.start(10000) # 10000毫秒 = 10秒 我写了10秒更新和保存数据一次,可以改为你想要的间隔时间。


我可能还想做的功能

  1. 利用数据模拟定投策略和价值平均策略,得到收益对比。
  2. 获取美股数据。

感想

  1. 这个是我和perplexity.ai一起做的,编程效率高了不少。
  2. 就编程助手而言,AI真的很好。
  3. 我每天都要找AI练练。

记录一下提醒自己回来做。