7.7 程序化交易的应用

7.7  程序化交易的应用

在近几年的交易中,有这样一种现象正悄然形成,一些年轻的投资者虽然进入期货市场的时间不长,却一样可以拥有良好的收益情况并且将回撤也控制得很到位。从前成功的交易人几乎都是交易经验丰富的老期货,为什么近几年却能够涌现出年轻的优秀交易员呢?这其中,程序化扮演了重要的角色。

7.7.1  什么是程序化交易

程序化交易(Program Trading),是证券交易方式的一次重大的创新。传统交易方式下,一次交易中只买卖一种证券,而程序化交易则可以借助计算机系统在一次交易中同时买卖一揽子证券。根据美国纽约证券交易所(NYSE)网站2013年8月份的最新规定,任何一笔同时买卖15只或以上股票的集中性交易都可以视为程序化交易,在之前的NYSE程序化交易还包括一揽子股票的总价值需要达到100万美元的条件。

当前,关于程序化交易,学术界和产业界并没有一个统一权威的定义,在国内,通常意义下的程序化交易主要是应用计算机和现代化网络系统,按照预先设置好的交易模型和规则,在模型条件被触发的时候,由计算机瞬间完成组合交易指令,实现自动下单的一种新兴的电子化交易方式。也就是说,国内资本市场对程序化交易的理解,不再如NYSE那样着重突出交易规模和集中性,而只强调交易模型和计算机程序在交易中的重要性。

从本质上来看,程序化交易是把投资者的投资策略或者交易思路形成电脑语言,通过电脑的运算并发出交易指令,然后由操作者自己下单形成半自动交易或完全电脑下单来实现全自动交易。所以,程序化交易的实质在于投资者的投资策略实现程序化的过程,程序本身只是一种辅助工具,它能帮助投资者矫正投资者交易策略的任意性、交易思路的多变性,帮助投资者迅速发现并捉住投资市场上瞬间出现的各种交易机会。现实中,投资者使用程序化交易模型的盈利情况并不一样,残次不齐,有的还出现亏损,这也就更能反映出程序化交易对投资者而言只能作为一种辅助工具,并不能起到决定性的作用。

7.7.2  程序化交易的优缺点

程序化交易的优点有两项,分别是可以克服人性的弱点和可以突破人的生理极限,如图7.34所示。

1. 可以克服人性的弱点

可以克服人性的弱点是程序化交易最大的优点,也是大多数交易者喜爱程序化交易的最主要原因。人是有人性的弱点的,人的情绪化因素,贪婪、恐惧、做事不果断、赌性等因素都会让一个人在正交易的时刻突然改变原有的计划,而这种行为是不断重复发生的。德国的哲学家、心理学家叔本华说过“一个人在相同的时间和环境条件下会犯同样的错误,是不可避免的,这就是人的劣根性”。

作为交易了很多年的老期货人,都有非常深刻的体会,与其说我们和市场做交易,还不如说我们是不断地和自己的心魔做斗争。而程序化交易是一切功课在事先,电脑是不折不扣的执行者,应当说几乎百分之百地做到知行合一。这样也让人从盘面的辛劳中解脱出来,多少年来我们天天面对着盘面,我们的心每天都被跌宕起伏的行情所牵扯着,其实我多年的想法就是希望能做快乐期货交易,轻轻松松地赚钱,快快乐乐地生活。因为我前期为期货付出的太多,应当有个回报了,所以更希望程序化交易能给我新的突破。

2. 可以突破人的生理极限

使用程序化交易可以突破人的生理极限。我们都知道人的反应速度是有限的,我们交易从大脑所想到手动需要一段时间来完成,而电脑程序交易显然比人工快得多,特别是当我们为了分散风险而进行多品种组合时,人的能力是有限的,如果选择品种多一点更能降低交易风险,如果我们想同时持有四个以上的商品品种,当行情激烈时多品种同时发生信号交易,那么一个人的行为是顾及不了的,但电脑可以轻松完成。程序化交易可以让你远离期货,享受生活。

程序化交易的缺点主要表现在两个方面,分别是程序化交易的不稳定性、程序化交易技术门槛高,如图7.35所示。

3. 程序化交易的不稳定性

