不想错过精彩课程?一键“订阅”,轻松学习!
大家好,欢迎来到金十交易学院《智能量化交易》课程。
摘要:C++是一门很难的编程语言,这里的难指的是深入学习下去,但如果只是用C++语言写个策略逻辑,其实不需要多深的知识,只要不是非常复杂的策略。学习基础知识中的前半部分就足够了。
一、量化交易为什么要选择C++
我自己用C++并不是提倡你也用C++,道理是相通的,语言只是工具而已。在量化交易中,C++并不是必须的,如果你喜欢用Python或者其他语言直接用就行了,能省下许多的精力,专注在策略方面。
但在量化投资机构中,量化交易底层大部分是用C++,因为他独特的语言特定,在某些方面使它比其他语言效率更高速度更快,特别是在数值计算上,能提高几个数量级。这也意味着C++更适合金融衍生品和高频交易领域。所以,如果你想用一门更快的语言,选择C++是没错的。
二、完整策略
为了帮大家更快的理解本节的内容,在介绍发明者量化C++语言之前,先来看下策略如果用C++写出来会是什么样的,这样你会对本节名词概念有个初步了解。我们就以最简单的MACD策略为例:
我们都知道MACD指标有两条曲线,即快线和慢线,我们就以最简单的快线金叉慢线做多,反之快线死叉慢线做空,那么这个策略的交易逻辑是这样的,如下所示:
多头开仓:如果当前没有仓位,并且快线大于慢线。
空头开仓:如果当前没有仓位,并且快线小于慢线。
多头平仓:如果当前持有多单,并且快线小于慢线。
空头平仓:如果当前持有空单,并且快线大于慢线。
如果用C++语言,把以上的策略逻辑编写出来,就是这样的(如下图):请注意阅读图中的中文注释,有利于快速理解策略的逻辑,更能受到量化策略编写的启发。
上图中的代码就是用C++语言编写的一个完整的量化交易策略。可以实盘运行,并且自动下单交易。从代码量上看,该语言比其他语言都更复杂些。这是因为发明者量化工具中的C++语言,主要面向高频策略开发,所以减少了许多不必要的交易类库,底层的处理大部分都交给策略开发者。对于小白用户来说,虽然代码量多了,但是整个策略的设计流程还是不变的:设置行情品种、获取K线数据、获取持仓信息、计算交易逻辑、下单买卖。
以上完成策略代码中,有很多C++语言特有的语法和规则,下面我们就详细认识这些语法和规则。
标识符
标识符也就是名字,C++中的变量、函数命名都区分大小写,也就是说变量名test和变量名Test是两个不同的变量。标识符的第一个字符必须是字母、下划线(_),后面的字符还可以是数字,如下图所示:
注释
注释包括单行注释和块级注释。单行注释以两个斜杠开头,块注释以一个斜杠和一个星号(/*)开头,以一个星号和一个斜杠(*/)结尾,如下图所示:
分号 & 语句块
在 C++ 中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。 例如,下面是三个不同的语句:
变量
变量其实就是程序可操作的存储区的名称。在C++中定义一个变量,你必须先定义这个变量的类型,在量化交易策略开发中,我们常用的类型有:整型(int)、浮点型(double)、字符串(string)、自动推导类型(auto)。
整型你可以理解为整数的数字;浮点型你可以理解为带小数点的数字;字符串也就是文字,可以是英文也可以是中文;有时候我们调用一个API,但是并不知道这个API会给我们返回什么类型的数据,所以使用自动推导类型(auto),就可以帮我们自动判断数据类型。如下图所示:
数组
数组就是存放数据的容器,C++数组可以存储一个固定大小的相同类型元素的顺序集合。因此在C++中,要声明一个数组,需要指定元素的类型和元素的数量。所有的数组都是以0作为它们第一个元素的索引,如果要获取数组中第一个数据就是“[0]”,第二个数据就是“[1]”,后面的以此类推,如下图所示:
函数
函数是一组一起执行一个任务的语句,函数的声明包括:函数的名称、返回类型、参数。返回类型就是当我调用这个函数的时候,函数运行完毕返回来的数据类型;参数是可选的,函数也可以不包含参数,当函数被调用时,你也可以给函数传进去一个参数,看看下面的例子:
运算符
使用C++编写量化交易策略,常用到的运算符有四种:算术运算符、关系运算符、逻辑运算符、赋值运算符。其中算术运算符就是加减乘除的数学运算,关系运算符可以比较两个值的大小,逻辑运算符主要有:逻辑与、逻辑或、逻辑非。赋值运算符就是我们之前讲过的变量赋值。如下图所示:
优先级
如果有一个100*(10-1)/(10+5)表达式,程序是先计算哪一步?中学数学告诉我们:①如果是同一级运算,一般按从左往右依次进行计算。②如果既有加减、又有乘除法,先算乘除法、再算加减。③如果有括号,先算括号里面的。④如果符合运算定律,可以利用运算定律进行简算。C++语言的优先级也是如此,如下图:
条件语句
通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 C++中,我们可使用以下条件语句:
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
if...else if....else 语句- 使用该语句来选择多个代码块之一来执行
switch 语句 - 使用该语句来选择多个代码块之一来执行
if 语句
只有当指定条件为 true 时,该语句才会执行代码。请使用小写的 if,使用大写字母(IF)会生成 C++ 错误!如下图所示:
if...else 语句
当条件为 true 时执行代码,当条件为 false 时执行其他代码,如下图所示:
for循环
For循环可以重复执行N次代码块,它的执行流程是这样的(如下图):
第1步:执行int a = 10,而且只会执行一次。它的作用是声明一个整型变量并初始化为10,来控制for循环。
第2步:执行a<20,如果为真,则执行第2行的代码块。
第3步:执行a++,执行完a++后,a就变成11了。
第4步:再执行a<20,这个过程第2、3、4会不断重复。直到a<20为假,如果为假,则不执行第2行的代码块,并跳出整个for循环
while循环
我们都知道行情是在不断变化的,如果你想获取最新的K线数组,就得不断的去一遍又一遍地运行相同的代码,那么使用while循环,只要指定条件为true,循环就可以一直获取最新的K线数组。
break语句
循环是有前提条件的,只有这个前提条件为“true”的时候,循环才会开始重复的做某些事,直到这个前提条件为“false”的时候,循环才会结束。但是使用break语句可以在循环执行的过程中立刻跳出循环;
continue语句
continue 语句也是跳出循环,但它不是跳出整个循环。而是中断某一次循环,然后继续下一次循环。如下图所示,当a等于2时就中断这次循环,继续进行下一次循环,直到这个循环的前提条件为“false”才跳出整个循环。
return语句
return语句会终止函数的执行并返回函数的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!
三、策略架构
在发明者量化工具中,如果用C++语言编写策略将会非常方便,官方内置了一套标准策略框架,以及实盘交易类库,如下图所示:
如上图中的代码,这是一个标准的策略框架,并且这些格式都是固定的,使用框架编写策略,只需要在第2行起,编写策略逻辑就可以了,其他的行情获取、下单处理等等一系列问题,都由框架和交易类库处理,这样你就可以把精力放在策略开发上。
下节预告:量化交易关键是交易策略,而不是交易工具(编程语言),下节我们将带大家手把手编写一个可行的C++交易策略。还是以最简单的技术分析指标为例,抛砖引玉巩固本节学习的内容。
课后习题:
1. 试着用发明者量化工具中的C++语言获取历史K线数据。
2. 试着写下本节开头的策略代码,并写上注释。
最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!
金十交易学院,8点准时更新