小米一边吃着冰激凌,一般若无其事地问大麦:“Hi,我说大麦哥哥,你学Python想干嘛呀?”
大麦:“我说小米妹妹,哥做的事儿,说出来,你也不懂!”
“不懂?!你没说怎么知道我不懂?”,小米不屑地看着大麦,眼神中流露出好奇和杀气。
“跟你说吧,我学Python是研究量化交易呢”,大麦随口说道,可把小米妹妹搞糊涂了。
紧接着大麦又补充说:“量化交易,就是通过数据计算生成交易信号来交易,你们觉得在手机APP上交易很了不起吧!其实,我们都不用人盯盘就可以让电脑自动交易,不懂了吧!”
小米轻蔑的噘嘴一笑道:“你懂!你懂!就你懂!我也是学过计算机的,谁怕谁,我也要学量化交易,不就是计算机编程嘛,我的高频头男朋友比你厉害!”
“高频头是谁!”
“这你都不知道,还编程呢,ChatGPT啊!”
“额,额,额,这也行!”,大麦一时语塞,竟无言以对。
学习时间:对于初学编程者,大概需要一周时间;对于有编程基础的老手,看个人情况,也许一下午就OK了。
学习目标:掌握Python的基本语法,可以灵活运用list、dict,掌握时间转化和文件操作。
学习难点:函数、模块,以及list、dict、时间转换等。
Python(英国发音:/ˈpaɪθən/;美国发音:/ˈpaɪθɑːn/)是一种计算机编程语言,它的创始人为Guido van Rossum。Python是一种通用的编程语言,旨在让人们更容易地编写代码。它是一种高级编程语言,意味着它比汇编语言更加抽象,更关注问题的解决,而非底层操作。
Python的设计目标是让代码更易于阅读和理解。它支持多种编程范式,包括面向对象、过程式和函数式编程。此外,Python是一种解释型语言,这意味着它可以在运行时逐行解释,这使得调试变得更容易。
Python被广泛应用于各种领域,包括Web开发、数据分析、人工智能、机器学习、网络编程、自动化脚本等。它拥有强大的社区和丰富的库,使得开发者可以快速解决问题并开发出高效的应用程序。
Python的语法简洁明了,易于学习。它的学习曲线相对平缓,使得初学者可以快速上手编写简单的程序。同时,Python也是一种非常强大的编程语言,可以用于开发大型的复杂应用程序。
Python是一种高级编程语言,它的基本语法包括数据类型、变量、运算符、表达式、控制结构、函数、模块等。下面是对这些基本语法的一个简单介绍:
Python支持多种数据类型,包括整数(int)、浮点数(float)、布尔值(bool)、字符串(str)、列表(list)、元组(tuple)、字典(dict)等。
整数(int):表示整数值,没有限制大小。例如:10、-20、0等。
浮点数(float):表示带有小数点的数值,包括正数和负数。例如:3.14、-2.56、0.0等。
布尔值(bool):表示逻辑值,只有两个取值,即True和False。
字符串(str):表示文本数据,可以使用单引号(')或双引号(")括起来。例如:“Hello, world!”、'python’等。
列表(list):表示有序的元素集合,可以使用方括号([])括起来,元素之间用逗号分隔。例如:[1, 2, 3, ‘a’, ‘b’, ‘c’]等。
元组(tuple):与列表类似,表示有序的元素集合,但元组是不可变的,即不能修改其中的元素。元组使用圆括号(())括起来,元素之间用逗号分隔。例如:(1, 2, 3, ‘a’, ‘b’, ‘c’)等。
字典(dict):表示键值对的集合,使用大括号({})括起来,键值对之间用冒号分隔,每个键值对之间用逗号分隔。例如:{‘name’: ‘Alice’, ‘age’: 20}等。
后面我们会重点介绍list和dict的使用,这两个在量化交易中会频繁使用,需要重点介绍。
Python中的变量是一种存储数据的容器,可以存储各种类型的数据。变量使用变量名来引用,变量名必须以字母或下划线开头,不能使用数字开头。变量在声明后可以存储任何类型的数据。
在Python中,声明变量的方式很简单,只需要使用变量名(变量名相当于对变量的引用)和赋值运算符(=)来给变量赋值。例如:
x = 10 # 声明一个整数类型的变量x,并赋值为10
y = 3.14 # 声明一个浮点数类型的变量y,并赋值为3.14
z = "hello" # 声明一个字符串类型的变量z,并赋值为"hello"
在Python中,变量名是区分大小写的,因此x和X是两个不同的变量。此外,Python具有动态类型系统,这意味着变量的类型可以随时改变。例如:
x = 10 # 声明一个整数类型的变量x,并赋值为10
print(x) # 输出10
x = "hello" # 将变量x的类型改为字符串,并赋值为"hello"
print(x) # 输出"hello"
在Python中,还可以使用变量名来访问变量的值。例如:
x = 10
print(x) # 输出10
print(y) # 如果y未被声明,则会报错
z = "hello"
print(z) # 输出"hello"
以上是Python变量的简单介绍和举例,希望能对您有所帮助。
Python支持多种运算符,包括算术运算符(如+、-、*、/等)、比较运算符(如==、!=、<、>等)、逻辑运算符(如and、or、not等)和位运算符(如&、|、^、~等)。Python中有很多常用的运算符,下面是对这些运算符的简单介绍和举例:
表达式是由操作数和运算符组成的语法结构,可以用于计算和表示数值。Python中有很多常用的表达式,下面是对这些表达式的简单介绍和举例:
Python支持多种控制结构,包括条件语句(if)、循环语句(for、while)、跳转语句(break、continue)等。Python中有很多常用的控制结构,下面是对这些控制结构的简单介绍和举例:
x = 10
if x > 0:
print("x是正数")
示例2:如果x等于0,则输出"x是零",否则输出"x不是零"。
x = 0
if x == 0:
print("x是零")
else:
print("x不是零")
x = 10
if x > 0:
print("x是正数")
elif x == 0:
print("x是零")
x = -10
if x > 0:
print("x是正数")
else:
print("x不是正数")
x = 0
while x < 10:
print(x)
x += 1
my_list = [1, 2, 3, 4, 5]
for element in my_list:
print(element)
x = 0
while True:
print(x)
if x == 5:
break
x += 1
x = 0
while True:
if x % 2 == 0:
print(x)
else:
continue
if x == 5:
break
x += 1
x = 10
if x > 0:
print("x是正数")
elif x == 0:
print("x是零")
else:
pass
函数是一段可重用的代码块,可以用于实现特定的功能。函数可以接受参数并返回值。Python常用函数的介绍和举例如下:
这些函数都是Python的内置函数,可以用于处理序列、集合、字典等数据类型。在实际开发中,我们也可以自己定义函数来实现特定的功能。
Python中自定义函数是一种用户自己编写的函数,可以用于封装特定的代码逻辑,以便在其他地方重复使用。
下面是一个简单的Python自定义函数的示例:
def square(num):
"""
计算给定数字的平方
:param num: 数字
:return: 数字的平方
"""
result = num ** 2
return result
在这个例子中,我们定义了一个名为square
的函数,它接受一个参数num
,并返回该数字的平方。函数的定义以关键字def
开始,后面跟着函数名和参数列表。在函数体中,我们编写了计算平方的代码逻辑。最后,我们使用return
语句返回计算结果。
要调用这个函数并计算某个数字的平方,可以使用以下代码:
my_num = 5
squared_num = square(my_num)
print(squared_num) # 输出25
在这个例子中,我们将数字5
赋值给变量my_num
,然后调用square
函数并传入my_num
作为参数。函数返回计算结果,我们将其赋值给变量squared_num
,并使用print
语句输出结果。
除了上述示例,还可以根据实际需求自定义各种类型的函数,例如接受多个参数的函数、返回多个值的函数、带默认参数的函数、可变参数的函数等等。自定义函数可以大大提高代码的可重用性和可维护性,使程序更加模块化和高效。
模块是一组Python代码的集合,可以包含函数、类和变量等。模块可以通过import语句导入并使用其中的代码。
Python模块(Module)是Python代码的基本单位,用于组织和封装特定功能或相关代码。模块可以包含变量、函数、类等Python对象,以便在其他Python程序中使用。
模块的创建通常以.py文件的形式存在,其中包含了模块的代码。通过将功能和代码组织到不同的模块中,可以提高代码的可重用性、可维护性和可测试性。
下面是一些Python模块的例子:
import math
print(math.pi) # 输出3.141592653589793
上述代码导入了math模块,并打印了其中的pi变量。
总之,模块是Python代码的重要组成部分,用于封装特定功能或相关代码,并可以在不同的Python程序中重复使用。
import os
# 获取文件信息
stat_info = os.stat('example.txt')
print(stat_info.st_size) # 输出文件大小
# 读取文件内容
with open('example.txt', 'r') as file:
content = file.read()
print(content)
import socket
# 创建TCP连接
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8000))
# 发送数据
message = 'Hello, server!'
client_socket.send(message.encode())
# 接收数据
response = client_socket.recv(1024).decode()
print(response)
# 关闭连接
client_socket.close()
import sqlite3
# 创建数据库连接
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INT)''')
# 插入数据
cursor.execute("INSERT INTO users VALUES (1, 'Alice', 25)")
cursor.execute("INSERT INTO users VALUES (2, 'Bob', 30)")
# 查询数据
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
print(result)
# 关闭连接
conn.close()
import tkinter as tk
# 创建窗口
window = tk.Tk()
window.title('Example App')
window.geometry('300x200')
# 添加标签控件
label = tk.Label(text='Hello, World!')
label.pack()
# 处理按钮点击事件
def button_clicked():
label.config(text='Button clicked!')
label.pack()
print('Button clicked!')
button = tk.Button(text='Click Me!', command=button_clicked)
button.pack()
# 进入主循环
window.mainloop()
要引用Python模块中的函数或变量,需要使用import语句或from…import…语句。以下是引用方法的举例:
import math
这样就可以使用math模块中的函数,例如:
result = math.sqrt(16) # 调用math模块的sqrt函数
print(result) # 输出4.0
from math import sqrt, ceil
这样就可以直接使用sqrt和ceil函数,而不需要通过模块名引用,例如:
result1 = sqrt(16) # 调用math模块的sqrt函数
result2 = ceil(3.14) # 调用math模块的ceil函数
print(result1) # 输出4.0
print(result2) # 输出4.0
import module1
from module2 import function1, function2
这样就可以使用module1中的所有函数和变量,以及module2中的function1和function2函数。
Python中的列表(list)是一种非常常用的数据结构,它是一种有序的集合,可以存储任意类型的数据。下面我们将介绍一些关于Python列表的基本使用方法。
创建列表
创建列表非常简单,只需要使用中括号 [] 并将元素包含在内,元素之间用逗号隔开。
my_list = [1, 2, 3, 'a', 'b', 'c']
访问列表元素
要访问列表中的元素,可以使用索引。索引是从0开始的,表示元素在列表中的位置。
print(my_list[0]) # 输出:1
print(my_list[3]) # 输出:'a'
修改列表元素
要修改列表中的元素,可以直接赋值。
my_list[0] = 100
print(my_list) # 输出:[100, 2, 3, 'a', 'b', 'c']
添加元素到列表
要向列表中添加元素,可以使用 append()
方法。
my_list.append(4)
print(my_list) # 输出:[100, 2, 3, 'a', 'b', 'c', 4]
从列表中删除元素
要从列表中删除元素,可以使用 remove()
方法,该方法会删除第一个匹配的元素。如果要删除指定位置的元素,可以使用 del
语句。
my_list.remove(100) # 删除元素100
print(my_list) # 输出:[2, 3, 'a', 'b', 'c', 4]
del my_list[0] # 删除位置0的元素
print(my_list) # 输出:[3, 'a', 'b', 'c', 4]
列表切片
列表切片是指从列表中选择一部分元素。语法是 list[start:end]
,其中 start
是切片开始的索引(包括该索引),end
是切片结束的索引(不包括该索引)。注意,切片是从左到右的。
my_list = [0, 1, 2, 3, 4, 5]
print(my_list[1:4]) # 输出:[1, 2, 3]
循环遍历列表
可以使用 for
循环来遍历列表中的所有元素。
my_list = [0, 1, 2, 3, 4, 5]
for element in my_list:
print(element)
列表长度
可以使用 len()
函数来获取列表的长度。
my_list = [0, 1, 2, 3, 4, 5]
print(len(my_list)) # 输出:6
Python中的字典(dict)是一种非常常用的数据结构,它是一种无序的键值对集合,可以通过键来访问对应的值。下面我们将介绍一些关于Python字典的基本使用方法。
创建字典
创建字典非常简单,只需要使用大括号 {} 并将键值对用冒号 : 分割,各个键值对之间用逗号 , 隔开。
my_dict = {'name': 'Alice', 'age': 25, 'gender': 'female'}
访问字典元素
要访问字典中的元素,可以使用键来索引。如果键不存在于字典中,则会抛出 KeyError 异常。为了避免异常,可以使用 get()
方法来获取指定键的值,如果键不存在则返回一个默认值。
print(my_dict['name']) # 输出:'Alice'
print(my_dict.get('age')) # 输出:25
print(my_dict.get('address', 'unknown')) # 输出:'unknown',因为'address'键不存在
修改字典元素
要修改字典中的元素,可以直接赋值。如果键不存在,则会创建一个新的键值对。
my_dict['age'] = 26
print(my_dict) # 输出:{'name': 'Alice', 'age': 26, 'gender': 'female'}
添加字典元素
要向字典中添加元素,可以直接赋值。如果键不存在,则会创建一个新的键值对。
my_dict['address'] = '123 Main St.'
print(my_dict) # 输出:{'name': 'Alice', 'age': 26, 'gender': 'female', 'address': '123 Main St.'}
删除字典元素
要删除字典中的元素,可以使用 del
语句。如果要删除整个字典,可以使用 del
语句或 pop()
方法。
del my_dict['age'] # 删除键为'age'的元素
print(my_dict) # 输出:{'name': 'Alice', 'gender': 'female', 'address': '123 Main St.'}
my_dict.pop('address') # 删除键为'address'的元素,并返回其值
print(my_dict) # 输出:{'name': 'Alice', 'gender': 'female'}
字典推导式
字典推导式是一种快速创建字典的方法,可以将一个列表或元组的元素转换为字典的键值对。其语法为 {key_expression for item in iterable}
。
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
gender = ['female', 'male', 'male']
my_dict = {name: age + gender[i] for i, name in enumerate(names)}
print(my_dict) # 输出:{'Alice': '25female', 'Bob': '30male', 'Charlie': '35male'}
将包含键值对的列表转换为字典,其中列表中的每个元素都是一个元组,包含两个元素,即键和值。
my_list = [('apple', 2), ('banana', 3), ('orange', 4)]
my_dict = dict(my_list)
print(my_dict) # 输出:{'apple': 2, 'banana': 3, 'orange': 4}
将字典转换为包含单个元素的列表,其中每个元素都是一个元组,包含字典中的键和值。
my_dict = {'apple': 2, 'banana': 3, 'orange': 4}
my_list = list(my_dict.items())
print(my_list) # 输出:[('apple', 2), ('banana', 3), ('orange', 4)]
在Python中,我们经常需要处理日期和时间,以及将日期和时间转换为时间戳或从时间戳获取日期和时间。以下是一个关于如何在Python中进行日期、时间以及与时间戳互相转换的教程。
导入相关模块
首先,我们需要导入Python的datetime模块,该模块包含了许多处理日期和时间的类和方法。
import datetime
获取当前日期和时间
要获取当前日期和时间,我们可以使用datetime模块中的now()函数。
current_datetime = datetime.datetime.now()
print(current_datetime)
将日期和时间格式化为字符串
如果你想要将日期和时间格式化为特定的字符串格式,可以使用strftime()方法。以下是一些常用的格式化选项:
例如,要将当前日期和时间格式化为"年-月-日 时:分:秒"的格式,可以执行以下操作:
current_datetime = datetime.datetime.now()
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)
将字符串解析为日期和时间
如果有一个字符串表示日期和时间,并且该字符串的格式与strptime()方法的格式化字符串相匹配,则可以将该字符串解析为日期和时间对象。以下是一些示例:
string_datetime = "2023-07-06 15:30:00"
parsed_datetime = datetime.datetime.strptime(string_datetime, "%Y-%m-%d %H:%M:%S")
print(parsed_datetime)
将日期和时间转换为时间戳
我们可以使用datetime对象的timestamp()方法将其转换为时间戳。时间戳是从1970年1月1日午夜(UTC)开始的秒数。
current_datetime = datetime.datetime.now()
timestamp = current_datetime.timestamp()
print(timestamp)
将时间戳转换为日期和时间
要从时间戳获取日期和时间,我们可以使用datetime模块中的fromtimestamp()函数。
timestamp = 1695483600 # 这是一个示例时间戳
parsed_datetime = datetime.datetime.fromtimestamp(timestamp)
print(parsed_datetime)
以上就是在Python中进行日期、时间以及与时间戳互相转换的基本操作。
在Python中,文件读写是一个常见的操作。下面简要介绍一下基本的文件读写方法,涵盖了不同的场景和操作。
打开文件
在Python中,使用open()
函数打开文件。这个函数需要传递文件路径和模式作为参数。模式可以是以下几种:
示例:
file = open('example.txt', 'r') # 打开一个名为'example.txt'的文件用于读取
读取文件
有多种方法可以读取文件内容。以下是几种常见的方法:
read()
:一次性读取文件的全部内容。readline()
:一次读取文件的一行内容。readlines()
:一次读取文件的全部内容,并按行存储为列表。示例:
file = open('example.txt', 'r') # 打开一个名为'example.txt'的文件用于读取
content = file.read() # 读取文件的全部内容
print(content) # 打印文件的全部内容
file.close() # 关闭文件
写入文件
要写入文件,可以使用write()
方法。需要注意的是,使用写入模式打开文件时,如果文件已经存在,它的内容将被清空。如果要追加内容而不是覆盖原有内容,请使用追加模式。
示例:
file = open('example.txt', 'w') # 打开一个名为'example.txt'的文件用于写入
file.write('Hello, world!') # 将字符串'Hello, world!'写入文件
file.close() # 关闭文件
追加内容到文件
要追加内容到文件,可以使用追加模式打开文件,并使用write()
方法写入内容。
示例:
file = open('example.txt', 'a') # 打开一个名为'example.txt'的文件用于追加
file.write('\nHello again, world!') # 在文件的末尾追加字符串'\nHello again, world!'
file.close() # 关闭文件
关闭文件
在使用完文件后,应该及时关闭它。这可以释放系统资源并确保文件的完整性和一致性。关闭文件可以使用close()
方法。
示例:
file = open('example.txt', 'r') # 打开一个名为'example.txt'的文件用于读取
content = file.read() # 读取文件的全部内容
print(content) # 打印文件的全部内容
file.close() # 关闭文件
使用with语句操作文件
为了确保文件在使用后正确关闭,可以使用with
语句来操作文件。这将自动关闭文件,无需手动调用close()
方法。
示例:
with open('example.txt', 'r') as file: # 使用with语句打开文件并赋值给变量file,无需手动关闭文件
content = file.read() # 读取文件的全部内容
print(content) # 打印文件的全部内容
本篇文章,内容虽有些长,但很多我们知道这种表达是什么意思即可,不会的或忘了过来查就行。由于篇幅有限,Python还有很多应用技巧和知识,想学习更多,读者可自行深入搜索。
这里对量化交易所需的Python基础知识进行了展示和示例,方便大家后续跟进学习量化。量化所需要Python知识不多,更多的是通过list、dict、pandas对数据进行加工处理,再结合逻辑控制语句,生成交易信号,并调用API完成下单操作。
掌握了本篇知识,想必已经可以应付基本的Python代码读写。后续我们将结合不同的量化框架来学习量化交易。