资源描述
*,*,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,程序化交易探讨,什么是程序化交易,那些英雄,为什么要“程序化交易”?,程序化交易的分类,国内的三个平台,模型的编写,模型的优化,模型的仿真测试,模型的实盘运行,程序化交易需要注意的问题,什么是程序化交易,由于计算机技术和网络技术的高速发展,使得金融市场上用计算机代替手工操盘成为可能,程序化交易是金融市场伴随计算机和网络技术的发展的产物。,借助行情分析交易平台,,将操盘策略和资金管理用计算机语言描述,形成一套能够直观反映多空进出提示或由计算机直接完成下单操作的系统,这就是程序化交易。,程序化交易是协助我们对行情进行快速统计、分析、执行交易操作的决策工具。目前主要应用于外汇、证券、期货市场。,程序化交易在国外普及较早,著名的平台有,MT4,、,TS,等,国内的程序化交易起步较晚,但在近几年来得到迅速发展,比较有影响力的有文华财经、交易开拓者、金字塔等。,程序化交易系统在国外普遍被称为,EA(Engineer,Advisors,专家顾问,),,在国内大多称作模型。,程序化交易,是美国,70,年代的证券市场上的系统化交易发展演变而成的。,股票组合转让与交易系统,程序化交易的定义,定义一:所有通过计算机软件程序进行自动下单的交易。,定义二:按照美国,NYSE,的定义,,Program Trading,是指,任何含有标普,500,指数,15,只股票以上,或是一百万美元以上的交易,,程序化交易的定义,程序化交易的定义,纽约证券交易所程序化交易所占比例(,6,月,28,日,-7,月,2,日),程序化交易的定义,纽约证券交易所程序化交易与其他交易分布图(,6,月,28,日,-7,月,2,日),那些英雄,高盛,在金融危机下动荡的,2009,年,高盛公司的一份盈利报告显示其在第二季度共有,46,个“亿美元交易日”,也就是说其有,46,个交易日盈利超过,1,亿美元。,国外主要程序化交易商,James Simons,复兴技术公司(,Renaissance,),纯量化投资,全自动交易,89,年头,4,个月亏损了,30%,后,剔除所有宏观经济数据只考虑短线交易。,市场越差,收益越高。,2000,,,98.5,;,2008,,,80%,那些英雄,David E.Shaw D.E.Shaw&Co,规模,220亿美元,有时交易占到NYSE的5%,统计套利,多空交易策略,Steven A.Cohen SAC Capital Advisors,160,亿美元(,3%,,,50,),每年交易费用就达到,1,亿美元,国内程序化交易的发展现状,国内程序化交易起步较晚,但最近几年在以文华财经为主的交易平台带领下,程序化交易得到迅猛发展。交易开拓者和金字塔后来居上,为程序化交易增添了新的活力,使程序化交易在性能上更加完善,功能上更加强大。,交易系统中,自定义函数为系统增加了相当大的灵活性,对于熟悉,C,语言的朋友,很容易就能用交易开拓者写出自己的自定义函数,对于熟悉,OFFICE VBA,的朋友,也可以用金字塔写出功能强大且能快速执行的自定义函数。,当前,程序化交易已由简单图表交易发展到功能更加强大的后台交易,,后台交易为多品种多账户交易提供了便利条件。金字塔在后台程序化交易方面开了先河,后台交易无需与图表一一对应,启动模型选入打算交易的一些品种即可。,交易中最薄弱的环节是网络通讯,程序化交易也不例外。因此,除增加备份线路外,将自己的自动交易模型上传到服务器进行托管可以有效降低因网络故障带来的风险。,国内程序化交易的发展现状,大部分交易者并不是都会写模型或者写不出自己理想的模型,其实,我认为,,没有必要人人都既做程序员又做交易员,针对这种状况,出现了远程公式经授权即可本地使用的模式,比如,金字塔的远程服务器取公式这一功能就很受大众欢迎。,针对既不会编程也没有交易模型的交易者,如果要想使用程序化交易,远程预警功能不失为一种很好的选择方式。金字塔的远程预警为交易者提供多种选择。在接收到远程预警服务器的交易信号时,根据自身喜好,可以选择参考、手动交易、全自动交易等不同方式。,消息提示,针对无人值守的自动交易者,可以很方便的对自己的交易通过接收手机短信方式及时了解账户情况。,灵活、高效的,VBA,编程,特别适合高频套利交易。,下图以金字塔决策交易系统为例展示了客户端接收的消息提示和远程预警信息。,速度快,交易效率高,1,2,3,4,对多个市场机会的精确化把握,最大程度克服人性弱点,便于交易风险控制,程序化交易特点,为什么要程序化交易?,程序化交易系统是集统计、分析、交易与一体的综合工程,它在快速响应方面相对人工分析和操盘有无可比拟的优势。,避免了人为主观臆断,所有提示或交易均以数据为依据,不直接关注基本面消息,基本面对程序化交易的影响只能通过技术指标和数据传导,如果消息不对技术指标和价格等数据不产生影响,则程序不会去理会这些消息。,有效避免人性的恐惧和贪婪,通过编写或者通过平台设置止盈,止损及追踪止损的程序和参数,可以机械的执行预定策略。盈利落袋为安,亏损避免损失扩大化。,使用程序化全自动交易,可以极大的降低了操盘的劳动强度,将操盘工作从紧张,焦虑,疲劳中解脱出来。,一个好的模型,可以做到数据精准,分析结果的准确率高,进场出场点位和时机误差很小。,任何人都会有疲劳的时候,疲劳就容易出错,使用全自动交易可以避免因为人的疲劳而下错单。,对非职业操手来说,可以做到交易和工作两不耽误。,程序化交易的分类,趋势交易,套利交易,程序化交易的分类,算法交易,高频交易,趋势交易,交易的基础:交易策略的期望值为正。所以,我们要做的,是赚市场给你的部分,赔市场拿走的部分,我们的努力就是打造一个策略,让市场给你的更多,市场拿走的更少。,趋势交易,套利交易(,Arbitrage,),主要指无风险套利,或者风险及其微小的套利交易。主要交易的模式是统计性模型和持有成本模型。,套利交易,套利交易,VWAP,TWAP,算法交易,IS,Sniffers,算法交易,算法交易在交易中的作用主要体现在交易的执行方面,具,体包括智能路由、降低冲击成本、提高执行效率、减少人,力成本和增加投资组合收益等方面。,算法交易,VWAP,:(交易量加权平均价格算法),最基本的交易算法,旨在进行买卖时,根据历,史交易量而进行选择交易,以尽量降低该交易对市,场冲击。,算法交易,TWAP,:(时间加权平均价格算法),根据特定的时间间隔,在每个时间点上平均下,单的算法。,TWAP,目的是在对市场影响的情况下提供,一个平均执行价格。,算法交易,IS,:(执行差额算法),根据风险参数设定满足客户的风险承受边界,,又计算交易的市场冲击成本,最后综合考虑冲击成,本和风险两个因素而得出最优算法,努力在两者之,间寻找最佳平衡点。,算法交易,Sniffers,:(搜寻者算法),用于搜寻其他交易商正在进行的交易以及所运,用的算法,该算法往往先少量下单,以寻找是否有,对手的交易算法出现。,高频交易,高频交易(,High-Frequency Trading,,,HFT,)指通过极高速的超级电脑,在极短时间内进行大量交易指令,即可抢先于一般投资者下单,也可以在下单后不到一秒的时间便撤销交易指令,从而试探市场反应或扰乱市场资讯。,高频交易,高频交易是对高频数据进行采集、分析和加工,基于各种策略模型而进行的交易。,高频交易的基础:低风险、微小收益、高频率交易、复利滚动获利,高频交易,关键,计算机性能:超级计算机、并行计算机,网络速度:主机布置在交易所隔壁、网络直连,国内主要程序化交易平台,文华,开拓者,金字塔,如何进行程序化交易,要保证程序化交易的顺利进行,适当的硬件和软件配置是必要的。硬件有计算机、网络接入设备,针对无人值守且有断电可能的交易者,有条件的话最好还配置,UPS(,不间断电源,),。,选择性能优良的且适合自己操作习惯的策略来编写模型。一般,单一的策略很难发挥全程效能,选取策略时最好能取长补短,使用多种策略模块,然后组成一个整体模型。,模型编写完成后,要经过反复查错,并对模型进行必要的优化,再进行模拟最后实盘。,模型的编写,策略是交易的灵魂,选取性能优良的策略是模型成功的关键的第一步,正确的策略是保证模型成功的前提。,构思严谨和注重逻辑是模型编写成功的基本保证,.,有了好的策略,需要用计算机语言精确的表达才能体现策略的原貌,表达得越精准,越能体现策略的本质。用计算机语言准确描述的过程就是编程。,编写程序时既要考虑程序语言对运行速度的影响,(,需要对计算机语言在运行过程中是如何执行的有一定的了解,),,又要言简意明,.,比如下面这个表达式,:,模型的编写,HREF(H,1)AND HREF(H,2)AND HREF(H,3)AND HREF(H,4)AND HREF(H,5);,模型的编写,我们完全可以用另一种简洁的方式来描述,:,HREF(HHV(H,5),1);,如果编写模型的指令是在盘中执行的,则需要考虑盘中的动态环境,尽量不用收盘价,C,,因为在盘中它是动态的,不到收盘是不确定的,.,针对盘中指令,我们可以根据不同的开仓方向或平仓方向,使用最高价,H,或最低价,L,代替,盘中由于最高价,H,只会向上增长,最低价,L,只会向下增长,且盘中任何一个新出现的,H,或,L,都是当时的,C,,因此不会对交易的结果产生影响且能有效避免大部分指令反复。,如果模型的指令是等待,1,根,K,线走完才执行的或者是基于分笔交易的,则完全可以使用收盘价,C,。,一个模型,可能是多个策略模块的组合,在各个模块同时计算时,有可能发生冲突,如这个模块要做多那个模块要做空的情况,这就需要在模型内部引入协调和仲裁机制,当然,这种情况也可以用非多既空的在线持仓方式来解决。,模型的编写,变色线指标在沪铜分周期上的表现,模型的编写,变色线指标在沪铜分周期上的表现,模型的编写,指标在沪铜分周期上的表现,模型的编写,通过初步对比,可以挑选出自己认可的指标来作为交易编程的策略。接下来我们可以开始规划模型的结构。,确定是日内模型还是隔夜模型。为了避免多次写相同类型的模型,用参数选择日内或隔夜的类型,参数做日内,做隔夜。,根据个人爱好确定使用的线周期。可以是固定周期也可以是变化的,我的习惯是如果是日内交易,只选分周期以下的线做参考。,模型编写的过程中,很大一部分工作量是调试,为了调试快捷,可以在参数中设置一个调试开关。当时模型处于正常工作状态,当是处于调试状态。在调试状态下,我们可以输出各种指标线条和文字,也可以写磁盘记录文件供分析。,模型的编写,参数设置例子,模型的优化,模型编写完成后,对模型进行适当的优化是必要的,优化的过程就是对历史拟合的过程,因为历史蕴藏经验,经验是可以复制的。,模型的可优化参数不宜过多,过多的可优化参数在优化过程中,会花大量的时间,过度优化实际上是对历史数据的过度拟合,未必适合将来。历史的车轮滚滚向前,历史是有限的,未来是无限的。,取舍优化结果要与设计初衷一致。例如,我们设计一个均线交叉模型,短周期,N1,均线上穿长周期均线,N2,做多,反之做空。如果优化的结果是短周期参数,N1,的值大于长周期参数,N2,的值,与设计初衷不一致,我们就应该放弃。,模型的优化,综合衡量模型的优化结果,不一定利润最大或胜率最高的就是将来最好的。个人认为,最基本的要关注的几个数据是总利润,胜率和最大回撤,要综合取舍才好。,经过优化的模型参数应尽量取相邻数值平滑的中间值。避免取大起大落比较锐利的尖峰数值。,模型的优化要有足够长的历史数据。,充分利用模型的参数,避免重复编写模型。,模型的仿真测试,模型初稿编写完成,经过适度优化后就可以利用模拟交易平台进行仿真测试了,仿真测试的目的主要是验证模型,发现问题并解决问题,进一步完善模型。,模型的仿真测试要尽量维持适当长一点的时间。每次修改和处置要有详细的记录,有条件的可以找专家和交易员对仿真测试结果进行评审。,模型的仿真测试,日内,沪铜连续分周期测试效果图,模型的仿真测试,将上面模型的,DEBUG,参数设置为,则会产生如下测试记录,日期 时间 名称 操作 数量 价格 手续费 单笔净盈亏 累计净盈亏,2009-11-13 9:30,沪铜连续 开空,1 50790.00 0 0 0.00,2009-11-13 9:54,沪铜连续 平空,1 50870.00 70.00-470.00,-470.00,2009-11-13 9:57,沪铜连续 开多,1 50900.00 0 0-470.00,2009-11-13 15:0,沪铜连续 平多,1 51170.00 70.00 1280.00 810.00,2009-11-16 9:3,沪铜连续 开多,1 51520.00 0 0 810.00,2009-11-16 9:6,沪铜连续 平多,1 51400.00 70.00-670.00 140.00,2009-11-16 9:9,沪铜连续 开多,1 51460.00 0 0 140.00,2009-11-16 15:0,沪铜连续 平多,1 52730.00 70.00 6280.00 6420.00,。,2010-9-1 9:6,沪铜连续 开多,1 58860.00 0 0 378170.00,2010-9-1 11:12,沪铜连续 平多,1 59650.00 80.00 3870.00 382040.00,2010-9-1 11:12,沪铜连续 开空,1 59600.00 0 0 382040.00,2010-9-1 14:12,沪铜连续 平空,1 59530.00 80.00 270.00 382310.00,2010-9-2 9:3,沪铜连续 开多,1 60120.00 0 0 382310.00,2010-9-2 9:21,沪铜连续 平多,1 60080.00 90.00-290.00 382020.00,2010-9-2 9:27,沪铜连续 开空,1 60130.00 0 0 382020.00,2010-9-2 11:18,沪铜连续 平空,1 59990.00 90.00 610.00 382630.00,2010-9-2 13:33,沪铜连续 开多,1 60080.00 0 0 382630.00,2010-9-2 14:0,沪铜连续 平多,1 59950.00 90.00-740.00 381890.00,2010-9-2 14:51,沪铜连续 开多,1 60000.00 0 0 381890.00,2010-9-2 15:0,沪铜连续 平多,1 59920.00 90.00-490.00 381400.00,模型的仿真测试,将上面的测试报告与线逐笔对比,检查是否符合设计策略,盈亏曲线是否平滑,最大回撤是否在承受范围之内,同时还要关注一下胜率。如果各项指标符合要求,我们可以再将它用于其它合约和周期进行测试。,上面测试报告记录太长,未全部贴出,详细报告见附件文件。,下面是用于其它合约的效果图。,模型的仿真测试,日内,沪铜的分周期测试效果图,模型的仿真测试,日内沪铜的分周期测试效果图,模型的仿真测试,日内股指,的,分周期测试效果图,模型的仿真测试,日内股指,的,分周期测试效果图,模型的仿真测试,日内沪胶连续,的,分周期测试效果图,模型的仿真测试,一般情况下,对模型的测试或实盘操作,建议以活跃品种为主,比如连续合约(既主力合约)。,模型的实盘运行,进入实盘运行的模型不一定要暴利,但需要稳定。,多关注资金曲线的长期效果,少盯短期盈亏。,最大回撤至关重要。这个指标直接关系到投资者的资金承受能力和心理承受能力,也是计算和制定投资仓位的重要指标。,模型的实盘运行,/09/02,实盘全自动操作的天胶图表显示效果图(分周期),模型的实盘运行,/09/02,实盘全自动操作的沪铜图表显示效果图(分周期),模型的实盘运行,月号到号的实盘预警信息,序号 品种名称 说明 预警名称 预警时间 预警价格 现价,/,盈亏 动作,1 RU01,橡胶,1101,交易,V16B 10/09/01 09:03 25560 26220/+2.58%,开多,2 CU12,沪铜,1012,交易,V16B 10/09/01 09:04 58870 59900/+1.75%,开多,3 RU01,橡胶,1101,交易,V16B 10/09/01 11:06 25840 26220/+1.47%,平多,4 RU01,橡胶,1101,交易,V16B 10/09/01 11:06 25815 26220/+1.57%,开空,5 CU12,沪铜,1012,交易,V16B 10/09/01 11:09 59650 59900/+0.42%,平多,6 CU12,沪铜,1012,交易,V16B 10/09/01 11:09 59600 59900/+0.50%,开空,7 RU01,橡胶,1101,交易,V16B 10/09/01 13:37 25835 26220/+1.49%,平空,8 RU01,橡胶,1101,交易,V16B 10/09/01 13:37 25835 26220/+1.49%,开多,9 RU01,橡胶,1101,交易,V16B 10/09/01 13:46 25710 26220/+1.98%,平多,10 RU01,橡胶,1101,交易,V16B 10/09/01 13:56 25690 26220/+2.06%,开空,11 CU12,沪铜,1012,交易,V16B 10/09/01 14:09 59530 59900/+0.62%,平空,12 RU01,橡胶,1101,交易,V16B 10/09/01 14:12 25745 26220/+1.85%,平空,13 RU01,橡胶,1101,交易,V16B 10/09/01 14:15 25755 26220/+1.81%,开多,14 RU01,橡胶,1101,交易,V16B 10/09/01 14:58 25710 26220/+1.98%,平多,15 CU12,沪铜,1012,交易,V16B 10/09/02 09:00 60150 59900/-0.42%,开多,16 RU01,橡胶,1101,交易,V16B 10/09/02 09:00 25875 26220/+1.33%,开多,17 CU12,沪铜,1012,交易,V16B 10/09/02 09:18 60080 59900/-0.30%,平多,18 CU12,沪铜,1012,交易,V16B 10/09/02 09:25 60130 59900/-0.38%,开空,19 CU12,沪铜,1012,交易,V16B 10/09/02 11:16 59990 59900/-0.15%,平空,20 CU12,沪铜,1012,交易,V16B 10/09/02 13:30 60100 59900/-0.33%,开多,21 RU01,橡胶,1101,交易,V16B 10/09/02 13:51 26135 26220/+0.33%,平多,22 CU12,沪铜,1012,交易,V16B 10/09/02 13:57 59950 59900/-0.08%,平多,23 RU01,橡胶,1101,交易,V16B 10/09/02 14:16 26105 26220/+0.44%,开空,24 RU01,橡胶,1101,交易,V16B 10/09/02 14:23 26150 26220/+0.27%,平空,25 RU01,橡胶,1101,交易,V16B 10/09/02 14:37 26175 26220/+0.17%,开多,26 CU12,沪铜,1012,交易,V16B 10/09/02 14:48 60000 59900/-0.17%,开多,27 CU12,沪铜,1012,交易,V16B 10/09/02 14:59 59960 59900/-0.10%,平多,28 RU01,橡胶,1101,交易,V16B 10/09/02 14:59 26210 26220/+0.04%,平多,年月日程序化全自动交易清单虽然这天没盈利多少,但能充分证明程序化交易是完全可以按照我们的设计正确执行的。,测试报告,测试报告,测试报告,非常关键,资金的配比,一年期,品种,1,手最大资金回撤 盈利金额,Cu 8132 1204350,Ru,8265 49950,Zn 5600 48565,SR 3560 12230,L 6845 23355,P 4510 53410,避免进入程序化交易的误区,有不少进行程序化交易的朋友抱怨,测试效果非常好,实盘操作一塌糊涂,我认为最大可能就是在对模型进行效果测试时走进了误区,主要表现在以下几个方面。,测试方式错误。用收盘价写的模型用开盘价或盘中价测试,大多写模型是要求收盘时上涨做多下跌做空。那么,收盘上涨做多是在当根线收盘之后才确认的信号,显然,用开盘价或盘中价格测试的话会有很大的误差,这样会引入很大的虚增利润。,如果有未来函数,可能出现在现在行情明了后才在过去的某一时刻买入,或者过去已经买入的信号由于现在行情的改变信号消失了,毫无疑问,这样的模型在测试历史数据时会虚增很大的利润。,只要有信号消失的,这个测试就肯定不可靠,因为他不能反映真实情况,所以我们必须尽量避免有信号消失的情况下进行测试。,如果不是因为使用了未来函数,只是使用了,CLOSE,发生的信号消失,可以通过选择次周期开盘交易来解决,也可以通过用时间来做限定来解决,在当前周期即将结束时下单,这样可以大大降低信号消失的概率。,
展开阅读全文