初识量化交易与Python知识补充

初识量化交易与Python知识补充

这篇笔记学习于这篇文章:初识量化交易。打算从此开启量化交易的学习之路。

量化交易是什么

量化交易是借助现代统计学和数学的方法,利用计算机技术进行交易的证券投资方式。

量化交易的如何工作

从一个灵感开始

假如有一个这样的灵感:

1
2
如果股价显著低于近几日的平均价,则买入;
如果股价显著高于近几日的平均价,则卖出。

现在,你想知道这样操作会不会赚钱?

把灵感细化成可执行的交易策略

可以把上面的灵感细化为:

1
2
3
每个交易日检测除ST股外的国内A股的所有股票的股价:
如果股价低于近20日平均价10%,则用全部可用资金买入该股票;
如果股价高于近20日平均价10%,则卖出全部所持有的股票。

可以把上面的交易策略写成类似的代码(下面的代码并不完全符合,仅仅为了展示):

1
2
3
4
5
6
7
8
9
10
def initialize(context):
g.security = ['002043.XSHE', '002582.XSHE']
def handle_data(context, data):
for i in g.security:
last_price = data[i].close
average_price = data[i].mavg(20, 'close')
if last_price > average_price:
order_value(i, cash)
elif last_price < average_price:
order_value(i, 0)

检验策略效果

基本的检验策略有回测和模拟交易两种。
回测是让计算机能根据一段时间的历史数据模拟执行该策略,根据结果评价并改进策略。继续之前的那个均价策略的例子就是这样的:

设定初始的虚拟资产为500000元,一个时期20060101-20160101,把这一时期的各种数据如股价行情等发给计算机,计算机会利用这些数据模拟真实的市场,执行你刚才告诉它的策略程序。最后计算机会给你一份报告,根据这个报告你就会知道在20060101的500000元按照你的策略交易到20160101,会怎么样?一般包括盈亏情况、下单情况、持仓变化、一级一些统计指标等,从而你能根据据此评估交易策略的好坏。

模拟交易则是让计算机能根据实际行情模拟执行该策略一段时间,根据结果评价并改进策略。与回测不同,回测是历史数据模拟。模拟交易中,你会得到一份实时更新的报告,这报告类似与回测得到的报告,不同的是会根据实际行情的变化更新。同样你能据此评估交易策略的好坏。

如果回测和模拟交易的表现都非常好,你可以考虑进行完全真实的实盘交易。

注意:目前国家法规限制计算机自动实盘交易。

量化交易的价值

  1. 可以利用大量历史数据检验策略,效率提升百倍;
  2. 更科学客观的衡量交易策略的效果;
  3. 全市场实时捕捉交易机会;
  4. 更多的盈利机会

量化交易需要什么

  1. 各种数据;
  2. 量化交易系统。要能编写策略、执行策略的系统。这样考虑到系统对各个策略编写的支持、系统进行回测与模拟的高仿真、系统执行策略的高速、系统评测策略的科学可靠方面;

Python知识补充

这部分笔记学习自:python基本语法与变量。因为自己对Python已经所有认识,所以只记录一些自己还不是很熟悉的知识点。

  • JointQuant做策略回测代码只支持Python2,但是投资研究功能支持Python3;
  • Python一行写多条语句是要用分号隔开;

    全局变量

    下面的代码是会出错的:
    1
    2
    3
    4
    5
    def initialize(context):
    run_daily(period, time = 'every_bar')
    a = 1
    def period(context):
    print(a)

出错的原因在于a是个局部变量,在a的前面加g.可以使之成为一个全局变量:

1
2
3
4
5
def initialize(context):
run_daily(period, time = 'every_bar')
g.a = 1
def period(context):
print(g.a)

算数运算

  • 取整:a//b
  • 取余:a%%b
  • 如果两个整数类型(没有带小数点的默认为整数)的变量进行运算,结果默认还是整数;

list

1
2
3
4
c = [1,2,3,4]
print(c[:-2]) ## 从第0个到倒数第二个
👇
[1, 2]

选取dict中的所有key和value:

1
2
3
4
5
6
7
8
a = {'平安银行': '000001.XSHE', '浦发银行': '600000.XSHG'}
b = a.keys()
c = a.values()
print("a.keys() = %s" % (a.keys()))
print("a.values() = %s" % (a.values()))
👇
a.keys() = dict_keys(['平安银行', '浦发银行'])
a.values() = dict_values(['000001.XSHE', '600000.XSHG'])

# Python

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了659.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×