本文是量化交易零基础入门教程中的一篇,点击蓝字链接可查看该系列详情。
摘要
- 学习用list存储多个股票
- 学习使用for循环
- 学习写一个简单的多股票策略
- 自测与自学
我们继续以如下这个简单的策略为例进行学习在策略中操作多个股票。
def initialize(context):
run_daily(period,time='every_bar')
g.security = '000001.XSHE'
def period(context):
order(g.security, 100)
用list数据类型存储多个股票
事实上,根据前面的所学我们是可以写多个股票的策略的,无非是把原来单个股票的操作类似地再写几遍,比如下面这个策略就在操作两个股票。
def initialize(context):
run_daily(period,time='every_bar')
g.security1 = '000001.XSHE'
g.security2 = '000002.XSHE'
def period(context):
order(g.security1, 100)
order(g.security2, 100)
显然的问题是,当股票比较多的时候,就要写很多遍,这样的写法就会很麻烦,看着也会比较乱。因此我们要学习其他的写法。首先我们先学习用list数据类型存储多个股票,如下:
def initialize(context):
run_daily(period,time='every_bar')
g.security = ['000001.XSHE','000002.XSHE']
list数据类型用法前文有讲过,特点是各个元素用逗号隔开后,用中括号把所以元素包起来,比较简单,有疑问不妨去回顾下。接下来是重点内容--循环语句,用它可以方便的批量操作多个股票。
循环语句
for循环可以遍历任何序列的项目,比如一个list,一般用法如下:
for 变量 in 一个序列:
要循环的语句,也叫循环体
说起来略复杂,其实不难,来看个使用for的例子:
for k in ['大卫','查理曼','凯撒','亚历山大']:
print(k)
# 执行后日志如下:
# 大卫
# 查理曼
# 凯撒
# 亚历山大
# 可见,for语句的运行过程是,取出list中第一个元素'大卫'并将其赋值给k,然后执行print(k)即在日志中打印k,,此时k中是'大卫',之后,取出list中第二个元素'查理曼'并将其赋值给k,然后执行print(k)即在日志中打印k,此时k中是'查理曼',以此类推,直到'亚历山大'被打印。
使用for语句时有一个常见一起使用的语句range(),它的功能是生成等差数列的,用法如下:
range(首项,上限,步长)
for j in range(1,7,2):
print(j)
print(range(1,7,2))
continue与break是重要的修饰循环执行流程的语句,用法如下:
for t in range(4):
print(t)
for t in range(4):
if t == 2:
print('omg')
break
print(t)
for t in range(4):
if t == 2:
print('omg')
continue
print(t)
写一个简单多股票策略
用刚学的知识把之前简单的策略例子改写成多股票版本,如下。
def initialize(context):
run_daily(period,time='every_bar')
g.security = ['000001.XSHE','000002.XSHE']
def period(context):
for stk in g.security:
order(stk,100)
其实运用所学的知识已经可以进一步的加入很多东西了,比如在这个多股票的基础上在加入之前讲过的止损。不妨自己先尝试下再看下面的样例代码。样例代码如下。
def initialize(context):
run_daily(period,time='every_bar')
g.security = ['000001.XSHE','000002.XSHE']
def period(context):
for stk in g.security:
order(stk,100)
cost=context.portfolio.positions[stk].avg_cost
price=context.portfolio.positions[stk].price
ret=price/cost-1
if ret<-0.01:
order_target(stk,0)
print('触发止损')
自测与自学
- 实践下本文中的例子
- 用for语句生成一个100项的平方数数列的list,即[1,4,9,16,...,10000]
- 用for语句计算100项的平方数数列的和,即1 4 9 16 ... 10000的结果
以下代码输出结果是?(len之前提到过,不记得的直接百度下)
a = [4,2,1,9,6,5,3,8,7]
for i in range(len(a)):
for j in range(i 1,len(a)):
if a[j] > a[i]:
t=a[j]
a[j] = a[i]
a[i]=t
print(a)
查看下一篇