写了一个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())
注意点:
注意在这一行 API_KEY = "YOUR_API_KEY" 需要填写你的CoinMarketCap API密钥,可以申请免费的API_KEY。
timer.start(10000) # 10000毫秒 = 10秒 我写了10秒更新和保存数据一次,可以改为你想要的间隔时间。
我可能还想做的功能
- 利用数据模拟定投策略和价值平均策略,得到收益对比。
- 获取美股数据。
感想
- 这个是我和perplexity.ai一起做的,编程效率高了不少。
- 就编程助手而言,AI真的很好。
- 我每天都要找AI练练。
记录一下提醒自己回来做。