【量化投资】量化投资技术基础 ---- Python 急速入门
文章目录
- 【量化投资】Python 入门
- 一、为什么使用 python
- 二、我们需要学些什么
- 三、Python 基础
- 1、输入输出
- 2、数据转换
- 3、导包
- 4、数据类型
- 1)数字
- 2)字符串
- 3)列表
- 4)元组
- 5)集合
- 6)字典
- 5、函数
- 1)函数格式
- 2)参数
- 2)全局变量的使用
- 普通函数
- 高阶函数
- 6、文件操作
- 1)基本文件读写
- 2)使用 wity 语句
- 7、异常处理
- 1)异常类型
- 2)异常捕获与处理
- 3)手动抛出异常
- 4)finally
- 8、获取命令行参数
- 9、类
- 1)构造函数
- 2)类的继承
- 3)对象删除
- 四、小结
【量化投资】Python 入门
一、为什么使用 python
说起Web领域 你立马会想到 Java 和 JavaScript语言,它们在Web领域不可撼动;Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现。
在量化投资(证券和比特币)开源项目里,全球star数排名前10位里面,有7个是用Python实现的。从数据获取到策略回测再到交易,覆盖了整个业务链,还是很厉害的!
因此,堪称入门免费、简单、可移植性、解释性、 丰富的库、 面向对象的Python语言,便就是它了!
其实,我认为,不管做不做量化分析,或者你是不是程序员,都应该学习 python ,数学专业可以用它建模,白领可以用它批量处理 excel,初高中生可以通过 python 入门编程,总之,这真的是一门简单强大的语言
- 我找了半天找不到那个 xx编程的洗脑广告,不过我估计有不少人看过
- 其实有很多人不知道 dokidoki 就是用 python 写的:
- 之前那个火爆全网的武汉加油,也是 python 写的:
- 之前很火的词云,也是 python 写的
- 当然,python 最火的还是爬虫:
总之,就算你对量化投资不感兴趣,我也建议你学学 python ,毕竟艺多不压身嘛,同时也可以把春节假期长肉的时间利用起来
二、我们需要学些什么
除了语言基础之外,对于量化投资,我们还要学什么额外的 python 知识?
1、图形库
人脑对图形是最敏感的,除了机器分析数据外,我们还要将数据绘制成图形,方便我们去分析,所以一个简洁方便的图形库是必不可少的
2、爬虫
量化分析中有个概念是回测,其作用是将我们设计好的程序,用以前的数据跑一下,观察其盈利情况如何,只有在程序可靠的情况下,我们才真的会让其上线进行交易
而回测使用的数据,就需要我们从金融网站中爬取使用了
3、数据存储与处理
在爬到数据之后,我们还要对数据做基本的清洗与处理,以方便程序使用
4、自动交易
作为业余理财人,我们还要腾出时间,做自己本职的工作,不可能天天盯着股票看,所以,程序自动买卖交易是不可少的,这个也需要我们去考虑
python 可做的还有很多很多,但是对于量化投资,我们还是着重考虑上面几个点。
三、Python 基础
1、输入输出
我们有时需要通过输出判断模型数据的
python 输入输出代码如下:
print("hello world") # hello world 输出
input("please input:") # 执行后。会输出 please input 然后阻塞等待输入
2、数据转换
python 没有显示的数据类型, 其数据类型的定义在赋值时就确定了
3、导包
python 原sdk中可能没有我们要用的函数,所以需要导入其他的包使用
python 导包和 java 一样,使用 import 语句
除了基础的导包方式外,我们还可以为导入的包起别名,或者直接导入方法
- 为导入的包起别名:
import math as m # 为 math 包起别名为 m
print(m.pi)
- 只导入方法:
这里的 import * 表示导入 math 类中的所有方法,这样,我们在使用 math 的方法的时候就不用带上 math 了
from math import *
ceil(3.14) # 4.0
4、数据类型
1)数字
数字包含 int,float,boolean
和 complex(复数)
这里要注意,python 中没有显示的数据类型定义,数据类型是在初始化的时候就决定好的:
int,float
可以通过 float(),int()
相互转换:
True
和 False
其实对应的是数字 1 和 2(这点其实有够奇葩的):
复数用 a+bj
的形式表示,a代表实部,b代表虚部,同时,也可以用 complex(a,b)
的形式声明复数:
2)字符串
字符串用 ‘’ 或者 “” 声明
3)列表
列表是 java 中数组,ArrayList 甚至 Stack Queue 的集合体
用中括号[]
声明,可以使用下标访问
- 列表切片:
切片的访问方式如下 [start:end:step]
其中的 -1,表示访问倒数第一个元素,要注意,切片的访问是左闭右开的,即上面的例子范围为 [0,6)
步长为2
start end 不写,默认从头到尾:
也可以用切片的方式,对列表进行倒序访问([::-1]):
列表可以使用 append()
添加元素,几个列表也可以通过 +
进行拼接:
- 栈式访问:
栈是先进后出的数据结构,列表同样支持这样的访问方式,使用 pop()
函数即可弹出列表末尾元素
- 队列式访问:
队列是先进先出的数据结构,使用 pop(0)
可以弹出列表头部的元素
4)元组
元组类似于列表,但是元组一旦定义,就无法修改
元组使用 小括号()
声明
和列表不用,因为 元组不可变,所以其可以作为字典的 key,同时,元组也可以作为函数的不可变返回值,确保返回值的数据安全性
5)集合
集合类似 java 中的 HashSet,同样的,集合中的元素不可重复,并且会默认进行排序
其用 大括号{}
声明
删除元素,判断元素是否存在使用的语法如下:
6)字典
字典类似于 java 的 HashMap,用大括号 {}
声明
字典的 key 不可以重复,如果出现相同的 key ,那么最新的 key 对应的 value 替代原 value
遍历 map 可以使用 items()
方法:
5、函数
1)函数格式
python 中定义函数的格式如下:
def funcName(args):# logicreturn res
不需要显示的注明返回值类型
2)参数
我们可以对函数参数添加默认值:
def funcWithDefaultVal(num1,num2=123):return num1+num2print(funcWithDefaultVal(1)) # 124
在传参的时候,也可以指定对某个参数赋值:
这种方式类似于 map 中的 key-value 方式
def funcWithDefaultVal(num1,num2):return num1-num2print(funcWithDefaultVal(num2=100,num1=0)) # -100
2)全局变量的使用
普通函数
函数内与函数外同名的参数,默认情况下不是同一个:
a = 100
def changeA():a=0changeA()
print(a) # 100
如果想在函数内使用全局变量,需要提前声明 global:
a = 100
def changeA():global aa=0changeA()
print(a) # 0
高阶函数
高阶函数(Higher-order function)或仿函数(functor)是可以接受函数作为参数的函数:
- 使用一个或多个函数作为参数
- 返回另一个函数作为输出
Python 里的任何函数都可以作为高阶函数,下面举一个简单的例子:
# 创建一个函数,将参数列表中每个元素都变成全大写
def high(l):return [i.upper() for i in l]# 创建高阶函数,接受一个函数和一个列表作为参数
def test(h, l):return h(l)l = ['python', 'Linux', 'Git']
# 运行高阶函数,返回预期的结果
test(high, l) # ['PYTHON', 'LINUX', 'GIT']
python 中最常用的高阶函数就是 map()
了
map
是一个在 Python 里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。
lst = [1, 2, 3, 4, 5]
def square(num):"返回所给数字的平方."return num * numlist(map(square, lst)) # [1, 4, 9, 16, 25]
6、文件操作
文件读取在 java 中可以说是一个不痛不痒的功能了,因为实际项目中很少用,web 项目中的 orm 层一般都用 mybatis 这样的框架,存储媒介都是数据库
但是在 python 中,有时我们的信息都存储在 csv 或者 txt 里,这时候,文件读取就显得至关重要了
1)基本文件读写
文件读写的流程
**1、**打开文件,获取文件对象
**2、**对文件对象进行 读/写操作
**3、**关闭文件对象
获取文件使用 open(参数1,参数2)
函数
open(参数1,参数2)
函数有两个参数,参数1是文件所在路径,参数2是文件操作权限
文件操作权限有下面三个:
**r:**只读
**w:**文件覆写,会覆盖源文件的所有内容
**a:**文件内容添加,会在源文件的末尾添加指定内容
fObj = open(<file path>,<op>)
这里,我们先在本地磁盘下准备数据集
- 读取文件:
fObj = open("/Users/faro_z/CodePath/python/data.txt","r")
str = fObj.read()
fObj.close() # 无论什么时候,都必须记得文件操作结束后关闭文件,避免出现线程阻塞
print(str)
- 写入文件信息:
如果指定文件不存在,会自动创建新的文件
fObj = open("/Users/faro_z/CodePath/python/new_file.txt","w")
fObj.writelines("I am faroz \n I like coding")
fObj.close()
2)使用 wity 语句
对于文件操作,python 中建议使用 with 语句,因为 with 语句会自动关闭,就算读取过程中报错了,也会自动执行 close
其作用,类似于 try - finally
str = ""
with open("/Users/faro_z/CodePath/python/data.txt","r") as fObj:str = fObj.read()fObj.close()
print(str)
7、异常处理
1)异常类型
在抛出异常、处理异常之前,我们要了解 python 中有哪些异常
**TypeError:**类型异常,一般出现在进行该类型不支持的操作上
>>> print(1 + "kushal")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
**NameError:**访问未定义的变量
>>> print(kushal)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
NameError: name 'kushal' is not defined
**BaseException:**所有异常的基类
对所有异常感兴趣的同学,可以查阅这篇文章:https://www.cnblogs.com/zln1021/p/6106185.html
2)异常捕获与处理
try:statements to be inside try clausestatement2statement3...
except ExceptionName:statements to evaluated in case of ExceptionName happens
3)手动抛出异常
抛出异常,我们使用 raise 语句
>>> raise ValueError("A value error happened.")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: A value error happened.
>>> try:
... raise ValueError("A value error happened.")
... except ValueError:
... print("ValueError in our code.")
...
ValueError in our code.
4)finally
finally
是无论如何都会执行的
在 JDBC 中,我们一般会把关闭数据库连接的操作,写在 finally
块中,这样,就算前面的业务代码出现错误,导致程序中断,也不会影响我们的数据库连接关闭操作
同理,我们上文中讲到的文件操作,其close()
函数,我们也可以写在 finally 中,保证文件关闭操作一定会执行
>>> try:
... raise KeyboardInterrupt
... finally:
... print('Goodbye, world!')
...
Goodbye, world!
KeyboardInterrupt
Traceback (most recent call last):File "<stdin>", line 2, in ?
8、获取命令行参数
python 作为脚本语言,是可以用来写脚本的
执行脚本,必然需要程序能够获取命令行参数,那怎么使用 python 获取命令行参数呢?
这里,我们需要导入 sys
库,使用 sys.argv
获取参数
sys.argv
是一个列表,其第一个元素表示文件自身,其他位置的元素就是我们当前行的命令行参数
import sys
print(sys.argv) # 打印出命令行参数
可以看到,命令行参数被成功打印:
9、类
python 中类的写法如下:
class nameoftheclass(parent_class):statement1statement2statement3
类中,我们可以声明方法:
class MyClass(object):"""A simple example class"""i = 12345# python 类方法必须传入 self ,表示对象中的方法# 但是在调用方法的时候,这个 self 是省略的def f(self):return 'hello world'
1)构造函数
构造函数写法如下:
python 中,可以不用显示的定义成员变量,但是这种方法设置的变量,子类是无法访问的
def __init__(self):self.data = []
2)类的继承
当一个类继承另一个类时,它将继承父类的所有功能(如变量和方法)。这有助于重用代码。
class Person(object):# 成员变量 space ,只有显示的声明子类才能使用space = ""def __init__(self):self.space="human"def printSpace(self):print(self.space)class Student(Person):def __init__(self,name="default"):Person.__init__(self)self.name=namestu = Student("FARO_Z")
print(stu.name)
stu.printSpace()
和 java 不同,python 是支持多继承的:
class MyClass(Parentclass1, Parentclass2,...):def __init__(self):Parentclass1.__init__(self)Parentclass2.__init__(self)......
3)对象删除
现在我们已经知道怎样创建对象,现在我们来看看怎样删除一个对象。我们使用关键字 del
来做到这个。
>>> s = "I love you"
>>> del s
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
del 实际上使对象的引用计数减少一,当对象的引用计数变成零的时候,垃圾回收器会删除这个对象。
四、小结
也许你发现,学完今天这些知识,你还是写不出一个像样的程序
确实,今天介绍的只是 python 的基础语法,并且还是建立在读者已经掌握其他语言的情况下进行的简单介绍
python 的强大之处在于,有大量的第三方库可以使用,借助这些库,我们可以编写爬虫,绘制图形,甚至有专门针对 python 的 web 框架
在后面几天,我会一次介绍 python 中的数据处理、图像绘制、爬虫等库,逐步为我们的量化投资程序添砖加瓦
【量化投资】量化投资技术基础 ---- Python 急速入门相关推荐
- 慕课网python零基础入门教程_零基础Python爬虫入门学习一之综述
原标题:零基础Python爬虫入门学习一之综述 大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章 ...
- 零基础Python培训入门 教你认识下这些基础内容
Python编程语言为什么近些年这么火?从它本身的语言特性来看,Python编程简单而且直接,适合初学编程者,让初学者能够专注于编程逻辑,而不是在不流通的语法细节上感到困惑.零基础Python培训中心 ...
- python语言编程基础-Python语言入门详解!快速学成Python!
原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...
- 零基础python从入门到精通 pdf-PYTHON从入门到精通 PDF 下载
相关截图: 资料简介: <Python从入门到精通>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术.全书共分22章,包括初 ...
- python 入门基础-Python 如何入门?
相信对于每个人而言,知道编程和学习编程这件事,出发点是不同的.我在北京接触编程的时间是2013年,那个时候还在一个二线城市上大学,还没有这么多各种融资,各种互联网创业的氛围,大家想的更多的是一些线下的 ...
- 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通
跟老齐学Python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧下载吧! 目录: 第1季 基础 ...
- 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通.pdf
跟老齐学Python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧下载吧! 目录: 第1季 基础 ...
- 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通 电子版(pdf格式)
跟老齐学python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧在巴士下载站下载吧! 目录: ...
- 零基础python从入门到精通 pdf-跟老齐学Python:从入门到精通PDF电子版
跟老齐学Python:从入门到精通是一本面向初学python的人提供的最好教程,在书中作者以非常欢快的描述方式为读者讲解Python语言,以各种案例帮助你能够更简单的深入学习! 跟老齐学Python介 ...
最新文章
- LeetCode刷题-两数之和(持续更新)
- Maven 3-Maven依赖版本冲突的分析及解决小结
- Mysql修改字段名和长度_mysql中修改表字段名/字段长度/字段类型详解
- boolean 默认_MySQL数据类型测试:BOOLEAN、TINYINT测试数据总结(第八节)
- 01-mysql数据库入门篇-认识mysql-01-05
- win10 uwp 改变鼠标
- grafana默认用户名密码_提升运维格调?Grafana整合Zabbix
- 小程序——列表,详情页(模板)
- java计算机毕业设计小小银动漫网站源码+lw文档+系统+数据库
- 计算机excel函数输入法,Excel公式输入技巧3法
- NPIO操作Excel入门
- 使用RDS for MySQL数据库(本地连接、数据库迁移、JDBC操作)
- Xubuntu22.04之连接filco蓝牙键盘
- 这些成人世界的“黑话”,你能听懂多少?
- illustrator cs5 for mac 官方简体中文版 破解
- centos7.7 安装google浏览器
- google firebase入门之服务器集成
- 作为校招loser,我如何在一年半后的社招中咸鱼翻身
- 亚马逊erp系统详细介绍,新手第一步
- [应用相关]NUCLEO-H7A3ZI-Q板子学习
热门文章
- pdf横向打印java_C#使用adobe acrobat reader命令行在横向打印PDF文档
- JSP设置Excel表格换行_Excel中快速将阿拉伯数字转化为大写文字的妙招
- supervisor的程序控制修改参考方案
- Revit API之BoundingBoxXYZ的用法和剖面框(Section Box)
- C#实现将Chart图表生成JPG图片的方法
- Linux 上安装iib 9.0
- 最新!使用Python爬取蓝奏云文件下载直链并下载,支持批量爬取,已封装为函数,可直接使用(含注释、库的使用解释)
- 小程序CMS商业正版V3.1 一键生成小程序+安装说明
- A man who has iron bone
- mac解决//go:linkname must refer to declared function or variable