Count my cryptocurrency.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
LICENSE
README.md
cryptocurrency.csv
cryptocurrency.py
cryptocurrency.txt
cryptocurrency_csv.py
ticker_id.txt
ticker_id_full.txt
update_ticker.sh

README.md

Python 统计个人加密货币资产

文/温国兵

本文由币乎社区(bihu.com)内容支持计划奖励。

这是「区块链技术指北」的第 7 篇文章。

如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时简单介绍下自己,并注明来自「区块链技术指北」。同时我会把你拉入微信群「区块链技术指北」。

背景


对个人每一笔投资进行复盘是非常有必要的。投资过后,复盘看到的那些贪婪、恐惧、紧张、心动、烦躁、欢喜、得瑟、满意……无数种情绪一览无遗。只有通过复盘,才能知道哪笔投资有问题,哪笔投资还有改善的空间。秉承这种原则,笔者有一份区块链资产表格,里面详细记录了各种币种的分布,包含币种、全称、存储位置、数量、购买渠道、购买时间、操作记录、备注等等。另外,同一份表格其他 Sheet 记录了不同交易平台的订单记录,交易时间、类型、交易对、单价、数量、总价、手续费等等。一份表格,就可以窥探所有的投资逻辑。笔者建议进行区块链投资的读者也进行这样的梳理,绝对有价值。

摆在笔者面前的一大难题,区块链资产比较分散,各类钱包、各大交易所,同一币种在不同交易所价格还不一样。怎么样精准快速统计个人资产,这还是个问题。

blockchain

题图来自: © JASON / Hoard Joins INV Fintech Accelerator / hoardinvest.com

调研


笔者进行了一番调研,可以通过 MyToken App 进行汇总统计。但一看 MyToken 的设计,需要注册账户,也就是说你添加的所有资产,从他们的后台都可以看到,对于隐私比较看重的笔者自然是无法忍受。况且 MyToken 还存在价格更新频率不及时的问题,总之使用一段时间,体验不是特别友好。另外有一个网站叫做 COUNT MY CRYPTO 也可以统计,不过需要逐个添加,效率太慢。对于一个 Geek 来说,有没有更快更好的方法呢?答案是有,自己造轮子呗。

去 GitHub 找了一遍,有一个叫做 coinmarketcap 的 Python 库可以实现以 CNY 形式查询币种的现值。不过试用了下,还是决定自己调用 CoinMarketCap 的原生 API 实现。

我们来看下 CoinMarketCap 是什么网站。

CoinMarketCap 是一个网站,它追踪大多数已经触及市场的山寨币,以及比特币,并向用户展示每枚币的美元和比特币的现值。

大多数查看行情的网站都是对标 CoinMarketCap 的数据,所以 CoinMarketCap 提供的数据极具参考价值。查看了 CoinMarketCap 的 API,简洁明了,实现思路也已经形成,于是撸起袖子就是干。

解决


查看 CoinMarketCap API,我们可以看到提供的 API 是 Public API,也即是不需要私钥认证即可请求。主要提供三类方法:Ticker、Ticker (Specific Currency)、Global Data。我们需要调用的是 Ticker 和 Ticker (Specific Currency)。

Ticker (Specific Currency) 的调用方法如下:

https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=CNY

我们尝试浏览器访问,得到如下 JSON 格式的数据:

[
    {
        "id": "bitcoin",
        "name": "Bitcoin",
        "symbol": "BTC",
        "rank": "1",
        "price_usd": "16808.0",
        "price_btc": "1.0",
        "24h_volume_usd": "14098700000.0",
        "market_cap_usd": "281370122000",
        "available_supply": "16740250.0",
        "total_supply": "16740250.0",
        "max_supply": "21000000.0",
        "percent_change_1h": "2.35",
        "percent_change_24h": "-1.07",
        "percent_change_7d": "12.19",
        "last_updated": "1513241052",
        "price_cny": "111100.88",
        "24h_volume_cny": "93192407000.0",
        "market_cap_cny": "1859856506420"
    }
]