程序化交易系统不可以永远包打天下,总会在特定的时候出现一定问题。有的人高估程序化交易的效果,把程序化吹嘘得很神奇,但也有人很排斥程序化交易,质疑程序化交易的作用,认为用程序化交易来赚钱是不是有点像发明永动机一样可笑,所以一棒子把它打死,其实这是不妥的。我们要正确看待程序化交易,应当把它作为一种工具来看待,怎样做得好,取决于你怎样利用好这个工具,程序化交易是人设计出来的,当然某个程序化交易系统赚钱的能力会直接反映设计者的交易水平。设计思想实质上是集成了交易理念、交易思路、交易方法甚至包括交易经验在内的一种积累与沉淀,但我们是不能保证一种方法就一定能永远适用市场的。程序化交易系统背后的设计者,是不能一劳永逸的,是要面对这个市场,不断学习,不断进取,不断掌握先机。

4. 程序化交易技术门槛高

当前,程序化交易技术门槛还是比较高的,不能平民化。国内的一些知名软件平台,有时还是不能全面反映交易者执行思路。现在软件业越来越发达,但还是不会无所不能,总是有缺陷的。编写程序是比较有深度的技术,很多人都不会,学起来不是那么轻松,有一部分人望而却步,即使是资深的软件师,也不可能随心所欲地反映所有系统性交易者的交易思路,一套真正能长期稳定赚钱的系统,可能要求很复杂,不但在交易信号上,而且在资金管理、头寸管理及多策动重叠上都有各种各样的要求。

7.7.3  程序化交易软件的下载与安装

文华财经是专业期货软件服务商,源于中国本土的程序化软件,系统稳定,国内占有率高。基于国内用户习惯诞生的“麦语言”,小语法大函数,积木式的轻松编程环境。提供最全的回测样本:国内合约从开市至今的全部历史数据,支持专业程序化的金融工程思想:多模型组合测试和加载。独创的自动交易运行模组,轻松监控几十个模型的信号执行、资金、持仓、挂单等状态,并且支持手动辅助。下面来看一下程序化交易软件的下载与安装。

(1)在浏览器的地址栏中输入“http: //www.wenhua.com.cn/index.asp”,然后回车,就进入文华财经的首页页面,如图7.36所示。

(2)鼠标指向导航栏中的“量化交易”,就会弹出下一级子菜单,可以看到“赢智程序化交易软件(wh8)”,然后单击它,就进入赢智程序化页面,如图7.37所示。

(3)单击导航栏中的“下载/64位程序化交易软件”,就进入软件下载页面,如图7.38所示。

(4)在这里,可以下载赢智程序化交易软件的实盘通用版,也可以下载赢智程序化交易软件的模拟交易试用版,为了便于投资者学习,这里下载赢智程序化交易软件的模拟交易试用版。

(5)单击“下载模拟交易试用版”按钮,向下拖动垂直滚动条,就可看到下载按钮,如图7.39所示。

(6)在这里可以用电信下载,也可以用联通下载。单击“电信下载”按钮,弹出“新建下载任务”对话框,如图7.40所示。

(7)在这里可以看到下载网址、名称、下载到的位置(我这边把它下载到桌面上了),设置好后,单击“下载”按钮,就开始下载,并显示下载进度提示对话框,如图7.41所示。

( 8)下载成功后,就可以在桌面上看到安装文件,如图7.42所示。

(9)赢智程序化交易软件下载成功后,就可以安装该软件了。

(10)双击桌面上的安装文件图标,就弹出安装向导对话框,并且显示确定安装信息,如图7.43所示。

(11)单击“开始安装”按钮,就可以指定文件的安装目录,在这里安装到“E:\赢智模拟版x64”,如图7.44所示。

(12)单击“下一步”按钮,就开始解压文件并安装,如图7.45所示。

(13)安装成功后,就可以在桌面上看到赢智程序化交易软件的快捷图标,如图7.46所示。

7.7.4  编写模型

做程序化自动交易,首先要有模型。注意,这里提到的模型是指在编辑平台上使用麦语言编写的包含变量、交易条件、交易指令等的源码。程序化会按照模型编写的条件执行。

打开赢智程序化交易软件,单击左侧导航栏中的“模型”,就进入程序模型界面。然后在“自编”下的空白处,单击鼠标右键,在弹出的快捷菜单中单击“新建公式”,弹出“My Language(麦语言)趋势跟踪模型编写平台一新建趋势跟踪模型”对话框,如图7.47所示。

