这里是打开
quant量化交易类入门新大门的前置篇, 也就是程序语言 python 篇, quant 里大量的框架都会涉及 py 或 c++ 的使用/调用, 尤其以 py 为常见, 一起来看看吧.
0x00. 前言
0x01. 语法
python 总体语法很简单, 没有强类型和显式指针等概念, 这里主要提与 shell/go/c/java 中不同的地方, 类似数组下标可以为负这种
数据结构
类似 go, python 对最常用的 array(list) 和 map(dict) 也提供了对应的内置的语法糖, 也比较简洁, list 使用如下:
1 | # 0. 也可以理解为三个可变数组, 类型也可以混放可简单理解为 void* / Object |
dict(map) 的使用也很简单:
1 | a=[1, 2] |
基本两句话最常用的地方就包括了, 其他语义随时需要可以自查
函数
这里稍微说一下, 以官方常见的内置函数为例, 首先 py 里参数可以直接指定默认值, 倒是很方便, 你没填的参数大多是使用了默认值
1 | # 看起来参数列表一堆东西还有指针? 并不是~ |
那么剩下还有两个 self 和 *args, 后者可简单理解为变长/可变参数, 当然可以按习惯把可变参数放最后, 如果像 print() 这样变参在中间的情况, 后面的所有默认值参数就都需要用 k=v 的指定方式调用了, 不然程序自然不能区分是哪个位置 (所以推荐可变放最后)
然后它还有个兄弟例如 **kwargs, 这个可理解为传入 map 形式的 0~n 个 kv 对参数, 它如果出现必须放最后位置, 遇到使用场景的时候就能理解了
self 参数简单可理解为类似 c++/java 中的 this, 代表当前实例对象 (python 也有类/对象概念), 不过区别是 self 并不是关键字, 只是常见命名方式, 在类和对象使用的时候self就很常见了
另外 py 的函数或者 for/if/else 后都需要跟一个: (冒号)结尾, 个人觉得比较多余也略奇怪, 不过就像 self 的设定一样, 记住就可以了.
表达式和循环
1. 算术表达式
py 里设定没有直接的 && 和 || 短路操作, 也没有 !, 只能用 and 和 or 和 not 代替, 但是& 和| 的位运算操作是保留的, 设计挺有点奇怪, 使用复杂表达式的时候慎重嵌套, 避免出错
然后 py 规定 / 代表浮点除法, 必返回一个浮点数, // 才代表向下取整除法, 返回整数, 要注意区分,
2. 循环
另外 py 中的大部分表达式也不需要 ()包围, 没有标准 for 循环, 常用 for-in 模式, 若需要指定 index 类的, 常用 range(start,end,delta) 函数(start 默认为0, delta 默认为1可省, end 不可省略), 例如:
1 | # 按顺序遍历一个 nums 集合 |
0x02. Anaconda
数据分析类必备包管理合集, 配置好它免去后面大部分依赖安装和报错问题, 所以单独说一下它的上下文, 首先
0x03.
- numpy
- pandas
- data frame
- jupyter notebook
- anaconda
0x04. 测试
核心两点:
- 初始化 (环境变量)
- 周期循环 (买/卖)
然后后期你可以自行加入止盈/止损等条件, 避开 ST 股/避开新股之类的, 其实它也是第二个周期操作里的一部分, 只不过最开始你可以只考虑简单的买/卖, 甚至只买然后一直持有都可以.
先用一个最简单的内置 api 的例子试试核心逻辑和效果, 假设是万科这只股票, 我们从某个时间点开始, 启动金假设 1w, 策略就是最简单的每天买入100股, 然后观察一下这个策略运行之后的回测输出:
1 | # joint-quant |
然后选一个比较短的时间段, 可以看到回测输出如下: (然后大家可以自行调整下时间周期和起始金额试试)
我们很快就能看到这个策略的运行情况, 以及核心数值统计(在”归因分析”中会有更具体细节的参数/因子分析, 这里暂时不提), 下面进入第一个正式的demo (同样来自 tutorial)
最小市值策略
上面试过了最简单的
参考资料:
1.
