专栏首页奔跑的键盘侠Python——量化分析常用命令介绍(三)

Python——量化分析常用命令介绍(三)

这是奔跑的键盘侠的第108篇文章

量化分析整体思路虽不难,但是要代码实现,其实挺繁杂的,需要很多铺垫工作,比如要先搭建自己的数据库。

1

MongoDB

上一节提到要搭建自己的数据库,除了免除耗时下载外,还有一个很重要的原因,就是数据更准确可靠,算法自己一清二楚。而第三方渠道获取的数据,万一某天突然升级改造一下,可能我们的代码就瘫痪了。

so,还是要搭建自己的数据库,于是我们要引入一个新的工具,MongoDB

,反正吧,编程一旦深入一点,琳琅满目的工具就找上门了,别怂,就是用!

安装指南可自行百度:

https://jingyan.baidu.com/article/425e69e601f281be14fc166d.html

不过,还是卡壳了我……这个外文的网站,缓冲了近一个多小时才切到版本选择界面

今天可能来不及安装了。

2

data_crawler.py

由于MongoDB今天没安装好,数据存储的代码就下次再讲,直接贴一下爬取指数和个股的代码吧,今天用到了类(之前学了好久,一直没怎么用过),有些内容,看着挺复杂的,但是接触多了,慢慢发现其实也不难而且用起来,还蛮顺手的。

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# @Time    : 2019-07-01 22:11
# @Author  : Ed Frey
# @File    : data_crawler.py
# @Software: PyCharm
import tushare as ts
from pymongo import MongoClient

class DataCrawler():
    def __init__(self):
        # self.db = MongoClient('mongodb:127.0.0.1:27017'['my_quant'])
        pass
    def crawl_index(self,begin_date=None,end_date=None):
        '''
        to crawl the index's trading information and set up our own database
        :param begin_date: YYYY-MM-DD
        :param end_date: YYYY-MM-DD
        :return:
        '''
        # codes = ['000001','000300','399001','399005','399006']
        codes = ['000001']
        for code in codes:
            df_daily = ts.get_k_data(code,index=True,start=begin_date,end=end_date)

            for index in df_daily.index:
                doc = dict(df_daily.loc[index])
                doc['index'] = True
                doc['code'] = code

                print(doc,flush=True)
        pass
    def crawl_stock(self,autype=None,begin_date=None,end_date=None):
        '''
        to crawl the stock's trading information and set up our own database
        :param autype: 前复权qfq  or  后复权hfq  or  不复权none
        :param begin_date: YYYY-MM-DD
        :param end_date: YYYY-MM-DD
        :return:
        '''
        df_stock = ts.get_stock_basics()
        # codes = list(df_stock.index)
        codes = ['600153','600000']

        for code in codes:
            df_daily = ts.get_k_data(code,autype=autype,start=begin_date,end=end_date)

            for index in df_daily.index:
                doc = dict(df_daily.loc[index])
                doc['index'] = False
                doc['code'] = code
                print(doc,flush=True)
        pass
if __name__ == '__main__':

    dc = DataCrawler()
    dc.crawl_index(begin_date='2019-07-01',end_date='2019-07-03')
    dc.crawl_stock(begin_date='2019-07-01', end_date='2019-07-03')
就是把爬取指数信息的函数crawl_index、爬取个股信息的函数crawl_stock封装到了DataCrawler这个类中,正是所谓的面向对象编程,简单一点讲“物以类聚”。之前的代码分享基本都是函数式编程,抽象一个函数,然后多个场景可以直接调用;而面向对象编程呢,个人感觉比函数式编程更进了一步,功能也更强大了。
举个简单的例子:比如鱼类跟哺乳类,用腮呼吸是鱼类的特定方式(函数方法),而用肺呼吸是哺乳类的特定方式(函数方法);而二者共有的特征是循环系统都是由心脏和血管构成,这个特定方式是2个类完全相同的特定方式(函数方法)。
大概就是这么个样子,根据特性再进一步的提取,增强了某些共通特性的复用性,就酱紫,不废话了。

运行结果如下:

/Users/Ed_Frey/anaconda2/envs/python36/bin/python /Users/Ed_Frey/Desktop/MyQuant_v1/data/data_crawler.py

{'date': '2019-07-01', 'open': 3024.6199999999999, 'close': 3044.9000000000001, 'high': 3045.3699999999999, 'low': 3014.6900000000001, 'volume': 250840433.0, 'code': '000001', 'index': True}

{'date': '2019-07-02', 'open': 3042.5799999999999, 'close': 3043.9400000000001, 'high': 3048.48, 'low': 3033.7800000000002, 'volume': 214520624.0, 'code': '000001', 'index': True}