然后编写代码如下:

MA1:MA(CLOSE,N1);

MA2:MA(CLOSE,N2);

MA3:MA(CLOSE,N3);

MA4:MA(CLOSE,N4);

MA5:MA(CLOSE,N5);

MA6:MA(CLOSE,N6);             //定义6条均线

CROSSUP(MA1,MA2),BPK;         //5周期均线上穿10周期均线做多。

CROSSDOWN(MA1,MA2),SPK;      //5周期均线下穿10周期均线做空。

AUTOFILTER;

这里有6个计算参数,分别是N1、N2、N3、N4、N5、N6,这个参数具体设置如图7.48所示。

设置描述为“均线组合”,属性为“K线附属指标”。然后另存为该文件,文件名为“MYMA”,如图7.49所示。

程序模型文件编辑好后,要先检测一下语法有没有问题。单击菜单栏中的“检测/语法检测”命令,就可以进行语法检测,如果没有错误,就会显示“恭喜您,测试成功!”,如图7.50所示。

7.7.5  模型测试

有了模型后,我们通常是不敢马上进行实盘交易的,因为我们不了解模型,不知道它与我们的交易思路是否相符,盈利率是多少、胜率是多少、多久会出一次交易信号,等等。只有了解了模型、信任模型才能放心地在实盘中应用它,所以在实盘交易前需要检验模型在历史K线上的效果。

首先要选择要加载程序模型的K线图,在这里选择的是“螺纹主连”的日K线图,如图7.51所示。

然后双击“自编”中的“MYMA均线组合”,把模型加载到日K线图中,如图7.52所示。

再单击左侧导航栏中的“模型”,双击“MYMA均线组合”程序模型文件,即打开该文件,如图7.53所示。

单击菜单栏中的“检测/回测报告”命令,如图7.54所示,弹出“模型回测报告”对话框,如图7.55所示。

从盈利率上看,盈利率为-1.30%,不是一个好模型。

单击“资金曲线”选项卡,可以非常直观地看资金曲线的变化情况,从而去检查模型的效果是否符合我们的预期要求,如图7.56所示。

7.7.6  加载模型进行自动交易

仅有模型是不能全自动交易的,我们需要将模型、合约、周期K线、委托手数等组合在一起形成一个模组,才能全自动下单。

有些交易者希望可以模型带有个性化的信号执行方式,有些交易者希望采用资金管理的策略并实时监控各个模型的浮盈和平仓盈亏情况,还有些交易者需要利用盘口的数据进行高频程序化交易,这样需求的用户可以使用“运行模组”进行全自动交易。

在“螺纹主连”的日K线图中,单击鼠标右键,在弹出的快捷菜单中选择“装入到模组/盒子,后台运行”,如图7.57所示。

单击“装入到模组/盒子,后台运行”,弹出“装入到模组?还是盒子?”对话框,如图7.58所示。

提醒:】装入模组,可以100%全自动化交易,适合24小时不关机情况下使用;装入到盒子,可以半自动化交易,不支待资金管理和持仓管理。

在这里选择“装入到盒子”,弹出“装入的内容”对话框,如图7.59所示。

在这里选择“MYMA”模型,即我们刚才编写回测的模型,虽然不理想,但这里仅用于模拟测试。

由于这里的合约是指数,所以还要选择具体交易的合约。单击“交易合约”后面的按钮,弹出“选择合约”对话框,如图7.60所示。

选择“螺纹1710”即当前的主力合约,然后单击“确定”按钮。再选中“直接下单不需手动确认”前面的复选框,最后单击“确定”按钮,这时弹出“其他选项”对话框,如图7.61所示。

单击“完成”按钮,弹出提示对话框,如图7.62所示。

单击“确定”按钮,再单击左侧导航栏中的“盒子”,然后在第一页下面就可以看到刚建立的盒子,如图7.63所示。

选择刚建立的盒子,单击鼠标右键,弹出快捷菜单,可以管理盒子,即可以启动、暂停、卸载、删除盒子等。

7.7.7  程序化交易实例

下面以沪铜期货合约为例,讲解一下程序化交易的实战应用。

沪铜期货合约的模型编写的基本思路如下:

