精华内容
下载资源
问答
  • 王小川 著 python与量化投资-从基础到实战 原书配套代码及资源包下载 王小川 著 python与量化投资-从基础到实战 原书配套代码及资源包下载
  • Python与量化投资-从理论到实战》 书籍配套代码
  • Python股票量化投资课程【完结】最新最全
  • Python与量化投资 从基础到实战 第一章 准备工作 1.1 Python的安装设置 1.2 常见的Python

    Python与量化投资

    从基础到实战

    在这里插入图片描述

    本博客是记录以及监督自己学习这本书中的内容,为了防止看过就忘记的弊端,简单地对本书进行一些必要的记录,也方便了日后的复习。

    第一章 准备工作

    1.1 Python的安装与设置

    • 考虑Python的版本,建议使用Python 3,可以自行查找相关教程
    • Python的集成环境:建议使用Anaconda。PyCharm、Spyder等也可以,看自己的使用习惯或者参考资料是用的是啥。

    1.2 常见的Python库

    1. NumPy
      NumPy是Python的一种开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身的列表结构要高效得多。NumPy底层使用BLAS作为向量,各种运算的速度也得打大幅提升。它主要包括:

      • 强大的N维数组对象Array
      • 比较成熟的(广播)函数库
      • 用于整合C、C++和Fortran代码的工具包
      • 实用的线性函数、傅里叶变换和随机数生成函数,使NumPy和系数矩阵运算包的配合使用更加方便。
        另外,NumPy中的数据类型在Pandas、Scikit-Learn、StartsModel等库中被作为基本数据类型使用。
    2. Pandas
      Pands的主要应用环境如下:

    • 数据的导入和导出
    • 数据清理
    • 数据挖掘与探索
    • 为分析数据处理与准备
    • 结合Scikit-Learn、StatsModel进行分析

    Pandas的底层基于NumPy搭建,因此Pandas拥有了NumPy的全部优点。

    1. Matplotlib
      Matplotlib是Python最著名的绘图库,提供了一整套和MATLAB相似的命令API,十分适合进行交互式制图。

    2. Seaborn
      Seaborn 其实是在Matplotlib 的基础上进行了更高级的API封装,从而使作图更容易。
      应该把Seaborn 视为Matplotlib 的补充,而不是替代物。

    3. SciPy
      SciPy 包含致力于解决科学计算中常见的各个工具箱。它的不同子模块相当于不同的应用,例如差值、积分、优化、图像处理、特殊函数等。

    4. Scikit-Learn
      Scikit-Learn 是基于Python 的机器学习模块,基于BSD开源许可。
      基本功能主要为:分类、回归、聚类、数据降维、模型选择和数据预处理。
      对具体的机器学习问题的解决,通常可以分为三步:数据准备与预处理、模型选择与训练、模型验证与参数调优。Scikit-Learn封装了这些步骤,使建模的过程更方便、简单和快捷。

    5. StatsModel
      StatsModel 是Python 的统计建模和计量经济学工具包,包括一些描述统计、统计模型估计和推断,例如线性回归模型、广义线性回归模型、方差分析模型、时间序列模型、非参检验、优化、绘图功能等。

    6. Quartz
      Quartz 是优化的在线回测模块库,提供了跨资产多账户交易的量化策略框架,可以对策略进行专业的历史回测,得到详细的策略表现评估结果。它包括:多因子选股策略、事件驱动策略、CTA策略等。
      特点如下:

      • 支持标准级的策略编写规范。删减了大量冗余的策略API,让我们只需记忆少量的函数名,即可快速实现策略想法
      • 扩充了策略交易的资产范围,从原来的只支持股票、基金这两种资产类型,扩充到支持股票、场内外基金、指数、期货这4种资产的全资产平台。
      • 体现了策略信号生成和交易执行相分离的思想,可以灵活的进行各种资产的数据分析和交易撮合。
      • 支持更多的策略特性,例如多因子裸多策略、市场中性策略、FOF策略和CTA期现策略等。
      • 会得到更充分的研究和支持,新的示例会逐步扩充在优矿知识库中,辅助我们更好的进行量化研究。
      • 在性能方面进行了诸多优化,让我们可以用更快的运行速度进行策略研究。
    7. CAL
      CAL依托优矿量化实验室在线平台,基于C++ 开发高性能引擎,以 Python 作为接口语言向用户提供功能,他的宗旨是为广大投资者提供丰富、灵活的金融分析模块,降低投资者的分析平台搭建成本,帮助用户在金融大浪中顺利前行。

    第二章 Python 基础介绍

    2.1 Python 学习准备

    • Anaconda的安装
    • Jupyter Notebook 界面的简单介绍和使用
    • Jupyter Notebook 的存储位置

    2.2 Python 语法基础

    • 变量与常量
      变量:即可被赋值也可被更改。
      常量:一旦被绑定,不能修改。
    • 数与字符串
      数的类型有五种:
    1. 整数型(int): 0、-1、1、2021等
    2. 长整型(long): 878817、-9909901等
    3. 浮点型(float):2.7788、3.277、8.88等
    4. 布尔型(bool):True和False
    5. 复数型(complex):4 +2j、-9+3j等

    字符串:引号引起来的字符集。‘hello’、‘my python ’、‘2+3’等。可以是单引号、双引号和三引号。

    #单引号
    c1='Hello,Python'
    print (c1)
    c2='It is a "dog"!'
    print (c2)
    
    结果:Hello,Python
    It is a "dog"!
    

    转为大写字母

    c1.upper()
    
    结果显示:'HELLO,PYTHON'
    
    c1[0]  #获取第一个字母
    
    结果显示:'H'
    
    #双引号
    c1="Hello,Python"
    print (c1)
    c2="It is a dog!"
    print (c2)
    #三引号
    c3="""这
    是
    Python量化投资"""
    print (c3)
    
    结果显示:
    Hello,Python
    It is a dog!
    这
    是
    Python量化投资
    

    转义符

    #转义符
    print ('It\'s a dog!')
    print ("hello boy\nhello boy")
    
    结果显示:
    It's a dog!
    hello boy
    hello boy
    
    #自然字符串
    print ("hello boy\nhello boy")
    print (r"hello boy\nhello boy")
    
    结果显示:
    hello boy
    hello boy
    hello boy\nhello boy
    

    字符串的重复

    #字符串的重复
    print ("我爱Python\n"*10)
    结果显示:
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    我爱Python
    

    切片运算

    #子字符串
    #索引运算符从0开始索引
    #切片运算符[a:b]是指从第a下标开始到第b-1下标。同样第一位的下标为0,“包前不包后”
    c1=u"wangxiaochuan"
    c2=c1[0]
    c3=c1[7]
    c4=c1[:2]
    c5=c1[2:]
    c6=c1[4:7]
    c7=c1[-1] 
    c8=c1[-3:]
    cuts=[2,4,6]
    c9=c1+c2
    print (c2)
    print (c3, c4, c5, c6,c7,c8,c9)
    
    结果显示:
    w
    o wa ngxiaochuan xia n uan wangxiaochuanw
    
    • 数据类
      在Python中没有数组的概念,与数组最接近的概念就是列表和元组。
    1. 列表:是用来存储一连串元素的容器,用[ ] 来表示。
    #列表
    students=["小明","小华","小李","小娟","小云",3]
    print (students[len(students)-1])
    print (students[-1])
    print (students[2])
    
    结果显示:
    3
    3
    小李
    

    列表可以存放不同类型的数据,支持改写。

    #列表元素支持修改
    students=["小明","小华","小李","小娟","小云",3]
    print (students[3])
    students[3]="小月"
    print (students[3])
    students[5]="小楠"
    print (students[5])
    students[5]=19978
    print (students[5])
    
    结果显示:
    小娟
    小月
    小楠
    19978
    
    1. 元组
      元组中的元素的值不可以修改,只可以读取;元组的符号是( )。
    #元组
    students=("小明","小军","小强","小武","小龙")
    print (students[1])
    
    结果显示:
    小军
    

    元组比列表更加安全,因为不能修改,可以安全的保存一个引用,而不用担心里面的内容被其他程序修改,从而导致逻辑错误。
    3. 集合
    集合主要有两个功能:一个功能是进行集合操作,另一个功能是消除重复的元素。集合的格式是set(元素):

    a=[1,2,3,4]
    set(a)
    
    结果显示:
    {1, 2, 3, 4}
    
    a=set("abcnmaaaaggsng")
    print (a)
    b=set("cdfm")
    #交集
    x=a&b 
    print (x)
    print (a)
    #并集
    y=a|b
    print (y)
    #差集
    z=b-a
    print (z)
    #去除重复元素
    new=set(a)
    print (new)
    
    结果显示:
    {'a', 'n', 'm', 'c', 's', 'g', 'b'}
    {'c', 'm'}
    {'a', 'n', 'm', 'c', 's', 'g', 'b'}
    {'d', 'a', 'n', 'f', 'm', 'c', 's', 'g', 'b'}
    {'f', 'd'}
    {'a', 'n', 'm', 'c', 's', 'g', 'b'}
    
    1. 字典,也叫关联数组,可以理解为列表的升级版,用大括号{ } 括起来。
    #字典
    k={"姓名":"王小川","籍贯":"山东"}
    print (k["籍贯"])
    #添加字典里面的项目
    k["爱好"]="游泳"
    print (k["姓名"])
    print (k["爱好"])
    
    结果显示:
    山东
    王小川
    游泳
    

    Python 字典包含了很多的内置函数,比如比较两个字典元素。

    • 标识符
      规范:
      标识符的第一个字符必须是字母或下画线,不能出现数字或其他字符;
      标识符除第一个字符外,其他部分可以是字母、下画线或数字;
      标识符是大小写敏感的。

    常用关键字

    #常用关键字
    #查看一下关键字有哪些
    import keyword
    print (keyword.kwlist)
    
    结果显示:
    ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
    
    • 对象
      封装、继承、多重继承和多态
    a='abc'
    print (a.upper())
    print  (a.title())
    
    结果显示:
    ABC
    Abc
    
    • 行与缩进
      逻辑行主要是指一段代码在逻辑上的行数,物理行指的是我们实际看到的行数。
    #逻辑行与物理行
    #以下是3个物理行
    print ("abc")
    print ("789")
    print ("777")
    #以下是1个物理行,3个逻辑行
    print ("abc");print ("789");print ("777")
    #以下是1个逻辑行,3个物理行
    print ('''我是帅哥
    王老师很帅
    这是Python教程!''')
    
    结果显示:
    abc
    789
    777
    abc
    789
    777
    我是帅哥
    王老师很帅
    这是Python教程!
    

    缩进

    #如何缩进
    #一般情况下,行首应该不留空白
    import sys
    #缩进的方法有两种,可以按空格,也可以按tab键
    #if语句的缩进方法
    a=7
    if a>0:
         print ("hello")
    #while语句的缩进方法
    a=0
    while a<7:
        print (a)  # 思考下a为什么不包含7
        a+=1
    a=100
    
    结果显示:
    hello
    0
    1
    2
    3
    4
    5
    6
    
    • 注释
      一般通过# 进行注释,从# 开始一直到一行(物理行)结束的部分都是注释。

    2.3 Python 运算符与表达式

    • 算数运算符
      + 、- 、 * 、 / 等
      % 求余数,// 求商的整数部分等
    #"+":两个对象相加
    #两个数字相加
    a=7+8
    print (a)
    
    #两个字符串相加
    b="GOOD"+" JOB!"
    print (b)
    
    #"-":取一个数字的相反数或者实现两个数字相减
    a=-7
    print (a)
    b=-(-8)
    print (b)
    c=19-1
    print (c)
    
    
    #"*":两个数相乘或者字符串重复
    a=4*7
    print (a)
    b="hello"*3
    print (b)
    b="hello\n"*3
    print (b)
    
    #"/":两个数字相除
    a=7/2
    print (a)
    b=7.0/2
    c=7/2.0
    print (b)
    print (c)
    
    from __future__ import division  
    a=7/2
    print (a)
    
    #"**":求幂运算
    a=2**3   #相当于2的3次幂,就是2*2*2
    print (a)
    
    #"//":除法运算,然后返回其商的整数部分,舍掉余数
    a=10//3
    print (a)
    #"%":除法运算,然后返回其商的余数部分,舍掉商
    a=10%3
    print (a)
    b=10%1  #没有余数的时候返回什么?
    print (b)
    
    
    
    • 比较运算符
      用于比较两个值,不同类型的比较方式不一样,数字类型会根据数字的大小和正负进行比较,而字符串会根据字符串序列值进行比较。
    #"<":小于符号,返回一个bool值
    a=3<7
    print (a)
    b=3<3
    print (b)
    type(a)
    
    #">":大于符号,返回一个bool值
    a=3>7
    print (a)
    b=3>1
    print (b)
    
    #"!=":不等于符号,同样返回一个bool值
    a=2!=3
    print (a)
    b=2!=2
    print (b)
    
    #"<=":小于等于符号,比较运算,小于或等于,返回一个bool值
    a=3<=3
    print (a)
    b=4<=3
    print (b)
    #">="
    a=1>=3
    print (a)
    b=4>=3
    print (b)
    
    #"==":比较两个对象是否相等
    a=12==13
    print (a)
    b="hello"=="hello"
    print (b)
    
    
    • 逻辑运算符
      and 、 or 、not
    #not:逻辑非
    a=True
    b=not a
    print (b)
    c=False
    print (not c)
    
    #and:逻辑与
    '''
    True and True等于True
    True and False等于False
    False and True等于False
    '''
    print (True and True)
    
    #or:逻辑或
    '''
    True or True等于True
    True or False等于True
    False or False等于False
    '''
    print (True or False)
    
    
    • Python 中的优先级
      在这里插入图片描述

    2.4 Python 中的控制流

    我们通常根据不同的需要来选择控制语句,以控制某些代码段的执行方式,这些不同功能的控制语句就叫做控制流。

    • 控制流的功能,就是控制代码的执行方式

    两种方式实现同一功能

    i=1
    print (i)
    i=i+1
    print (i)
    
    i=1
    print (i)
    i=i+1
    print (i)
    
    结果显示:
    1
    2
    1
    2
    
    for k in range(0,2):
        i=1
        print (i)
        i=i+1
        print (i)
    
    结果显示:
    1
    2
    1
    2
    
    weather="rainy"
    if weather=="sunny":
        print ("basketball")
    else:
        print ("badminton")
    
    结果显示:
    badminton
    
    • Python 的三种控制流
    1. 顺序结构
    a=1
    print (a)
    a=a-1
    print (a)
    a=a+2
    print (a)
    
    结果显示:
    1
    0
    2
    
    
    1. 分支结构
    a=0
    if a==1:
        print ("She")
    else:
        print ("He")
    
    结果显示:
    He
    
    1. 循环结构
      for 结构
    for i in range(5):
        print ("hello world")
        print (i)
    
    结果显示:
    hello world
    0
    hello world
    1
    hello world
    2
    hello world
    3
    hello world
    4
    

    while 结构

    i=5
    while i:
        print ("hello world")
        print (i)
        i=i-1
    
    结果显示:
    hello world
    5
    hello world
    4
    hello world
    3
    hello world
    2
    hello world
    1
    
    • 认识分支结构 if

    在一种情况下的if用法

    #在一种情况下的if用法
    a=8
    if a==8:                         #这里的等号注意是==,而非=
        print ("hello world")
    
    结果显示:
    hello world
    

    在两种选择情况下的if用法

    #在两种选择情况下的if用法
    a=9
    if a==9:
        print ("hello world")
    else:
        print ("Null")
    
    结果显示:
    hello world
    

    在三种选择情况下的if用法

    #在三种选择情况下的if用法
    a=10
    if a==10:
        print ("hello world")
    elif a>8:
        print ("hello")
    elif a>6:
        print ("world")
    else:
        print ("Null")
        
    结果显示:
    hello world
    

    使用要点如下:
    各分支尽量不重复,并且尽量包含全部可能性;
    在if 语句里还可以再写if 语句,形成if 语句的嵌套;
    elif 和 else 语句永远只是可选的;
    在Python中没有 switch 语句。

    • 认识循环结构 for in
    for i in [1,2,3,4,5]:
        print (i)
    
    结果显示:
    1
    2
    3
    4
    5
    
    for i in range(1,10,3):
        print ("hello")
        print (i)
    
    结果显示:
    hello
    1
    hello
    4
    hello
    7
    
    char=u"你好世界"       #U代表这是Unicode编码
    tem=("元组:你好","元组:世界")
    list=["列表:你好","列表:世界"]
    dict={"first":"字典:你好","second":"字典:世界"}
    for i in char:
        print (i)
    for i in tem:
        print (i)
    for i in list:
        print (i)
    for i in dict:
        print (i)
    
    结果显示:
    你
    好
    世
    界
    元组:你好
    元组:世界
    列表:你好
    列表:世界
    first
    second
    

    使用要点:
    适当运用range 、 xrange函数;
    在for 中还可以再写for ,形成循环嵌套;
    合理地运用lambda 代替 for 循环,可以提高运行速度。

    • 认识循环结构 while
    a=True
    while a:
        print ("hello world")
    
    无限循环 hello world
    
    b=False
    while b:
            print ("hello world")
    else:
            print ("Null")
    
    
    a=1
    while a<5:
            if a<=3:
                print (a)
            else:
                print ("hello")
            a=a+1
    
    结果显示:
    1
    2
    3
    hello
    
    • break 语句和 continue 语句
      break 跳出循环
    for i in range(5,9):
        print (i)
        print ("hello world")
        if i>6:
            break
    结果显示:
    5
    hello world
    6
    hello world
    7
    hello world
    
    
    
    
    a=5
    while a<=8:
        a=a+1
        for i in range(1,3):
            print (a,i)
            if i==2:
                break
                
    结果显示:
    6 1
    6 2
    7 1
    7 2
    8 1
    8 2
    9 1
    9 2
    

    continue 语句 停止循环中的这一次执行,直接跳到下一次执行。

    n = 0
    while n < 10:
        n = n + 1
        if n % 2 == 0:      # 如果n是偶数,则执行continue语句
            continue# continue语句会直接继续下一轮循环,后续的print()语句不会执行
        print (n)
    
    结果显示:
    1
    3
    5
    7
    9
    
    for n in range(1,10):
        if n%2==0:
            continue
        print (n)
    
    结果显示:
    1
    3
    5
    7
    9
    
    
    a=1
    while a<7:
        a=a+1
        if a==4:
            continue 
        for i in range(7,10):
            if i==9:
                continue
            print (i)
    
    结果显示:
    7
    8
    7
    8
    7
    8
    7
    8
    7
    8
    
    

    continue 语句指的是结束执行本次循环中的剩余的语句,然后继续执行下一轮的循环;
    break 语句指的是直接结束这个循环,包括结束执行该循环的剩余的所有次循环。

    
    for i in range(10,19):
        if i==15:
            continue
        print (i)
    
    结果显示:
    10
    11
    12
    13
    14
    16
    17
    18
    
    for i in range(10,19):
        if i==15:
            break
        print (i)
    
    结果显示:
    10
    11
    12
    13
    14
    

    2.5 Python 函数

    • 认识函数
      函数是用来封装特定功能的。
      两种类型的函数:一种是系统自带的不用我们编写器功能的函数;另一种是我们自定义的需要我们编写其功能的函数。

    Python中的函数功能

    a="ace"
    print (len(a))
    3
    
    a="student,my xxxx"
    b=a.split('t')
    print (b)
    ['s', 'uden', ',my xxxx']
    
    a.upper()
    'STUDENT,MY XXXX'
    

    在Python中定义函数

    def function1():
        a=9
        a+=8
        print (a)
        
    function1()
    17
    
    • 形参与实参
    a="abcdm"
    print (len(a))
    5
    
    

    形参

    def function(a,b):
        if a>b:
            print (a)
        else:
            print (b)
    
    function(4,5)
    5
    

    实参

    def function1(a,b):
        if a>b:
            return 'a+b'
        else:
            return 'a-b'
    a=function1(1,3)
    print (a)
    a-b
    

    参数的传递

    def function(a=1,b=0):
        if a>b:
            return a
        else:
            return b
    max=function(7,8)
    print (max)
    8
    
    function()
    1
    
    
    a=9
    b=10
    c=1
    def function(add=0,b=0,c=0):
        print (add)
        print (b)
        print (c)
    function(a,c,b)
    9
    1
    10
    
    function(add=a,b=b,c=c)
    9
    10
    1
    
    function(b=7,add=8)
    8
    7
    0
    
    function(c=2,b=3,add=5)
    5
    3
    2
    
    • 全局变量与局部变量

    作用域: 一个变量在一定的范围内起作用。

    i=10      #这里定义一个全局变量i
    print (i)
    10
    
    def func():
        i=8 #给局部变量i赋值
    func()
    print (i)
    10
    

    局部变量

    i=2  #给全局变量i赋值
    def func2(a):
        i=7  #给局部变量i赋值
        print (i)
    func2(1)
    print (i)
    7
    2
    
    func2(i)
    7
    
    print (i)
    2
    

    全局变量

    def func3():
        global i
        i=7
    a=func3()
    print (a)
    print (i)
    None
    7
    
    • 对函数的调用与返回值
      对函数的调用
    i=7
    def func3 ():
        i=1
    func3 ()                 #调用函数
    print (i)
    7
    

    函数的返回值

    def test():
        i=7
        return i
    print (test())
    7
    
    def test2(i,j):
        k=i*j
        return (i,j,k)
    a=test2(4,5)
    print (a)
    4 5 20
    
    • 文档字符串
    def d(i,j):
        '''这个函数实现一个乘法运算。
        函数会返回一个乘法运算的结果。'''
        k=i*j
        return k
    help(d)
    
    Help on function d in module __main__:
    
    d(i, j)
        这个函数实现一个乘法运算。
        函数会返回一个乘法运算的结果。
    

    通过对文档字符串的说明,我们就可以明白这个函数的功能及所返回结果的属性。

    2.6 Python 模块

    • 认识 Python 模块
      模块:是可以实现一项或多项功能的模块。函数是一段程序,模块是一项程序块,函数和模块都用来实现功能,但是模块的作用范围比函数广,模块中可以包含很多函数。
      通过import 导入整个模块
    import pandas
    import pandas as pd
    

    通过from import 导入整个模块

    from pandas import Series
    

    sys 模块
    我们把在标准库中与系统功能有关的这些模块叫做sys 模块。

    import sys
    
    print (sys.argv[0])
    
    sys.getdefaultencoding()
    'utf-8'
    
    • from import 详解
    from pandas import DataFrame
    df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
    df1.head(2)
    
    
      data1	key
    0	0	b
    1	1	b
    
    from pandas import *
    df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
    df1.head(2)
    
      data1	key
    0	0	b
    1	1	b
    
    
    • 认识__name__属性
      主模块:如果一个模块是被直接使用的,没有被其他模块调用。
      如果一个模块的__name__ 属性的值是__main__ ,那么这个模块是主模块。
    print (__name__)
    __main__
    
    if __name__=="__main__":
         print ("It's main")
    else:
         print ("It's not main")
    
    It's main
    
    • 自定义模块:需要我们自己定义和编写
      定义一点代码,保存,调用

    • dir()函数
      通过dir()函数来查看指定模块的功能列表。

    import pandas
    dir(pandas)
    

    还能查看任意指定对象的功能列表。

    a = [1]
    dir(a)
    
    

    2.7 Python异常处理与文件操作

    • Python 异常处理
      出现异常,首先检查语法规则或者是否打错字符;然后网上搜索各路大神的解决方案。
    • 异常的发生
      系统自定义的异常
      自定义异常
    class SoSError(Exception):                 #按照命名规范,以Error结尾,并且自定义异常需要继承Exception类
        def __init__(self):
            Exception.__init__(self)
    try:
        i=8
        if i>7:
            raise SoSError()
    except SoSError:
        print ("SoSError:我错了")
    
    SoSError:我错了
    
    
    • try finally 的使用
      无论是否发生异常,都将执行最后的代码
    #假如要实现不管中间是否发生异常,都要输出hello world
    try:
        print (w)
    finally:
        print ("不管上面是否异常,我必须输出hello world!")
    
    不管上面是否异常,我必须输出hello world!
    
    
    • 文件操作

    创建某个文件

    #创建某个文件
    import os
    os.mkdir(r"d:/newdir")
    

    文件的基本操作:增、删、查、改。

    展开全文
  • Python与量化投资:从基础到实战》主要讲解如何利用Python进行量化投资,包括对数据的获取、整理、分析挖掘、信号构建、策略构建、回测、策略分析等,也是利用Python进行数据分析的指南,有大量的关于数据处理分析...

    利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习

    《Python与量化投资:从基础到实战》主要讲解如何利用Python进行量化投资,包括对数据的获取、整理、分析挖掘、信号构建、策略构建、回测、策略分析等,也是利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,并将重点介绍如何高效地利用Python解决投资策略问题。

    参考学习:

    《量化投资以Python为工具》主要讲解量化投资的思想和策略,并借助Python 语言进行实战。

    《Python与量化投资:从基础到实战(王小川)》PDF,562页,带书签目录,文字可以复制;配套源代码。

    《量化投资以Python为工具(蔡立耑 )》PDF,550页;配套源代码。

    网盘下载:http://106.13.73.98

    1499715-20190604164259700-2033847162.png

    转载于:https://www.cnblogs.com/zyk01/p/10975231.html

    展开全文
  • Python与量化投资 从基础到实战 第六章 常见的量化策略及其实现 在前面章节基础上,本章将展示什么是量化投资,以及如何利用优矿量化平台编写各种策略。 本博客只介绍基本的理论,不进行深入研究,优矿平台可以免费...

    Python与量化投资

    从基础到实战

    在这里插入图片描述

    第六章 常见的量化策略及其实现

    在前面章节基础上,本章将展示什么是量化投资,以及如何利用优矿量化平台编写各种策略。
    本博客只介绍基本的理论,不进行深入研究,优矿平台可以免费使用,但是运行条件受限。可以研究其他的量化平台,不过想要条件好,就得会员。

    6.1 量化投资概述

    • 量化投资简介
      量化投资是借助量化金融分析方法进行资产管理的一种投资方法,而量化金融分析方法是一种结合了金融数据、个人经验、数学模型及计算机技术的复杂金融及分析方法。
      金融数据:行情数据、高频数据、因子数据、新闻数据等
      个人经验:基金经理的个人投资经验
      数学模型:统计分析、机器学习、深度学习
      计算机技术:简单计算、并行计算

    • 量化投资策略的类型

    常见的资产类别:
    股票策略
    基金策略:指数、分级、股票型、债券型、货币型、衍生证券型基金
    期货策略:股指、商品期货
    期权策略:指数和个股期权
    债券策略:国家、政府、上市公司、未上市公司、其他资产债券、组合债券
    海外资产策略:直接投资海外市场证券、通过国内跟踪海外市场的基金来进行间接投资

    • 量化研究的流程
      在这里插入图片描述

    获取数据:公司财务数据、新闻数据、关联数据、基金行情数据、高频数据

    数据分析挖掘:传统分析方法、新兴大数据、机器学习、数据挖掘方法

    构建信号:在构建信号前进行数据处理、标准化、去极值、中性化;基础信号的研究、分组回测、ic、ir、衰减、行业分布;将基础信号合成复杂信号。

    构建策略:策略模板

    回测: 完美符合历史的真实行情、股票分红送转、除权除息处理、股票涨跌停处理等

    策略分析: 策略归因、风险归因、订单分析、成交分析、多策略分析

    模拟交易: 接入实时行情、实时获取成交回报、篮子交易、算法交易

    实盘交易: 接入真实券商账户 、 极速行情、实时下单、实时获取订单回报

    历史一直在变,唯一不变的是历史一直在发展。
    在量化投资领域,数据是最大的核心,甚至是唯一的核心。

    6.2 行业轮动理论及其投资策略

    • 行业轮动理论简介
    • 行业轮动的原因
    • 行业轮动投资策略

    6.3 市场中性Alpha 策略

    • 市场中性Alpha 策略介绍
    • 市场中性Alpha 策略的思想和方法
    • 实例展示

    6.4 大师策略

    • 麦克· 欧希金斯绩优成分股投资法
    • 杰拉尔丁·维斯蓝筹股投资法

    6.5 CTA 策略

    • 趋势跟随策略
    • 均值回复策略
    • CTA 策略表现分析

    6.6 Smart Beta

    • 基于权重优化的Smart Beta
    • 基于风险因子的Smart Bata

    6.7 技术指标类策略

    • AROON 指标
    • BOLL 指标
    • CCI 指标
    • CMO 指标
    • Chaikin Oscillator 指标
    • DMI 指标
    • 优矿平台因子汇总

    6.8 资产配置

    • 有效边界
    • Black-Litterman 模型
    • 风险评价模型

    6.9 时间序列分析

    • 与时间序列分析相关的基础知识
    • 自回归(AR)模型
    • 滑动平均(MR)模型
    • 自回归滑动平均(ARMA)模型
    • 自回归差分滑动平均(ARIMA)模型

    6.10 组合优化器的使用

    • 优化器的概念
    • 优化器的API接口
    • 优化器实例

    6.11 期权策略:Greeks 和隐含波动微笑计算

    • 数据准备
    • Greeks 和隐含波动率计算
    • 隐含波动率微笑

    第七章 量化投资十问十答

    量化投资涉及很多方面,有各种场景下的应用,定义也比较困难,我们姑且将其定义为借助于数学知识、统计学知识开发出策略模型,根据策略模型给出的信号严格执行信号的投资过程。其本质是从数据的角度提炼出市场不够有效的成分,用模型加以概括。

    展开全文
  • Python与量化投资 从基础到实战 第五章 通联数据回测平台介绍 主要是对通联数据回测平台的介绍,通联数据驱动下有若干个投资研究模块。以优矿平台为例,可能每个量化平台对函数的调用不太一样,本章不做具体分析,...

    Python与量化投资

    从基础到实战

    在这里插入图片描述

    第五章 通联数据回测平台介绍

    主要是对通联数据回测平台的介绍,通联数据驱动下有若干个投资研究模块。以优矿平台为例,可能每个量化平台对函数的调用不太一样,本章不做具体分析,不深入研究,只介绍相关理论,感兴趣的,可以深入探究。

    5.1 回测平台函数与参数介绍

    • 设置回测参数
      start 与end (设置回测区间)
      universe (证券池)
      set_universe (静态证券池)
      DynamicUniverse (动态证券池)
      apply_fifter
      benchmark ( 参考基准)
      fre 和 refresh_rate (策略运行频率)

    • accounts 账户设置
      AccountConfig (账户配置)
      account_type (账户类型设置)
      capital_base (初始资金设置)
      position_base (初始持仓设置)
      cost_base (初始成本设置)
      commission (手续费设置)
      slipper (滑点设置)
      margin_rate (保证金比率设置)
      dividend_method (基金分红方式设置)

    • initialize (策略初始化环境)

    • handle_data (策略运行逻辑)

    • context (策略运行环境)
      now (策略运行时的当前时刻)
      current_date (当前回测日期)
      previous_date (回测日期的前一交易日)
      current_minute (当前运行的分钟值)
      current_price (获取成交价)
      get_account (获取交易账户)
      get_universe (获取当前交易日证券池)
      transfer_cash (账户间资金划转)

    5.2 股票模板实例

    5.3 期货模板实例

    5.4 策略回测详情

    5.5 策略的风险评价指标

    • 年化收益率
    • 基准年化收益率
    • 阿尔法 (Alpha)
    • 贝塔 (Beta)
    • 夏普比率 (Sharpe Ratio)
    • 收益波动率 (Volatility)
    • 信息比率 (Information Ratio)
    • 最大回撤
    • 换手率

    5.6 策略交易细节

    • 回测交易撮合机制和订单委托
    • 滑点
    • 交易税费
    • 停牌退市
    • 涨跌停
    • 期货连续合约跳空处理
    展开全文
  • 帮助初学者使用python进行量化投资分析,本文声明:适合初学者进行学习,有基础的可以选择其他资料自行学习
  • Python量化投资与A股量化实战课程概述 越来越多的投资者和机构对量化投资及程序化交易产生了兴趣。也许你想求得一份量化投资的相关工作,但又觉得量化投资很神秘,不知道从何学起。马云说,对于新兴事物,绝大多数人...
  • 搭建基于Python量化开发环境,首先安装anaconda,anaconda是一个开源的python包管理器,是一个可对python开发组件进行综合管理的有效平台。anaconda中本身包含了python的内核,安装完anaconda后,就自带了python。...
  • 如何用python进行量化投资?

    千次阅读 多人点赞 2019-03-12 13:41:16
    国内量化投资近几年开始盛行,如果你想对量化投资有进一步了解的话,里面有几篇量化投资策略类干货贴分享给大家,希望对各位有帮助。 量化交易策略 价值投资 成长股内在价值投资:http://www.joinquant.com/post/541...
  • 量化投资python为工具:数据、源代码、习题答案,自己整理的,分享给大家。
  • 第二部分:量化投资与Python Ipython:交互式的Python命令行 Ipython常用的魔术命令 Python调试器命令 Ipython快捷键 NumPy:数组计算 NumPy:ndarray-多维数组对象 NumPy:索引和切片 NumPy:布尔型索引 NumPy:...
  • Python3 量化投资,股票数据分析
  • Python金融分析与量化交易实战视频教程,完整版20章,172节,附源码+数据;Python金融分析与量化交易实战课程旨在帮助同学们快速掌握Python数据分心核心技能交易交易系统策略部署回测分析。 全部课程内容皆以...
  • Python小白量化学习包

    2019-10-06 22:05:36
    小白量化学习-自创指标设计 一、准备工作 1、首先把“HP_formula.py”文件复制到自己的工程目录中。 2、在新文件开始增加下面4条语句。 import numpy as np import pandas as pd from HP_formula import * import ...
  • 量化投资:以Python为工具》一共分为5 部分,第1 部分是Python 入门,第2 部分是统计学基础,第3 部分是金融理论、投资组合量化选股,第4 部分是时间序列简介配对交易,第5 部分是技术指标与量化投资。《量化...
  • 量化投资已经进入了一个高速发展期,在数据分析、交易逻辑验证、计算机自动执行加持下,使得投资者精度提高,避免价格波动带来的情绪起伏。计算机执行 + 传统投资经验= 新式投资武器如果你还在用以...
  • 近年来,金融领域的量化分析越来越受到理论...量化分析目前已经涉及到金融领域的方方面面,包括基础和衍生金融资产定价、风险管理、量化投资等。随着大数据技术的发展,量化分析还逐步大数据结合在一起,对海量金...
  • [python量化投资](http://www.gfedu.cn/aqf/)计算机语言是人计算机之间传递信息的媒介,也是开发程序打开互联网新世界的钥匙! 大数据时代的出现,未来30年将对计划经济和市场经济进行重新定...
  • 本文选自《Python与量化投资:从基础到实战》一书。作为投资者,我们常听到的一句话是“不要把鸡蛋放入同一个篮子中”,可见分散投资可以降低风险,但如何选择不同的篮子、每个篮子放多少鸡蛋,便是见仁见智的事情了...
  • Python与量化投资 从基础到实战 第四章 常用数据的获取整理 4.1 金融数据类型 4.2 金融数据类型的获取 4.3 数据整理
  • 数据库设计 CREATE TABLE `stock_lowest` ( `stock_code` VARCHAR(50) NOT NULL COMMENT '股票代码' COLLATE 'utf8_unicode_ci', `lowest_price` DECIMAL(10,4) NOT NULL DEFAULT '0.0000' COMMENT '近一年最低...
  • 主要讲解量化投资的思想和策略,并借助...其次,向读者介绍量化投资的理论知识,主要讲解量化投资所需的数量基础与量化投资的类型等方面;最后,将以上两部分内容结合起来,讲述如何在Python语言中构建量化投资策略。
  • 量化投资Python为工具,原书电子版
  • data = pd.DataFrame({'k1': ['one'] * 3 + ['two'] * 4, 'k2': [3, 2, 1, 3, 3, 4, 4]}) data k1 k2 0 one 3 1 one 2 2 one 1 3 two 3 4 two 3 5 two 4 ...# 在不加任何参数时,Pandas会将完全相同的行去重 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,871
精华内容 2,748
关键字:

python与量化投资

python 订阅