{'date': '2019-07-03', 'open': 3031.8299999999999, 'close': 3015.2600000000002, 'high': 3031.8299999999999, 'low': 3006.3200000000002, 'volume': 212296173.0, 'code': '000001', 'index': True}

{'date': '2019-07-01', 'open': 8.9800000000000004, 'close': 8.9399999999999995, 'high': 9.0800000000000001, 'low': 8.9100000000000001, 'volume': 134979.0, 'code': '600153', 'index': False}

{'date': '2019-07-02', 'open': 8.9000000000000004, 'close': 9.0500000000000007, 'high': 9.0500000000000007, 'low': 8.8699999999999992, 'volume': 185049.0, 'code': '600153', 'index': False}

{'date': '2019-07-03', 'open': 9.0299999999999994, 'close': 9.1500000000000004, 'high': 9.1799999999999997, 'low': 8.9399999999999995, 'volume': 183247.0, 'code': '600153', 'index': False}

{'date': '2019-07-01', 'open': 11.859999999999999, 'close': 11.710000000000001, 'high': 11.92, 'low': 11.69, 'volume': 548878.0, 'code': '600000', 'index': False}

{'date': '2019-07-02', 'open': 11.720000000000001, 'close': 11.609999999999999, 'high': 11.74, 'low': 11.57, 'volume': 511657.0, 'code': '600000', 'index': False}

{'date': '2019-07-03', 'open': 11.619999999999999, 'close': 11.56, 'high': 11.630000000000001, 'low': 11.51, 'volume': 365670.0, 'code': '600000', 'index': False}

Process finished with exit code 0

结果中数字小数点好多位,这个问题回头再说。上面的代码提取到了000001这个指数7.1-7.3的交易数据,还有600153和600150这2只个股在7.1-7.3的交易数据。另外,get_k_data函数获取到的信息,满足不了我们的需求,我们又增加了2个字段,一个是来区分某个代码到底是指数还是个股(index),还有一个用来记录股票代码(code)。

正常来讲,我们要把爬取到的数据给存储到数据库中,便于今后的使用。由于MongoDB没安装好,留待下次再讲,敬请期待。

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python——量化分析常用命令介绍(四)

    上节课提到的MongoDB,其实安装很简单的,前几天下载页面打不开,无形中放大了心里阴影面积

    Ed_Frey
  • Python——量化分析介绍(十一)

    最后这篇吧,其实吧,砍掉很多啰嗦的章节,目录就根据已写的内容重新整理一下。前几天,很多粉丝反应有点云里雾里,甚至吐槽看不懂,所以我想还是赶快收尾吧,早点翻过这篇...

    Ed_Frey
  • 按键精灵——如何留下鼠标移动轨迹

    某些场景,需要留下鼠标移动轨迹,比较合乎视觉感受,不然光标闪来闪去,会不会翻车且不说,对眼睛肯定是不好的刚好上周有小伙伴咨询后台鼠标移动的问题,虽然我没解决,也...

    Ed_Frey
  • 精解四大集合框架:List核心知识总结

    Java集合框架早也是个老话题了,今天主要是总结一下关于Java中的集合框架List的核心知识点。肯定有人会问,这篇写的是List那接下来就还有三篇?是的,ja...

    田维常
  • 如何入门小程序开发

    在上一篇教程中,我们教大家使用微信官方Demo快速搭建了一个小相册,并学会了如何安装开发者工具,如何创建小程序,如何做服务端配置。并利用腾讯云COS实现相册上传...

    伤旧
  • 021.Elasticsearch索引管理高级篇

    在开发中,随着业务需求的迭代,较老的业务逻辑就要面临更新甚至是重构,而对于ES来说,为了适应新的业务逻辑,可能就要对原有的索引做一些修改,比如对某些字段做调整,...

    CoderJed
  • Oracle 重建索引脚本

          索引是提高数据库查询性能的有力武器。没有索引,就好比图书馆没有图书标签一样,找一本书自己想要的书比登天还难。然而索引在使用的过程中,尤其是在批量的D...

    Leshami
  • 微信小程序的概要

    学习小程序要了解一下什么事小程序,小程序开发前需要做哪些准备,微信小程序开发工具的使用,小程序中的目录结构解析,视图和渲染,事件。

    达达前端
  • 泛函编程(31)-泛函IO:Free Monad-Running free

      在上节我们介绍了Free Monad的基本情况。可以说Free Monad又是一个以数据结构替换程序堆栈的实例。实际上Free Monad的功能绝对不止...

    用户1150956
  • python列表删除和多重循环退出原理详解

    在学习python的时候,会有一些梗非常不适应,在此列举列表删除和多重循环退出的例子:

    砸漏

扫码关注云+社区

领取腾讯云代金券