1. 沪铜期货合约入场条件

中国铜产量增加的情况下,市场处于做空的氛围中,此时如果LME铜库存和上期所铜库存都增加,符合空头入场条件,即做空单。

中国铜产量减少的情况下,市场处于做多的氛围中,此时如果LME铜库存和上期所铜库存都减少,符合多头入场条件,即做多单。

沉淀资金增加,沪铜期货投资热情高,此时确认入场条件。另外,引入一个变量CX,计算现货价格的波动程度,波动程度较大的情况下,确认入场条件。

2. 沪铜期货合约出场条件

铜现货价格与期货价格的基差增大,空头出场。

铜现货价格与期货价格的基差减小,多头出场。

沉淀资金持续减小,沪铜期货投资热情降低,此时确认出场条件。

下面来利用赢智程序化交易软件编写沪铜期货合约的基本面模型。

打开赢智程序化交易软件,单击导航栏左侧的“模型”,然后在空白处单击鼠标右键,在弹出的快捷菜单中单击“新建公式”,弹出“My Language(麦语言)趋势跟踪模型编写平台一新建趋势跟踪模型”对话框,然后编写代码,如图7.64所示。

需要注意的是,这里有一个参数,名称为“MARGIN”,最小值为1,最大值为100,默认为5。

代码如下:

沉淀资金:=OPI *C*UNIT*MARGIN , COLORGENTA;

CX:= ABS(GETBASEINF0(235)-REF(GETBASEINF0(235), 29))/(HHV(GETBASEINFO(235), 30)-LLV(GETBASEINFO(235), 30))*100;

JC:=GETBASEINF0(235)-C;         //基差

NUM:=REF(BARSLASTCOUNT(ISNULL(GETBASEINF0(85))),1)+1;

//LME 铜库存

NUM1:=REF(BARSLASTCOUNT(ISNULL(GETBASEINF0(68))),1)+1;

//上期所铜库存

NUM2:=REF(BARSLASTCOUNT(ISNULL(GETBASEINF0(9))),1)+1;

//中国铜产量

KT:=BARSLAST(GETBASEINF0(9)>REF(GETBASEINF0(9),NUM2))<BARS LAST(GETBASEINF0(9)<REF(GETBASEINF0(9),NUM2));

DT:= BARSLAST(GETBASEINF0(9)>REF(GETBASEINF0(9), NUM2))>BARS LAST(GETBASEINF0(9)<REF(GETBASEINF0(9),NUM2));

KT&&(GETBASEINFO(85)>REF(GETBASEINFO(85), NUM)||GETBASEIN FO(68)>REF(GETBASEINFO(68), NUM1))&&CX<=70&&沉淀资金>REF(沉淀资金,1), SK;       //利空

DT&&(GETBASEINFO(85)<REF(GETBASEINFO(85), NUM)||GETBASEIN FO(68)<REF(GETBASEINFO(68), NUM1))&&CX <=70“沉淀资金> REF(沉淀资金,1), BK;       //利多

JC>HV(JC, 3)||EVERY(沉淀资金<REF(沉淀资金,1), 5), BP;

JC<LV(JC, 3)||EVERY(沉淀资金<REF(沉淀资金,1), 5), SP;

AUTOFILTER;

下面保存文件。单击菜单栏中的“文件/另存为”命令,弹出“另存为”对话框,然后保存在“基本面模型”中,文件名为“沪铜期货合约的基本面模型”,如图7.65所示。

然后单击“保存”按钮,这样在基本面模型中,就可以看到“沪铜期货合约的基本面模型”文件,如图7.66所示。

下面我们来回测该基本面模型。单击“上海SHFE”选项,然后选择“沪铜指数”,如图7.67所示。

双击“沪铜指数”,显示其日K线图,然后再双击“沪铜期货合约的基本面模型”文件,加载就用该模型,如图7.68所示。

选择“沪铜期货合约的基本面模型”文件,然后单击鼠标右键,在弹出的快捷菜单中单击“编辑公式”命令,打开“沪铜期货合约的基本面模型”文件。

再单击菜单栏中的“检测/回测报告”命令弹出“模型回测报告”对话框,如图7.69所示。

单击“资金曲线”选项卡,还可以看到该模型的资金曲线图,如图7.70所示。