如果读者对以上 JSON 格式数据感兴趣,可以自行琢磨下。

也就是说,bitcoin 表示 IDconvert=CNY 表示转换为人民币。问题是这个 ID 怎么获取呢。

笔者查看 Ticker 方法,发现如下的调用可以获取所有的 Ticker(limit=0 表示没有限制)。

curl -G https://api.coinmarketcap.com/v1/ticker/\?limit\=0 > ~/Downloads/ticker

通过 Terminal 终端请求之后,得到了一个叫做 ticker 的文件,使用 sed + vim 进行文本处理后,可以得到 1355 个 Ticker 的 ID 的 ticker_id.txt 文本文件,也即是说目前 CoinMarketCap 收录了 1355 种 Token。笔者对 ticker 文件进行二次处理,得到了一个叫做 ticker_id_full.txt 的文件,除了 Ticker ID 之外,还有 name 和 symbol。

笔者注:1355 种 Ticker 是当前的数据,Ticker 数量每天都在增加。后续笔者也会去维护 GitHub repo 总的 ticker_id.txt 和 ticker_id_full.txt 文本文件。

好了,至此就是使用 Python 实现统计区块链资产了。

笔者建立了一个叫做 cryptocurrency.txt 的文本,第一列是 Token 的 ID,第二列是 Token 的数量,列之间以空格进行分隔,文件示例如下:

bitcoin 10000
ethereum 10000
eos 10000
zcash 10000

接下来就是循环读取,requests 请求获取 JSON 中的 price_cny 属性,然后累加,核心代码如下:

'''
Coinmarketcap requests.

Args:
    ticker: cryptocurrency symbol.
    convert: which currency to convert.

Returns:
    req: coinmarketcap requests.
'''
def Coinmarketcap(ticker, convert):
    url = ('https://api.coinmarketcap.com/v1/ticker/%s/?convert=%s') \
    % (ticker, convert)
    req = requests.get(url)
    return req

'''
Count my cryptocurrency.

Args:
    file: cryptocurrency file.
    cryptocurrency.txt includes my cryptocurrency detail.
    This file seperated by one space.
    First column: tikcker id.
    Second column: ticker nums.

Returns:
    price_all: All cryptocurrency convert to CNY.
'''
def CountCryptoCurrency(file):
    # counter.
    price_all = 0
    for line in open(file):
        columns = line.split(' ')
        ticker = columns[0]
        nums = columns[1]
        req = Coinmarketcap(ticker, 'CNY')
        for item in req.json():
            price_cny = item['price_cny']
            price_total = float(price_cny) * float(nums)
            price_all = float(price_all) + float(price_total)

    return price_all

脚本编写完成后,执行 python cryptocurrency.py,就会得到如下输出:

cryptocurrency

看到这么多现值,是不是很酷啊,有时产生下错觉也挺好的。

资源


相关代码已提交到 GitHub,读者可以自行 clone 玩下,链接:

小结


通过本文提供的方法得到区块链资产现值,然后和投入资产进行对比,就能计算出盈利率,每个人都应该对自己的投资行为负责。

解决问题需要执行力的,如果觉得有价值,思考成熟之后就去做。在解决问题的过程中,就会发现自己的能力就这样慢慢提升了,希望本文对读者有所帮助。

「区块链技术指北」同名 知识星球,二维码如下,欢迎加入。

区块链技术指北

「区块链技术指北」同名 Telegram Channel:https://t.me/BlockchainAge,欢迎订阅。

同时,本系列文章会在以下渠道同步更新,欢迎关注:

原创不易,读者可以通过如下途径打赏,虚拟货币、美元、法币均支持。

  • BTC: 3QboL2k5HfKjKDrEYtQAKubWCjx9CX7i8f
  • ERC20 Token: 0x8907B2ed72A1E2D283c04613536Fac4270C9F0b3
  • PayPal: https://www.paypal.me/robinwen
  • 微信打赏二维码

Wechat

–EOF–

版权声明:自由转载-非商用-非衍生-保持署名(创意共享4.0许可证)