# 量化投资学习(2)- 如何用十五行代码画出k线 **Published by:** [鱼叔 UncleFish](https://paragraph.com/@unclefish/) **Published on:** 2022-01-04 **URL:** https://paragraph.com/@unclefish/2-k ## Content hello 大家好,我是鱼叔。今天是量化投资学习的第二课,如何用python抓取数据绘制k线,这节教程是基于上一节教程开发的,主要是通过调用CoinGecko提供的api接口实现数据的提取。虽然实现这个功能只要十五行的代码,但是我也花了不少时间思考和定位问题,总之希望能大家一丝启发。(ps,当我们能绘制出k线时,那下一步就可以进行量化分析了,代码在文章末尾)整体设计目标:能通过输入项目代号和时间范围抓取对应的价格根据时间和价位进行图形绘制,形成k线图实现流程:通过get_coin_market_chart_by_id函数进行数据的挖掘,这个函数有三个入参:id、vs_cuurency、date_len。分别代表着项目名称、你想要的计价单位以及想要的数据时间周期(这边我统一用usd作为计价单位)。将数据中的时间和价格分别分离出来,存到两个队列里。将时间的表现形式从「时间戳」转换为「正常时间」。注意api返回的时间为毫秒级的时间戳,因此要除以1000进行转换。此外返回的时间为小时级别数据,也就是说你会得到24*天数个数据。调用matplotlib提供的plot函数进行图表的绘制。封装成函数,输入参数为id,时间长度两个变量。需要的代码库pycoingecko(CoinGecko提供的api库,需要自行安装)matplotlib(用于绘制图,需要自行安装)time(python自带的时间转换库,不需要额外安装)一些参考链接:https://www.jianshu.com/p/2d93ec38ddcf https://blog.csdn.net/wangzirui32/article/details/117390474实现效果:这是我抓出来90天btc价格走势图,第二张图是coingecko截图下来的90天k线走势图,其实两者走势基本一样,也就是说至少k线的绘制上没有太大的问题。后期值得改进的地方目前似乎只支持抓90天以内的数据,超出了长度好像就没法进行抓取,后期可以考虑自行整改官方API实现较长时间数据提取。由于数据量偏大,在拖动图片的时候可能会存在卡顿,后期可以在保证k线形状的情况下减少绘图用的点。在k线图上增加一些标记物,比如中值点、最大值、最小值等。丰富k线内容,包括市值,交易量等。为什么要自己绘制k线可能很多朋友会说平台提供的k线已经很好用了,为什么要自己绘制呢?事实上,平台确实提供了不少的功能,很多功能也很强大,但是这个过程是被动的,你没法主动地把某两个参数结合起来分析,受限于平台提供的功能亦或是需要成为它们的vip等等。而自己搭建量化系统是一个主动学习探索的过程,你可以将你想到的参数都放进自己的模型里,来打造属于你的交易策略。代码参考:具体函数的代码(确实十五行):def price_market_draw(id, time_len): cg = CoinGeckoAPI() coin_data = cg.get_coin_market_chart_by_id(id, 'usd', time_len) #获得对应代币的价格 coin_time = [] coin_price = [] for i in range(int(time_len)*24): # 由于返回的是小时制,所以总数据等于天数*24 time_stamp = coin_data['prices'][i][0]/1000 # 返回的是毫秒级时间戳所以除以1000转换成秒级进行处理 time_local = time.localtime(time_stamp) # 转换成本地时间 dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) # 进行数据的转换方便观察 coin_time.append(dt) # 存入时间队列 coin_price.append(coin_data['prices'][i][1]) # 存入价格队列 plt.plot(coin_time, coin_price, linewidth=2) # 图标绘制,第一个参数是x轴,第二个参数是y轴 plt.title(id + ' ' + time_len + 'days table', fontsize=14) plt.xlabel("time", fontsize=14) plt.ylabel("usd", fontsize=14) plt.show() 调用参考from pycoingecko import CoinGeckoAPI import matplotlib.pyplot as plt import time if __name__ == '__main__': #print(response) price_market_draw('bitcoin', '90') #调用btc90天的数据形成k线图,第一个参数是代币名字,第二个天数,天数要小于等于90天 我是鱼叔,一个理性的币圈投资和输出者。 【2021 鱼叔的投资报告 语雀版】 【2021 鱼叔的投资报告 公众号版】 有兴趣的朋友可以关注鱼叔的持仓 - 看看鱼叔都在买什么。 欢迎关注: 鱼叔的投资博客 / 鱼叔的投资笔记 / 鱼叔的Mirror / 公众号【鱼叔的币圈江湖】 知乎 鱼叔, 币乎 UncleFish, 巴比特海盗号 鱼叔。 如果觉得我不错,欢迎加入鱼叔的圈子 靠谱的梯子:天路云 靠谱的交易所注册:币安 | 火币 |OKEX | GATE 钱包网址:TokenPocket | ImToken ## Publication Information - [鱼叔 UncleFish](https://paragraph.com/@unclefish/): Publication homepage - [All Posts](https://paragraph.com/@unclefish/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@unclefish): Subscribe to updates