金十交易学院

4.1 JavaScript语言快速入门

不想错过精彩课程?一键“订阅”,轻松学习!




大家好,欢迎来到金十交易学院《智能量化交易》课程。


摘要:作为未来一名量化交易新星,你不可能只学习一门简单的语言就够了。发明者量化工具的麦语言和可视化语言,虽然能带你入门,但由于它们的语言特性,在策略开发中有很多局限性。所以,要想在量化交易中有立足之地,你必须学会一门正式的编程语言。


一、为什么要学习JavaScript语言


相比于可视化语言,JavaScript语言有更强的性能和执行效率。并且在策略开发方面,JavaScript语言要比可视化语言灵活许多,比如:你想开发一个套利策略,那么用可视化语言是不行的,因为它有限的模块,不支持类似套利的策略,而JavaScript语言就能轻松胜任。


另外,JavaScript语言比可视化语言更加简洁和优雅,比如:可视化语言10行代码,用JavaScript可能5行就能写出来。从某些方面看,可视化语言仅仅是JavaScript的文字版,其代码的执行方式和逻辑与JavaScript几乎是一样的。如果你学会了可视化语言,那么学习JavaScript将是非常轻松的。


二、JavaScript语言简介


JavaScript是一门正式的高级编程语言。它既适合当作学习编程的入门语言,也适合当作日常开发的工作语言。它是目前最有希望、前途最光明的计算机语言之一,至今在浏览器端都有不可撼动的霸主地位。虽然它是作为开发Web页面而出名的,但是它也被用到了很多非浏览器环境中,例如:服务器、PC端、移动端等,当然它还可以做量化交易!



三、完整策略


为了帮助大家快速理解本节的重点知识,在介绍发明者量化JavaScript语言快速入门之前,先对本节名词概念有个初步了解。我们就用最简单的双均线策略为例:


l 多头开仓:如果当前没有仓位,并且5周期均线大于20周期均线。


l 空头开仓:如果当前没有仓位,并且5周期均线小于20周期均线。


l 多头平仓:如果当前持有多单,并且5周期均线小于20周期均线。


l 空头平仓:如果当前持有空单,并且5周期均线大于20周期均线。


如果用JavaScript语言代码编写出来,就是这样的:



上图中的代码就是用JavaScript语言写的一个完整的量化交易策略。可以实盘运行,并且自动下单交易。从代码量上看,该语言比可视化语言更简单些。整个策略的设计流程是:设置行情品种、获取K线数据、获取持仓信息、计算交易逻辑、下单买卖。


标识符


JavaScript中的一切(变量、函数名和操作符)都区分大小写,也就是说变量名test和变量名Test是两个不同的变量。标识符(变量、函数、属性、函数参数的名字)的第一个字符必须是字母、下划线(_)、美元符($),后面的字符还可以是数字,如下图所示:



注释


注释包括单行注释和块级注释。单行注释以两个斜杠开头,块注释以一个斜杠和一个星号(*/)开头,以一个星号和一个斜杠(*/)结尾,如下图所示:



语句


每个语句都有一个分号结尾;虽然这不是必须的,但我们建议任何时候都不要省略它。加上分号,在某些情况下可以增加代码的性能,如下图所示:



变量


变量可以保持任何类型的数据,创建变量的时候要使用var操作符,后面跟变量名。定义变量的时候同时还可以设置变量的值。一旦变量创建后,再次设置变量的值,就不用使用var操作符,如下图所示:



数据


JavaScript一共有5种数据类型,分别是:未定义(Undefined)、对象为空(Null)、布尔值(Boolean)、数字(Number)、字符串(String),如下图所示:



l Undefined只有一个值,即特殊的“undefined”,它代表一个还没有设置的值。比如我们只定义一个变量,不给这个变量设置值,那么该变量的值就是“undefined”。


l Null只有一个值,即特殊的“null”,它代表一个被设置为空的值。比如我们先创建一个变量,然后把变量的值设置为“null”,那么反问该变量返回的值就是“null”。


l Boolean有两个值,即“true”和“false”,“true”代表真,“false”代表假。需要注意的是,“true”和“false”都是小写。


