数字货币历史市值获取

2023-7-27 300

市值数据的重要性

  单因子检测是量化投资中常用的一种方法,通过挖掘和分析各种因子与股票回报之间的关系,寻找能够带来超额收益的因子信号。而市值作为一个重要的因子之一,对于单因子检测起着关键的作用。
  首先,市值是衡量一个公司规模的重要指标,它代表了公司的总市值或市场价值。市值反映了市场对该公司的整体价值和认可程度,与公司的规模、流动性以及市场地位密切相关。在单因子检测中引入市值数据可以提供关于公司规模的信息,帮助识别不同规模公司之间的回报差异。
  其次,市值因子在资本市场中具有稳定性和持续性。研究表明,较小市值的公司往往存在较高的成长性和风险,而较大市值的公司则能够提供相对稳定的回报。因此,市值因子在构建投资组合和风险管理中具有重要的作用。
  此外,市值因子能够与其他因子相互配合,提供更全面的投资决策依据。例如,将市值因子与价值因子(如市盈率)结合使用,可以帮助识别低估值的大盘股或高估值的小盘股,从而获取投资机会。
  但是无论是股票市场还是加密货币市场,对于市值数据的获取存在着难点。在股票市场中,tushare、akshare等金融数据库提供的市值接口只有股票当前的市值,股票的历史市值数据是不能获取的。当然也存在其他方式可以获取股票历史市值数据,这个之后会写一份教程。今天的主要任务是介绍如何获取币圈所有加密货币的历史市值数据。

利用CoinGecko官方api来进行获取

其中api文档链接:https://www.coingecko.com/en/api/documentation

1、安装pycoingecko库

首先进入终端进行安装pycoingecko库

pip install pycoingecko

2、导入相关库

import pandas as pd
import time
from tqdm import tqdm
from pycoingecko import CoinGeckoAPI
import ccxt

3、获取币安交易所合约在api中对于的id

由于利用api获取数据的时候不是采用的名称,而是CoinGecko官方创建与之对应的id,故需要先获取币种对应的id

# 获取币安现货或者永续合约所有coin的名称
def get_need_coin_name(type='swap'):
    """
    :param type: 现货:spot  合约:swap
    :return:
    """
    coin_name_list = []
    # 创建币安交易所对象
    exchange = ccxt.binance()

    # 获取币安合约交易对信息
    markets = exchange.load_markets()

    # 遍历所有币安usdt交易对
    for symbol, market in markets.items():
        coin, _ = symbol.split(':')[0].split('/')
        # 判断是否是合约交易对
        if market['type'] == type and _ == 'USDT':
            symbol = coin
            coin_name_list.append(symbol)
    return coin_name_list


# 获取所有数字货币的名称和对应的id
cg = CoinGeckoAPI()
coin_list = cg.get_coins_list()
need_coin = get_need_coin_name()
exchange_tickers = []

# 每次输出数据数量存在限制,分页获取
for i in range(0, 20):
    exchange_ticker = cg.get_exchanges_tickers_by_id('binance', page=i)['tickers']
    exchange_tickers += exchange_ticker
    time.sleep(30)

id_dict = {}
for symbol in exchange_tickers:
    name = symbol['base']
    if symbol['target'] == 'USDT':
        id_dict[symbol['coin_id']] = name

# 获取id列表
id_list = set(id_dict.keys())

4、根据id获取对应的市值数据

# 时间转化为时间戳函数
def timeStamp(timeNum):
    timeStamp = float(timeNum / 1000)
    timeArray = time.localtime(timeStamp)
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    return otherStyleTime


# 开始结束时间的转化
begin_date = "2019-01-01 000000"
timeArray = time.strptime(begin_date

本主题为课程学员专享,成为Python数字货币投资课程学员后可免费阅读

成为学员
最新回复 ( 0条评论 )


官方微信
码力十足学量化
Powered by Xiuno BBS 4.0.7

官方微信