l Number也就是数字类型,包括:正数、负数、整数、小数等等。除此之外“NaN”也是一个特殊的数字,它专门表示未返回数值的情况,比如:1除以0,返回“NaN”。


l String你可以理解为文字,包含中文和英文,可以通过单引号或双引号来构造字符串。比如:“fmz”或者‘发明者量化’等。


对象


对象你可以理解为一个存放各种数据的容器,容器中属性和值都是对应的。可以通过new操作符先把这个容器创建出来。并且可以给创建后的对象添加属性和方法,如下图所示:



数组


数组也是一个存放各种数据的容器,只不过容器中的元素是从左往右有序排列的,第一位的元素是0,第二位的元素是1,以此类推。另外JavaScript的数组可以存放任何数据类型,如下图所示:



函数


JavaScript中的函数跟我们中学学的函数没有本质的区别,你可以理解为传进去什么,通过函数的计算,输出什么,如下图所示:



运算符


JavaScript有多种运算符,即算术运算符、比较运算符、逻辑运算符。其中算术运算符就是加减乘除的数学运算,比较运算符可以比较两个值是否小于或者大于,逻辑运算符主要有:逻辑与、逻辑或、逻辑非。如下图所示:



需要注意的是:“&&”是逻辑与,代表“并且”的意思。“||”是逻辑或,代表“或者”的意思。“!”是逻辑非,代表“否”的意思:


l “&&”是所有条件都为“true”的时候,最终条件才为“true”;


l “||”是所有条件中,只要有任何一个条件为“true”,最终条件就为“true”。


优先级


如果有一个100*(10-1)/(10+5)表达式,程序是先计算哪一步?中学数学告诉我们:①如果是同一级运算,一般按从左往右依次进行计算。②如果既有加减、又有乘除法,先算乘除法、再算加减。③如果有括号,先算括号里面的。④如果符合运算定律,可以利用运算定律进行简算。麦语言的优先级也是如此,如下图:



条件语句


通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在JavaScript中,我们可使用以下条件语句:


l if语句 - 只有当指定条件为true时,使用该语句来执行代码


l if...else语句 - 当条件为true时执行代码,当条件为false时执行其他代码


l if...else if....else语句- 使用该语句来选择多个代码块之一来执行


l switch语句 - 使用该语句来选择多个代码块之一来执行


if语句


只有当指定条件为true时,该语句才会执行代码。请使用小写的if。使用大写字母(IF)会生成 JavaScript 错误!如下图所示:



if...else语句


当条件为true时执行代码,当条件为false时执行其他代码,如下图所示:



for循环


有时候我们需要获取最近几天的K线数据,就需要从K线数组中,根据K线数据的位置依次获取,那么使用for循环是很方便的,如下图所示:



while循环


我们都知道行情是在不断变化的,如果你想获取最新的K线数组,就得不断的去一遍又一遍地运行相同的代码,那么使用while循环,只要指定条件为true,循环就可以一直获取最新的K线数组。



break语句和continue语句


循环是有前提条件的,只有这个前提条件为“true”的时候,循环才会开始重复的做某些事,直到这个前提条件为“false”的时候,循环才会结束。但是break语句可以在循环执行的过程中立刻跳出循环;continue语句可以中断某一次循环,然后继续下一次循环。如下图所示:



return语句


return语句会终止函数的执行并返回函数的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!



CTA策略架构


在发明者量化工具中,如果用JavaScript语言编写策略将会非常方便,官方内置了一套标准策略框架,如下图所示:



如上图中的代码,这是一个标准的策略框架,除了可以更改“商品期货品种代码”外,其他都是固定的格式,使用框架编写策略的最大好处是,你只需要编写策略逻辑就行了,其他的行情获取、下单处理等等一系列问题,都由框架处理。这样可以使你专注于策略开发。



下节预告:日内交易也是一种交易模式,这种方式不留仓过夜,所以受市场波动率风险较低,一旦出现不利行情,可以及时进行调整。学习了本节JavaScript语言入门,下节我们将带大家手把手编写一个可行的日内量化交易策略。


课后习题:

1. 试着用发明者量化工具中的JavaScript语言获取历史K线数据。

2. 试着写下本节开头的策略代码,并写上注释。


最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!


金十交易学院,8点准时更新


0人喜欢
2019-03-20 08:00:00