Uploaded by 别康民

File (14)

advertisement
金融量化策略开发平台设计与实现
申请上海交通大学工程硕士学位论文
金融量化策略开发平台设计与实现
学校代码:
10248
作者姓名:
许索晗
学
1100379105
号:
第一导师:
唐新怀
第二导师:
张艳红
学科专业:
软件工程
答辩日期: 2015 年 7 月 14 日
上海交通大学软件学院
2015 年 7 月
万方数据
金融量化策略开发平台设计与实现
A Dissertation Submitted to Shanghai Jiao Tong University
for Master Degree of Engineering
DESIGN AND IMPLEMENTATION OF A FINANCE
QUANTITATIVE STRATEGY DEVELOPMENT
PLATFORM
University Code:
10248
Author:
Xu suohan
Student ID:
1100379105
Mentor 1:
Tang xinhuai
Mentor 2:
Jessie Zhang
Field:
Software Engineering
Date of Oral Defense:
School of Software
Shanghai Jiaotong University
June, 2015
万方数据
万方数据
万方数据
万方数据
金融量化策略开发平台设计与实现
金融量化策略开发平台设计与实现
摘 要
随着金融工具的不断创新,期货、期权等金融衍生品的相继出现带来了市场
上套利和趋势操作等盈利机会的出现。面对大量的、复杂的金融信息,量化投资
和程序化交易利用计算机技术比人工分析和人工操作更能把握这种盈利机会。因
此量化投资在金融领域得到了迅速的发展。
量化投资是利用计算机技术根据量化模型进行实践的一种投资方法。金融量
化研究首先基于对金融市场规律的大量的观察提出盈利模型的假设,根据假设提
炼预测因子并构建策略,根据已有金融市场数据检验模型的有效性和盈利能力,
然后根据验证结果支持或者推翻该假设;最后优化策略并实现交易策略程序。
量化投资在发达国家已经得到广泛的应用和实践,量化模型和软件建设水平
已经高度成熟。在我国量化投资思想和量化工具则是起步不久,近年来对量化投
资和量化软件工具的探索在蓬勃的发展中。受国内某私募公司委托开发一款金融
量化策略开发平台。该平台设计为运行在 Windows 设备上,提供策略开发、策略
回测、期货实盘交易等功能。
本文首先讨论了金融量化策略开发平台的需求,分析国内外量化投资的发展
现状和策略开发平台的特点,基于国内期货公司现阶段发展需求,针对金融量化
策略开发和程序化交易提供了一个交易策略程序开发、测试和运行的平台。针对
策略验证中大规模数据分析遇到的性能瓶颈,为策略开发者提供了使用 CUDA 调
用 GPU 计算模块的方法。该平台是采用 GPU 作为并发计算模块的客户端程序,和
传统的轻量化策略开发软件相比拥有更高的计算性能,和大规模分布式量化平台
相比降低了维护难度和 IT 设施的成本投入。
金融量化策略开发平台为量化投资者提供策略程序的开发,验证和运行的平
台,帮忙研究者完成投资模型的程序化实现。平台为用户提供策略模板,策略模
板是一个代码工程,用户基于策略模板快速的完成投资模型的程序实现。策略程
序实现后导入到平台中进行运行。策略有效性和盈利能力需要结合历史行情数据
进行验证。平台提供历史数据的存储、读取、更新功能,并利用历史数据为用户
提供模拟行情交易和批量数据验证模型的功能。在验证阶段,大量的历史数据的
计算和分析通常花费大量的计算时间。提高策略验证的速度是量化分析平台考量
I
万方数据
金融量化策略开发平台设计与实现
的重点。平台根据批量数据分析的特点提供了 GPU 计算模块的调用接口,帮忙用
户提升计算性能,在相同数据量的情况提高了近 20 倍的运行速度提升。策略是
否行之有效不仅要通过历史数据的验证,还要测试其是否能在交易操作中把握投
资机会。平台提供模拟行情数据下传和交易的功能,使用历史数据模拟实盘行情
数据下传,使策略程序响应行情数据并作出交易操作。平台实现期货实盘行情和
交易链接,提供实盘行情数据下传和实盘交易操作功能,帮忙用户在实盘中运行
策略。
关键词 量化投资,策略,GPU,CUDA
II
万方数据
金融量化策略开发平台设计与实现
ATION OF A FINANCE
DESIGN AND IMPLEMENT
IMPLEMENTATION
EGY DEVELOPMENT
QUANTITATIVE STRAT
STRATE
PLATFORM
ABSTRACT
As financial tool is innovated, financial derivatives, like future and option, bring
a lot of arbitrage opportunities. As compute science develops, quantitative investment
model and program trade performs better on analyzing massive and complex finance
information than human being.
Quantitative Investment takes advantages of statistics analysis base on computer
science. Quantitative investment researcher firstly proposes a hypothesis based on
observed principle on the finance market, then extracts predictive factor and a logical
model, writes a strategy program and validate it based on history finance market data,
optimize the strategy program and test it based on finance market simulation.
As computer science develops, quantitative investment takes obvious advantages.
The concept of quantitative investment spreads widely in investing funds. In
developed countries quantitative investment is highly practiced. The investing model
and software infrastructure have developed for more then 30 years. Quantitative
investment is accepted by domestic funds and security companies in recent years.
Quantitative investment software platform develops on high speed. A quantitative
strategy development platform on Windows system is developed on demand of local
hedge fund, which offers functions.
This article analyses the research situation of quantitative investment both in
Local and abroad first and compare the difference. Based on the development
III
万方数据
金融量化策略开发平台设计与实现
requirement of local future company, it provides a suggested quantitative investment
analysis platform schema, which provides for investors and analyst a demo strategy
with a series of functions to develop, back test, optimize and run a strategy. GPU and
CUDA is introduced to users as a component of the platform. So it costs less than
massive parallel cloud quantitative platform and is more efficient than application
client.
Finance quantitative analysis platform provides basic functions for strategy
developing, strategy test, virtual market data connection, real trade connection and
other functionality. The platform provides a demo strategy program project for users
to develop agilely. Strategy is imported into the platform after
implementation.Strategy is validated and tested by history market. The platform
provides functionality to store and access history market data. Analyzing huge size of
history market data costs massive time. Optimizing history market data analysis
computing model is a key point of the platform. The platform provides a friendly
GPU program interface to enhance history market data analyzing efficiency up to 20
times faster. The platform uses history market data to simulate finance market to
trigger strategy to validate its performance and profitability. Real future market
connection and future transaction connection is provided for users to run strategy on
real market.
CUDA
Keywords Quantitative Investment, Strategy, GPU
GPU,CUDA
IV
万方数据
金融量化策略开发平台设计与实现
目 录
1 绪 论................................................................................................................... 1
1.1 研究背景................................................................................................. 1
1.1.1 金融量化投资的广泛应用......................................................... 1
1.1.2 金融量化策略开发平台的应用................................................. 2
1.1.3 国内外研究现状......................................................................... 3
1.2 本文的研究内容..................................................................................... 3
1.3 论文结构安排......................................................................................... 4
2 金融量化策略开发平台相关技术..................................................................... 5
2.1 量化投资方法......................................................................................... 5
2.2 量化投资技术手段................................................................................. 5
2.3 相关技术................................................................................................. 6
2.3.1 GPU............................................................................................... 6
2.3.2 CUDA............................................................................................. 7
2.4 本章小结................................................................................................. 9
3 金融量化策略开发平台需求分析................................................................... 10
3.1 策略....................................................................................................... 10
3.1.1 策略开发................................................................................... 11
3.1.2 策略运行方式........................................................................... 12
3.1.3 行情数据与参数....................................................................... 13
3.1.4 资金账户信息........................................................................... 14
3.1.5 交易........................................................................................... 14
3.1.6 回测........................................................................................... 15
V
万方数据
金融量化策略开发平台设计与实现
3.1.7 日志监控................................................................................... 15
3.1.8 CUDA........................................................................................... 16
3.2 行情和交易链接................................................................................... 16
3.2.1 实盘链接................................................................................... 17
3.2.2 虚拟链接................................................................................... 19
3.2.3 历史数据获取........................................................................... 20
3.3
系统功能需求...................................................................................... 20
3.3.1 策略管理................................................................................... 20
3.3.2 交易账户管理........................................................................... 20
3.3
本章小结.............................................................................................. 21
4 金融量化策略开发平台设计........................................................................... 22
4.1 系统架构设计....................................................................................... 22
4.2 应用结构设计....................................................................................... 23
4.2.1 平台运行环境和开发技术....................................................... 24
4.2.2 核心层设计............................................................................... 24
4.2.3 应用层设计............................................................................... 30
4.2.4 实盘链路层设计....................................................................... 31
4.2.5 历史数据设计........................................................................... 34
4.3 本章小结............................................................................................... 34
5 金融量化策略开发平台实现和验证............................................................... 36
5.1 关键功能实现....................................................................................... 36
5.1.1 核心层实现............................................................................... 36
5.1.2 应用层实现............................................................................... 50
5.1.3 实盘链路层实现....................................................................... 54
5.1.4 历史数据实现........................................................................... 58
5.2 关键功能验证....................................................................................... 59
VI
万方数据
金融量化策略开发平台设计与实现
5.2.1 行情驱动型回测功能验证....................................................... 60
5.2.2 批量分析型回测功能验证....................................................... 63
5.2.3 期货实盘链路验证................................................................... 63
5.3 本章小结............................................................................................... 65
6 结 论................................................................................................................. 66
6.1 总结....................................................................................................... 66
6.2 展望....................................................................................................... 66
参考文献............................................................................................................... 68
VII
万方数据
金融量化策略开发平台设计与实现
1 绪 论
1.1 研究背景
1.1.1 金融量化投资的广泛应用
量化投资在海外的发展已有30多年的历史,由于业绩稳定,量化投资基金得
到了越来越多投资者认可,其市场规模不断扩大。1970年量化投资在海外全部投
资中占比为零。而到2009年,量化投资占总份额30%以上[1]。
量化投资是指投资者利用计算机技术、金融工程建模等手段将自己的金融操
作方式,用很明确的方式去定义和描述,用以协助投资者进行投资决策,并且严
格的按照所设定的规则去执行交易策略的交易方式。帮助投资者制定投资决策、
减少执行成本、进行套利、风险对冲和帮助做市商实现报价的功能[2]。
在我国,基本面研究占据市场的主流地位。然而随着证券市场的不断发展,
证券数目的增加,衍生品出现和新业务的推出,基金要想战胜指数的难度不断增
加,量化投资将发挥越来越重要的作用[3]。
近年来监管层重视对一些基础衍生产品的发展,2010 年股指期货上市将中
国资本市场引入金融衍生产品的新时代[4]。未来期权等衍生工具将陆续推出,基
础衍生产品不断发展极大地丰富了量化投资工具,促使量化投资策略多样化发
展。2010年4月沪深300 股指期货被正式推出以来,产生了大量套利机会,许多
的程序化套利策略纷纷出炉并创造出惊人的交易量[2]。
伴随着市场复杂程度日益提升,投资品种数量与日俱增,信息规模日益庞大,
投资者依靠主观判断面临挑战。越来越多的投资人开始关注量化投资,量化投资
的重要性也逐渐被认识和认可[5]。国内市场掀起了量化投资热潮,基金、券商、
私募都纷纷推出各自的量化产品 。据数据统计,截止2012,共有22 只量化型券
商理财产品成立,18 只量化基金产品成立,40 只量化私募产品成立[4]。
传统的投资方法是基本面分析法和技术分析法,而量化投资主要依靠历史数
据和量化模型来寻找投资目标和投资机会,将证券市场中观测到的规律,反应在
量化策略程序中,利用电脑代替人脑处理金融信息,并指导投资决策[3]。
1
万方数据
金融量化策略开发平台设计与实现
量化投资凭借计算机技术方面的优势,在金融领域得到了迅速的发展。和传
统定性投资较依赖对基本面和调研,以投资者的个人经验和主观判断不同,量化
投资是将定性思想和定量规律进行量化应用的过程。相比量化投资,传统的投资
策略受到人类大脑处理信息量的限制,不可能对大量的市场信息做出全面和迅速
的反应。传统投资策略容易受到个人的认知偏差影响。任何人的认知偏差和思维
习惯都会影响投资决策。量化投资以数学模型代替人为的主观判断,克服如贪婪、
恐惧、侥幸心理,和认知偏差,借助计算机的信息处理能力减少投资者情绪的波
动影响,避免做出非理性决策[3]。
量化投资的优点[3]主要体现有计算机严格执行量化投资模型给出投资结果,
而不是随着投资者情绪和心理的变化而改变,可以克服人性的弱点。量化投资的
系统性特征指更全面,多层次,多角度的观察。人脑处理信息的能力是有限的,
处理的投资信息也是有限的。借助计算机技术,量化方法可以全面系统的,快速
的处理信息。充分发挥计算机处理能力,快速地跟踪市场变化。准确性,靠概率
取胜。从历史数据中挖掘有规律性的投资机会并且加以利用。并通过一组交易获
取利润,规避风险。
量化交易也有其局限性,大部分量化交易的模型是基于历史数据设设计,如
果市场上出现历史未出现过的情况则无法盈利。如08年金融危机出现,使得很多
量化交易的机构亏损巨大[5]。
1.1.2 金融量化策略开发平台的应用
量化投资是利用金融策略开发软件,用数量化的方法以数据为基础通过计算
机去验证、实现投资理念的一种方法。
金融量化软件是为量化投资者提供量化策略程序开发所需的基础功能,实现
交易策略程序的开发、回测和交易的软件平台。
量化研究者在金融量化策略开发平台提供的策略模板上进行开发,使用平台
提供的回测功能对自己开发的策略程序进行历史行情数据验证。平台提供互联网
接入方式连接交易所或者经纪公司的行情和交易服务器,使投资者在本地运行的
策略触发后对行情进行程序化分析并进行实盘交易。
起初,量化研究主要是基于Matlab、SAS等专业研究软件。随着量化投资的兴
起,专业的量化分析和量化交易软件出现了。在国内市场上,出现了大量不同层
次的金融量化软件。其中中低端平台适合投资者进行趋势、反趋势等对行情和交
易逻辑要求不高的策略,高端交易平台适合机构投资者进行趋势、套利、对冲、
高频等对行情和交易要求高、逻辑复杂度高的策略[6]。禅智,MagicQuant,通联
2
万方数据
金融量化策略开发平台设计与实现
等量化策略研究和开发软件相续出现。其中禅智和MagicQuant是客户端量化交易
软件,实现了策略开发、回测、数据本地管理和自动化交易功能。通联量化平台
是量化云平台,提供给消费者金融数据服务和云端代码分析。这些产品的诞生进
一步也推动了量化投资的发展。
1.1.3 国内外研究现状
国外成熟金融市场由于起步较早,监管环境逐渐开放,量化投资的巨大利润
空间吸引了大量的数学、计算机等学科的专业人才投入到量化投资软件的建设中
。投资机构投入巨资购买昂贵的软硬件基础设施,针对模型研究阶段的需求,
[2]
采用 SAS、Matlab 等专业数据分析软件[7],历史数据采用大规模数据库或者分布
式集群数据库存储,甚至研发专用的并行计算处理器。为满足高频交易策略,购
买专业高端的服务器[8]。为了满足多个交易所之间的套利交易需求,投资机构甚
至下重金建设两地交易所之间的专用网络设施[9]。
在量化技术和基础设施建设方面国外基金已经累计专业的技术能力和经验,
建立了大规模的历史数据基础服务,分析平台和独立的交易平台。根据不同的交
易市场研制出专业的交易软件和物理架构[10]。
国内投资机构通常通过外购软件产品来构建自己的量化基础平台,并进一步
通过自主研发实现自主的量化分析和策略开发平台。但是传统投资机构技术实力
相对较弱,缺乏基础积累,因此国内出现了一批金融量化平台的提供商。提供商
各自采用不同的解决方案,其策略开发语言和框架迥异。在提高大数据量分析性
能方面主要通过增加服务器性能,或者建设大规模计算集群来满足性能需求。这
种方法需要投入大量的基础设施和运营维护,增加了运营成本。在开发方面主要
采用改用 c、c++等实现策略程序来实现性能提升,但同时带来提高了开发难度
和易用性方面的问题。
国内证券和期货公司近年来逐步重视量化实验室的投入,加大了量化技术和
工具的研究,但由于技术实力相对较弱,需要通过外购或者第三方提供金融量化
平台和策略开发平台。对于IT运营能力和开发能力相对较低的券商和投资公司来
说,建立一套运营成本小,同时拥有高计算性能的金融量化策略开发平台符合目
前国内市场的需求。
1.2 本文的研究内容
本论文通过实际参与项目所从事的工作,分析了国内期货公司在建设量化策
3
万方数据
金融量化策略开发平台设计与实现
略开发平台过程中所涉及的一些问题。首先从实践的角度总结了量化投资的特
点,并与国外研究现状进行对比分析,给出一套针对金融量化策略开发的解决方
案:建立统一的量化策略模板;提供基于行情事件驱动式和批量历史数据处理式
两种策略开发方式;提供了模拟行情下传和交易功能;提供了接入实盘期货交易
系统的功能;针对批量数据分析性能问题,提供了基于CUDA调用GPU计算模块的
解决方案。
本文对期货投资实际需要的功能进行需求分析。在需求分析基础上进行了量
化分析工具的系统架构设计、应用结构设计,系统功能设计。然后进行了各关键
功能的实现。
1.3 论文结构安排
本文共分六章,内容安排如下:
第一章 绪论,介绍本论文的背景、论文主要内容以及论文的结构安排。
第二章 金融量化策略开发平台概述。介绍目前国内外的研究现状;介绍量
化分析方法;介绍模型和策略的开发流程;介绍相关技术知识。
第三章 金融量化策略开发平台需求分析。主要介绍了金融量化策略开发平
台在整个量化策略开发过程中的作用;着重描述了量化研究需求以及系统管理功
能需求。
第四章 金融量化策略开发平台系统设计。首先进行系统总体架构设计、应
用结构设计;然后分模块进行设计说明。
第五章 金融量化策略开发平台实现和验证。对系统的关键功能实现进行系
统描述。
第六章 结束语。对本文工作进行全面总结,给出本文所取得的成果,指出
存在的不足和改进方向。
4
万方数据
金融量化策略开发平台设计与实现
2 金融量化策略开发平台相关技术
2.1 量化投资方法
金融量化研究的一般方法是基于对市场长期的观察和分析提出一个假设然
后用数据去验证这个假设是否成立。金融量化投资的研究方法一般方法如下:
(1) 基于金融市场规律的大量的观察和实践提出盈利模型的假设;
(2) 根据假设提炼预测因子并实现模型的策略;
(3) 根据已有金融市场数据样本检验策略的有效性;
(4) 支持或者推翻该假设;
(5) 优化模型并实现交易算法。
2.2 量化投资技术手段
随着量化投资高速的发展,金融量化软件也迅速的发展并逐步完善。各投资
机构纷纷建立量化实验室,对量化投资平台的建设针对量化策略开发的不同阶段
进行分类:
(1)模型研究
模型研究阶段关注挖掘历史数据和金融规律发现,需要提供历史数据的存储
和数据分析功能。
(2)策略实现和验证
策略实现和验证阶段关注于策略程序的开发和回测,需要提供良好的策略程
序开发体验和模拟行情交易功能。
(3)实盘交易
实盘交易阶段关注于真实的交易行为,需要提供实盘交易功能和高性能的交
5
万方数据
金融量化策略开发平台设计与实现
易服务。
2.3 相关技术
2.3.1 GPU
GPU 是图形处理器。主流计算机中的处理器是 CPU,GPU 负责图形渲染。
受图形显示的需求推动,GPU 不断增减并行处理单元和存储器控制单元的方式
提高处理能力和带宽。GPU 设计者将更多的晶体管用作执行单元,而不是像 CPU
那样用作复杂的控制单元和缓存并以此来提高少量执行单元的执行效率。GPU
在数值计算能力和存储器带宽上比 CPU 有明显优势,且成本更低[11]。
图 2-1 GPU 和 CPU 浮点计算能力对比[12]
Fig.2-1 The Comparison of GFLOPS between GPU and CPU
受市场需求的牵引,为了实现更逼真的图形效果,GPU 性能高速发展,可编
程性和功能都得到了飞速发展。最近几年中 GPU 的性能迅速增长,GPU 和 CPU
浮点计算能力对比如图 2-1 所示。主流 GPU 的单精度浮点处理能力已经达到了
同时期 CPU 的 20 倍左右,带宽是 CPU 的 5 倍左右[11]。
6
万方数据
金融量化策略开发平台设计与实现
随着信息技术的发展,人们需要处理的数据规模不断增长,对高性能计算能
力提出了严峻挑战。随着系统对 GPU 计算的支持,GPU 不只是图形处理器,它
还可以被应用程序用来作为并行处理器。因此 GPU 为解决高性能计算提供了新
的解决方案。
2.3.2 CUDA
CUDA 是英伟达公司发布的一种使用类 C 语言在 GPU 上进行通用计算的开
发环境和软件体系[12]。CUDA 框架如图 2-2 所示。应用程序调用 CUDA 平台提
供的库函数和 API 对 GPU 进行访问。
图 2-2 CUDA 框架图[12]
Fig.2-2 The Framework Of CUDA
由于在性能和成本有显著优势,CUDA 已经在金融、流体力学、信号处理、
电磁仿真、模式识别等领域获得广泛应用。
(1)异构计算
在 CUDA 的架构下,一个程序分为两个部份:主机端和设备端[13]。主机端
程序在中央处理器上执行,设备端程序则是在 GPU 上执行。设备端的程序又称
为内核端。主机端程序将准备好的数据复制到 GPU 的内存中,然后由 GPU 执行
设备端程序,完成对数据的加工,之后将结果 GPU 中取回到内存中。
在 CUDA 架构下并发中最小的单位是线程。多个线程组成一个线程块。一个
线程块中的线程共享一片显存,而且可以进行同步[14]。每一个线程块所能包含的
7
万方数据
金融量化策略开发平台设计与实现
线程数目有限。
执行相同程序的线程块可以组成线程网格。不同线程块中的线程无法存取同
一个共享的内存,因此不同线程块中的线程同步比较困难。
使用 CUDA 尽量利用线程级并行,线程可以在硬件中被动态的调度和执行,
让 GPU 来运行能够被高度线程化的程序。所以 GPU 只有在计算高度数据并行任
务时才能发挥作用。在这类任务中,需要处理大量的数据,数据的储存形式类似
于规则的网格,而对这写数据的进行的处理则基本相同。找到程序中的计算并行
度后,就能将一部分程序移植到 GPU 上。
属于同一线程块的线程拥有相同的指令地址,能够并行执行。核实质上是以
线程块的形式执行的,线程块的执行没有顺序,所以不能并行同步。同一线程块
中的线程在同一个处理器中运行,由处理器中不同的计算模块执行[13]。
(2)存储器模型
除了计算模型以外,CUDA 中定义了不同的存储器模型[14]。
寄存器:对线程来说寄存器都是私有。如果寄存器被消耗完,数据将被存储在
本地存储器。本地存储器对每个线程也是私有的。线程的输入和中间输出变量将
被保存在寄存器或者本地存储器中。
共享存储器:共享存储器可以被同一线程块中的所有线程访问的可读写存储
器,且访问速度和寄存器一样快。
全局存储器:全局存储器是普通的显存。网格中的任意线程都能读写全局存储
器,CPU 可以直接访问全局存储器。
(3)ManagedCUDA
ManagedCUDA 是一款开源 C#工程[15],为 C#提供了原生.NET 接口访问
CUDA API。和 CUDA API 不同,ManagedCUDA 采用面向对象的方法对 CUDA
进行打包,通过使用 ManagedCUDA,平台可以实现 CUDA 主机端程序的 C#开
发。
ManagedCUDA 主要的类成员如下:
(1) CudaContext 类
每个设备端的进程需要至少实例化一个上下文类。上下文类可以通过设备号
实例化;该类实现了 IDisposable 接口,其对象在 Dispose()调用后失效;上下文
类中得静态变量定义了 CUDA 设备的基本参数信息;在多线程模式下,每个线
程可以获取上下文实例。
8
万方数据
金融量化策略开发平台设计与实现
(2) CudaKernel 类
CUDA 设备端程序是从 bin 文件或者 ptx 文件中导入,导入一个内核程序可
以使用上下文类中的方法 LoadKernel();其实例会在上下文实例销毁时一起终结。
(3) CudaDeviceVariable 类
CUDA 设备端变量类管理着在设备端分配的内存空间。通过设备端变量类程
序可以知道所有的设备端数据和元数据信息。在设备端变量对象终结时设备分配
的内存空间随之被释放。
在金融量化策略开发过程中,将处理和分析大量历史数据,而且匹配不同的
策略参数来寻求最佳的参数组合。每个参数组合都会在历史数据中验证一次,达
到对比和选优的效果。GPU 和 CUDA 应用在批量分析式回测过程中可以大幅提
高大数据量、多参数组合的运算效率,有效节省策略研发和计量模型验证的时间。
策略在实时交易时对实时行情进行分析,同时需要对历史行情数据进行回溯
和对比、对多品种数据进行流处理。在这些场景中 GPU 提供了高性能流数据处
理的计算能力,为交易中快速捕捉交易机会提供了技术支持。
2.4 本章小结
本章首先对量化投资和金融量化平台的国内外发展现状进行分析,然后对量
化投资的方法和技术手段进行了研究,接着量化策略概念进行了描述,针对量化
分析中存在的计算性能瓶颈,选择了 CUDA 作为金融量化策略开发平台的计算
模块的可能性。最后研究了 GPU 和 CUDA 平台的技术特性,并介绍了开源工具
ManagedCUDA。
9
万方数据
金融量化策略开发平台设计与实现
3 金融量化策略开发平台需求分析
本章从量化策略的基本概念出发,使用软件工程方法对金融量化策略开发
平台的各个业务模块进行分析,获取平台的功能需求。
3.1 策略
策略是量化投资思想的具体实现,是在金融市场中应对交易行情信息的一
套逻辑规则完整的投资方法 [17]。策略研究者在初步的假设和模型抽象后把投资
模型最终实现为一段可以分析行情并输出交易信息的一组操作,这个市场分析
和交易的执行者就是策略。策略的模型如图 3-1 所示:
策 略
行情数据
交易操作
图 3-1 策略模型
Fig.3-1 Strategy Model
一个完整的策略开发一般流程由五个环节构成,策略研究的一般流程如图
3-2 所示。
策略开发的一般流程包括:
计量建模:根据特定的市场规律现象,抽象出其数学模型、构建出交易思想,
进而整理形成策略。
策略开发:通过计算机语言将策略编写为机器可以识别的代码,计算机编译
策略代码生成自动化交易程序。
10
万方数据
金融量化策略开发平台设计与实现
回测验证:策略是投资理念的实现,需要先在历史中验证盈利能力。回测是
基于历史数据,驱动策略运行,产生买卖信号,依据虚拟的成交记录计算出投资
效率,并进一步对参数和算法进行调优,以探寻最佳投资效果。
模拟验证:使用经纪商提供的模拟账户,用实时行情源驱动策略运行,发出
虚拟交易的指令,在模拟实盘的情况下观察策略的表现。
实盘交易:使用实时行情源驱动策略运行,接入实盘的下单接口,连接券商
或者期货经纪商的柜台系统,用真实资金进行交易。
计量建模
策略开发
回测验证
模拟验证
实盘交易
策略研究流程
图 3-2 策略研究的一般流程
Fig.3-2 General Strategy Development Process
3.1.1 策略开发
策略是一个计量模型的代码实现,是量化思想的具体体现,也是本论文关注
的核心。在实盘交易情况下,策略收到实时的行情数据,根据对行情数据的分析
产生交易指令。策略是一个以实时行情数据为输入,交易指令为输出的算法实现。
策略应由策略研究人员完成编码开发,在平台上完成开发、调试、回测、模
拟交易和实盘等工作。
量化分析平台为策略开发提供以下功能:
(1)策略的运行机制
平台提供策略模板的生成,策略导入,策略运行等功能。
(2)策略的回测
平台提供虚拟的行情数据和虚拟交易功能,帮忙实现策略的验证。
(3)行情数据获取
平台提供实时行情数据的获取功能。
平台利用历史数据提供模拟实时行情下传并驱动策略运行的功能。
11
万方数据
金融量化策略开发平台设计与实现
(4)历史数据获取
平台提供存取历史数据的功能。
(5)交易功能
平台提供实盘交易的功能;
平台提供虚拟交易的功能。
(6)监控功能
平台提供日志记录功能。
3.1.2 策略运行方式
策略的运行根据驱动策略运行的方式分为行情数据驱动[18]和批量数据运行。
(1)行情数据驱动
行情数据驱动方式是指行情数据作为外部事件来到平台,即事件驱动,策略
响应事件后执行研究人员开发的代码做相关的分析,并进行交易。在实盘中,策
略的运行由实时的行情数据来驱动执行。在回测时,平台利用历史行情数据提供
模拟实盘数据下传,并驱动策略运行。
研究人员可以让自己的策略选择不同时间频率的行情数据。行情数据分为一
个时间点上的行情数据分笔行情数据 Tick 和一个时间段上的行情数据分时行情
数据 Bar[19]。
当选择分笔行情数据驱动方式时,每当新来一个 Tick,策略的算法都会被执
行一次。如果一段时间内没有 Tick 数据推送给客户端,由于没有数据到来事件,
这段时间的算法就不会被触发执行。 用户也可以根据实际运算速度进行异步采
样处理,即不需要处理每一个 Tick。当一个 Tick 触发运行策略后,在策略运行
结束后再响应下一个 Tick,通常这样会漏掉策略执行时收到的 Tick,但很多策
略并不需要对每个 Tick 进行响应。
当选择分时行情数据驱动方式时,就是按照 Bar 来驱动策略运行。由于 Bar
的周期是固定不变的,因此 Bar 驱动等效于按照固定时间间隔执行算法。Bar 周
期可以配置,可长可短,由策略研究者根据策略模型选择合适的时间周期[28]。
(2)批量数据运行
批量数据运行方式是指一次性将多个维度的行情数据读入,并做模型验证。
与行情数据驱动方式不同,在利用历史数据验证模型的有效性时,由于历史数据
12
万方数据
金融量化策略开发平台设计与实现
的数据量大,考察的证券品种特别多,事件驱动模拟实盘定时下传数据会使回测
的时间特别长。因此研究人员希望有一种批量、快速处理的数据分析工具在最快
的时间内验证自己的算法。这在种场景下,需要批量处理数据。批量数据处理的
计算性能是研究者考察平台的重点。
3.1.3 行情数据与参数
行情数据和参数是策略运行的外部数据,策略的在初始化时配置用户传入的
参数,并在行情数据的驱动下运行。
(1)行情数据
行情数据是从交易所获取的即时分笔交易信息[28]。
在期货市场上,行情数据以分笔交易信息数据 Tick 为单位下传,是若干秒一
次的行情采集期间累计的成交量和最后的成交价,可能是几笔成交的集合。期货
交易市场是 500 毫秒推送一次分笔交易信息 Tick。 Tick 数据实时地按时间顺序
推送给到接收端。Tick 是行情的最细单位,是交易时间的最小颗粒。对于高频交
易来说,在交易中追踪超短线行情的细微变化需要靠 Tick 级别的价格信号;对
于回测来说,Tick 级别的数据能以最高精确度重现策略的绩效。因此对于程序化
交易而言,实盘和回测中的 Tick 数据都是必不可少的。这一点在期货投机策略
中显得尤为重要。大部分期货策略都是基于 Tick 运算执行的。
另外,在一定时间段内的 Tick 序列就构成了一根蜡烛图,被称为 Bar。 Bar
既包含了时间长度上的信息,例如起始时间,截止时间,也包括了空间上的信息,
例如起始交易价格,收尾交易价格,期间最高成交价格和期间最低成交价格,还
包含了这个时间段里成交量的信息。
(2)品种
策略的运行需要选择一个或多个交易品种作为交易对象。常见的期货品种有
股指期货、黄金期货、铜期货等[14]。品种交易方式定义在合约里,规定了交割方
式,时间,和保证金等制度[25]。
策略在选择多个交易品种的时候要选择其中一个作为驱动策略运行的品种。
(3)策略参数
参数是策略在运行前可以不用修改代码来配置的变量,通常为基本变量类
型:字符串、整型、浮点型和布尔型。参数的变量名是研究人员在代码中用来引
用参数值的,在同一个策略中,研究人员可以配置不同的参数来运行同一个逻辑
13
万方数据
金融量化策略开发平台设计与实现
以验证最有效的参数组合。
3.1.4 资金账户信息
资金账户信息是策略考量的一个重要指标,也是策略开发者应该考虑的重要
信息。账户信息包括:账号,可用金额、头寸、总资产等。这些信息提供给策略,
策略需要根据当前账户的状态来判断投资方法和交易行为。如果对余额和持仓量
把握不准,即使投资机遇捕获的准也会有爆仓和隔夜仓等风险。账户信息中投资
者的 ID,户头余额、总持仓量等,对投资策略有重大的影响。
在实盘交易中需要登录到证券公司或者证券交易所才能完成交易。在实盘交
易中,用户需要使用登陆账号登陆服务器,获取资金账户信息。实盘的账户信息
是保存在券商和期货经纪商的柜台系统服务器中,需要通过网络获取数据,查询
速度较慢。
在回测时,策略的运行需要虚拟的资金账户。回测的账户信息是一个虚拟账
户,资金账户信息由用户配置。
3.1.5 交易
交易指令是策略的输出,交易功能是核心执行组件,是策略算法计算推导得
出的最后产出。交易主要实现的功能就是下单和撤单。平台为策略开发提供两种
交易功能:
(1)实盘交易
实盘交易功能使策略连接到交易所交易系统,进行实际的投资行为。
在期货交易中最主要有 3 种交易操作:限价委托、自动开平限价委托和撤单。
这 3 种期货交易委托是其它复杂的交易方法的基础[20]。
限价委托是限定价格下单。 其它的期货委托方法都是由该方法衍生出来的。
限价委托指令成功后,会收到一个期货委托的挂单。
撤单是将未成交的期货委托撤掉。
(2)虚拟交易
回测是验证策略的重要方法。回测并不连接交易所服务,因此需要用到虚拟
的资金账号。在回测时平台为策略研究者提供虚拟的交易链接,并通过配置虚拟
账户信息来做回测验证。 虚拟交易应提供和实盘交易相同的交易操作,并模拟
14
万方数据
金融量化策略开发平台设计与实现
实盘交易的时延特征。
3.1.6 回测
回测是在历史数据中验证策略有效性的测试方法,也称作复盘。
在回测验证中,策略的运行分为行情驱动型和批量分析型。
(1) 行情驱动型回测
行情驱动式回测模拟行情数据下传,以固定的时间频率驱动策略的运行。驱
动式回测要做到尽可能精确的模拟实盘交易,才能在实盘交易中得到相同的赢利
几率。基于大规模的历史 Tick 和 K 线数据数据,可以进行 Tick 驱动的策略回测。
策略一次性处理行情数据粒度小。其优势是模拟真实行情和交易场景,可以
在回测中发现并减少策略研究者在交易操作上的风险。缺点是运行周期长。
(2) 批量分析型回测
批量分析式是一次性读入历史行情数据做批量分析,处理行情数据粒度大,
吞吐量大。其优势是速度快,资源消耗少,是策略研究者在研发策略初级阶段快
速验证计量模型和算法的有效方法。
策略在回测时,将处理和分析大量历史数据,通常策略研究者在回测时将配
置赋予策略不同的参数来寻求最佳的参数组合,每个参数组合都会在历史数据中
验证一次,达到对比和选优的效果。
GPU 应用在批量分析式回测过程中可以大幅提高大数据量、多参数组合的运
算效率,有效节省策略研发和计量模型验证的时间。
3.1.7 日志监控
策略执行中需要通过日志帮助监控策略的运行状态,排查策略的问题并进一
步优化。
日志就是将策略运行中的信息输出到系统日志或者监控界面中,当系统出现
错误时通过对日志的检查找出策略的问题。同时对于策略发生交易动作时,也可
以通过日志记录当时的信息。策略开发时,在一些容易出错的环节和重要的交易
环节记录日志是一个良好的策略开发习惯。
研究人员根据调试日志和结果来分析策略的盈利能力和执行效率,并进一步
细化分析优化思路[17]。在调优之后需要再次回测和模拟交易来验证。
15
万方数据
金融量化策略开发平台设计与实现
3.1.8 CUDA
CUDA 能为用户提供高性能并行运行,因此被利用在批量数据分析上。CUDA
编程中主机和设备各自都维护着自己独立的程序和存储器空间。因此,开发一个
使用 CUDA 的策略需要开发主机端程序和设备端程序。
平台提供 CUDA 的 C#访问接口供策略研究者对批量数据的处理,以提高对
数据的处理能力。平台为策略开发者提供主机端调用 CUDA 的方法:
(1) 设备启动和初始化:启动设备,生成上下文实例并初始化上下文实例。
(2) 异构数据传输:生成设备端变量实例,在主机端分配数据空间,初始
化,并传输到设备端。
(3) 设备端程序导入:将编译后的设备端程序导入到 GPU。
(4) 设备端程序运行:运行导入后的程序。
(5) 结果数据导出:从设备端读出运行结果数据。
(6) 清理资源:释放设备端资源和主机端对象空间。
3.2 行情和交易链接
行情数据根据获取的来源和使用方法分为:
(1)实盘行情:行情数据是从交易所获取的即时分笔交易信息,行情数据
作为外部事件进入系统,并驱动策略运行;
(2)虚拟行情:行情数据是从历史数据中获得,模拟实时交易所下传方式,
每 500ms 下传一次分笔行情数据。
(3)历史数据:行情数据是从历史数据中获得,批量提供给策略,在策略
运行时提供历史数据作为分析的基础。
交易链接根据交易方法分为:
(1)实盘交易:真实的和交易所进行交易,策略响应真实的交易状态信息;
(2)虚拟交易:模拟交易行为,提供虚拟的交易结果给策略。
16
万方数据
金融量化策略开发平台设计与实现
3.2.1 实盘链接
平台提供实盘行情数据下传和实盘交易功能。我国期货交易接口采用综合交
易平台接口[21]。综合交易平台(Comprehensive Transaction Platform,简称 CTP),
是期货交易所专门为期货投资者开发的一套期货经纪业务管理系统[22]。
客户端应用程序
CTP API
CTP SERVER
FTD 协 议
图 3-3 期货交易数据协议
Fig.3-3 The Protocol of Future Connection
通过 CTP 的客户端接口,投资者可以与 CTP 服务器之间的数据传输。投资
者可以使用的 CTP 标准客户端以及个性化交易工具。通过 API,客户端可以发
出或撤销普通单、条件单、查询委托或交易状态、查询账户实时信息和交易头寸。
CTP 客户端和 CTP 服务器之间使用的通讯协议是 FTD 期货交易数据协议,
它基于 TCP 协议[23]。期货交易数据协议如图 3-3 所示。
在 FTD 协议中,通讯模式包括以下三种模式:
(1)对话模式:客户端给 CTP 发送请求,CTP 将会相应返回结果。
(2)私有模式:CTP 把特定的私人信息发送给对应的客户端,包括持仓信
息和交易确认信息等。
(3)广播模式:CTP 将把公告等信息发送给所有的注册用户。客户端可以
同时使用三种通讯模式。
在对话模式中,传输的是对话数据流和查询数据流。对话和查询数据流是双
向数据流,客户端发出请求,CTP 服务器返回结果。CTP 服务器并不保存对话
和查询数据流。当故障发生时,比如连接中断后又重新连接,对话和查询数据流
将回复原值,之间传输的数据将丢失。
在私人通讯模式中,传输的是私人数据流。私人数据流是单向数据流,CTP
服务器就是利用它来把相应的私人信息发给提出申请的客户端。私人信息包括,
17
万方数据
金融量化策略开发平台设计与实现
风险提示、指令状态、指令确认、交易确认等。私人数据流是可靠的。当客户端
和 CTP 服务器失去连接后,在同一交易日的任何时间,客户端都可重新连上 CTP
服务器,获取一系列指定的私人信息而不用担心这些数据会丢失。
在广播通讯模式中,传输的是公共数据流。和私人数据流一样,它是单向数
据流,而且可靠。区别在于,广播通讯数据会发送到所有连接的客户端上。它的
主要用途就是发布公共合约的状态信息或重要的公共信息。
CTP 客户端进程需要多个线程,一是应用程序线程,另一种是交易 API 工作
线程。如果客户端想要接收行情数据,那么也需要行情 API 工作线程。API 工作
线程连接了客户端和 CTP 服务器。
交易 API 和行情 API 是安全线程,客户端的应用程序可以同时使用两种或多
种的工作线程,而无须担心线程冲突。客户单的应用程序要能尽快的处理服务器
反馈信息,这样才能避免未处理的回调信息堵塞工作线程。要避免通讯堵塞,客
户端的应用程序需要使用缓冲层来储存从 CTP 接收的数据,缓冲层也可以用来
保护客户端自有数据,以便使之与 CTP API 的数据区分开。
CTP 交互操作包括:
(1) 登陆:建立客户端和交易所服务器的连接,并登陆用户。
(2) 行情数据获取:建立连接后,客户端注册所关注的期货品种。CTP 服
务器开始反馈行情信息。客户端可以退订已关注的某个期货品种,之后 CTP 服
务器不再下传该品种行情数据。
(3) 交易:交易操作下单、撤单请求。交易操作下达后,CTP 根据交易状
态的变化下传给客户端交易状态信息。
(4) 登出:客户端应用程序发送登出请求。之后 CTP 服务器通知客户端是
否运行成功。当连接终止或中断时,CTP API 会使用登陆地址列表上的一个前端
地址,自动重新连接 CTP 服务器。
(5) 信息查询
信息查询是客户端主动请求相关信息,包括如下内容:
下单信息查询:客户端应用程序 CTP 服务器发送订单查询请求。CTP 服务
器利馈客户端应用程序订单的请求。
交易信息查询:客户端应用程序向 CTP 服务器发送交易查询请求。CTP 服
务器反馈客户端应用程序交易查询的请求。
18
万方数据
金融量化策略开发平台设计与实现
交割信息查询:客户端应用程序向 CTP 服务器发送,结算信息查询请求。
CTP 服务器反馈客户端应用程序结算信息查询的请求。
交割确认信息查询:客户端应用程序向 CTP 服务器发送,结算信息确认查询
请求。CTP 服务器反馈客户端应用程序结算信息确认的请求。
最大持仓信息查询:客户端应用程序向 CTP 服务器发送查询最大持仓量的请
求。CTP 服务器反馈客户端应用程序最大持仓信息的请求。
投资者信息查询:客户端应用程序向 CTP 服务器发送,投资者查询请求。
CTP 服务器反馈客户端应用程序投资者查询的请求。
资金账户查询:客户端应用程序向 CTP 服务器发送交易资金账户查询请求。
CTP 服务器反馈客户端资金账户。
头寸信息查询:客户端应用程序向 CTP 服务器发送投资者头寸查询请求。
CTP 服务器反馈客户端应用程序投资者头寸查询的请求。
头寸明细信息查询:客户端应用程序向 CTP 服务器发送,投资者头寸详细查
询请求。CTP 服务器反馈客户端应用程序投资者头寸详细查询的请求。
综合头寸信息查询:客户端向 CTP 服务器发送投资者综合头寸详细查询信
息。CTP 服务器投资者综合头寸详细查询。
合约信息查询:客户端应用程序向 CTP 服务器发送合约查询请求。CTP 服
务器反馈客户端应用程序合约查询的请求。
交易所信息查询:客户端应用程序向 CTP 服务器发送交易所查询请求。CTP
服务器反馈客户端应用程序交易所查询请求。
行情数据查询:客户端应用程序向 CTP 服务器发送市场行情查询请求。CTP
服务器反馈客户端应用程序市场行情查询的请求。
密码修改:客户端修改登陆密码,CTP 服务器通知客户端是否运行成功。
心跳:客户端收听 CTP 服务器心跳,表示与服务器长时间连接的接口是否
可用。
3.2.2 虚拟链接
在回测时策略研究者使用虚拟行情链接和虚拟交易链接来做回测验证。虚拟
行情链接所需要的历史行情数据在本地数据库中保存。
在回测时,策略由历史数据驱动。历史数据和实盘数据驱动的方式保持一致,
19
万方数据
金融量化策略开发平台设计与实现
驱动策略的方式对策略本身是透明的。数据的保存和访问形式对研究者来说是透
明的。
平台提供一个虚拟的仿真行情数据链接。回测时需要的虚拟接口包括:
虚拟资金账户:为策略的运行提供虚拟资金账户信息;
虚拟行情接口:为驱动策略的运行提供模拟的行情数据;
虚拟交易接口:为策略的运行提供虚拟的交易接口。
3.2.3 历史数据获取
好的历史数据能更好的分析和验证策略[24]。回测时使用的虚拟行情数据和实
盘运行时都需要访问历史数据。历史数据包括分笔行情数据和分时行情。历史数
据保存在本地或者局域网内以提高数据获取的速度。平台为策略提供读取历史数
据的服务。
每天都不断有新的行情数据生成,平台通过 Oracle 的 Sqlldr 工具将历史数据
文件导入数据库。
3.3 系统功能需求
3.3.1 策略管理
研究者开发策略需要根据本系统的接口编程,系统提供如下功能:
(1)策略的新建:提供策略模板,为用户提供基于策略模板的 Visual Studio
工程。
(2)策略的导入:策略的运行需要将开发完之后的策略程序导入到系统中
来。
(3)策略的运行:提供操作策略运行的功能。启动、暂停、恢复和退出策
略的运行。
3.3.2 交易账户管理
策略的运行需要和交易系统建立连接,建立连接必须要有交易所或者证券公
司的账户认证。系统对用户的账户进行管理:
20
万方数据
金融量化策略开发平台设计与实现
(1)期货登陆账户配置:提供期货账户、密码、连接信息等信息的配置功
能。
(2)虚拟资金账户配置:提供回测时配置资金账户信息的功能。
(3)虚拟行情配置:提供回测时连接历史数据数据库所需信息、密码、数
据库连接信息的配置功能。
3.3 本章小结
本章分析了金融量化策略开发平台的功能性需求和非功能性需求。首先分析
了策略的基本概念,阐述了策略开发的一般流程和主要内容,确定了金融量化策
略开发平台的主要功能:策略开发、策略回测、实盘行情数据获取和实盘交易功
能。然后,本文针对了金融量化策略开发平台的功能性需求进行用例分析和领域
建模,确定了金融量化策略开发平台的功能范围。
21
万方数据
金融量化策略开发平台设计与实现
4 金融量化策略开发平台设计
本章对金融量化策略开发平台的系统架构设计和应用结构设计出发,使用软
件工程方法对金融量化策略开发平台的核心层、应用层和数据链路层进行设计,
详细描述了三层设计的分工和功能。
4.1 系统架构设计
系统的架构如图 4-1 所示,从左至友分别是系统用户,金融量化策略开发平
台和外部系统。系统用户通常是量化模型研究者、策略开发者,通过平台界面访
问平台。金融量化策略开发平台是一款由 C#实现的 Windows 应用程序,其功能
主要有实现交易账户管理,包括期货实盘账户和虚拟账户配置;策略管理,包括
策略模板生成、策略运行等;工程运行,包括工程是策略的一个运行实例,包括
启动、暂停、恢复和退出等操作;监控功能,包括策略运行的监控、日志等;系
统管理,包括行情链接管理、交易链接管理、账户管理、历史数据管理等。最右
侧的外围系统指远端的期货交易服务器,使用期货交易所提供的接口通过互联网
访问期货交易系统。 期货货交易系统为客户端提供实盘行情信息和交易接口。
期 货
交 易
接 口
策略管理
期货交易系统
监 控
工
程
管
理
交
易
账
户
管
理
股 票
交 易
接 口
股票交易系统
系统用户
系统管理
虚 拟
交 易
接 口
历史数据
图
4-1 系统架构
Fig.4-1 The Architecture of System
22
万方数据
金融量化策略开发平台设计与实现
4.2 应用结构设计
应用结构设计包括应用层、核心层和数据链路层。应用结构设计如图 4-2 所
示:
应用结构设计
策略开发
策略回测
运行监控
策略运行
工 程
行情数据接口
虚拟行情链路
交易接口
实盘行情链路
虚拟交易链路
实盘行情链路
图 4-2 应用架构图
Fig.4-2 The Architecture of Application
从系统架构及数据处理上分析,可以描述为以下三个层次:应用层、核心层
和数据链路层。
应用层是客户通过界面访问系统的主要功能,主要包括策略的生成、导入、
配置、运行和监控等。应用层实现了虚拟账户的可视化配置、虚拟行情链接的实
现和可视化配置、虚拟交易链接的实现和可视化配置、历史数据链接的实现和可
视化配置等功能。
核心层是平台的核心组件,定义了金融量化策略开发平台中主要的概念:工
程、策略、分笔数据、分时数据、品种、账户、行情链接类、交易链接类,CUDA
接口、日志接口等。
工程是一个策略的实例,核心层通过工程整合不同数据接口和模块来运行策
略,完成所有策略请求的功能操作,并通过接口实现功能的可扩展性。
策略中响应行情数据和交易反馈信息的函数是抽象方法,策略开发者在策略
的子类里实现。
行情链接接口和交易链接是两个抽象类,主要是指系统与数据链路、交易链
23
万方数据
金融量化策略开发平台设计与实现
路的接口,包括连接、登陆、交易、信息查询等接口。在应用层的子类里实现
实盘行情链接、虚拟行情链接、实盘交易链接和虚拟行情链接。因此核心层具
有良好的可扩展性。
CUDA 接口为策略提供访问 CUDA 的功能。在应用层实现该接口访问 CUDA 的
类。因此核心层具有良好的可扩展性。
数据链路层实现策略与实盘行情服务器和实盘交互实现。连接外部系统或者
数据库来实现数据流入和交易的功能。
4.2.1 平台运行环境和开发技术
(1)操作系统:采用成熟稳定的 Windows 7 及以上作为操作系统;为客户
提供便捷的 Windows 风格界面。
(2)CUDA:CUDA 是英伟达公司于发布的一种使用类 C 语言在 GPU 上进行通
用计算的开发环境和软件体系。平台采用 CUDA 工具集作为调用 GPU 计算模块的
中间件。
(3)数据库管理系统:采用 Oracle 数据库存储历史数据,Sqlldr 作为
Oracle 数据文件导入工具。使用 Oracle 11g 及以上作为数据库管理系统。
(4)开发框架:系统采用.NET 应用框架, 使得开发效率大大提高。界面采
用 WPF 框架,WPF 具有良好的开发易用性,提高了平台开发的效率[27]。平台程序
开发语言和策略的开发语言为 C#。C#作为高级语言拥有良好的易用性和基础服
务支持,因此策略开发采用 C#更利于策略开发人员将精力放在模型思考上。
4.2.2 核心层设计
核心层定义了平台核心概念,包括工程、策略、行情接口、交易接口、行情
数据、交易数据、日志接口、监控接口等。
核心层中,工程是一个策略的运行实例,基于一个策略可以构造多个工程,
如果需要在多个品种上运行同一个策略,就可以创建多个工程,每个工程配置一
个不同的驱动品种即可。在导入一个策略的时候一个工程就已经创建。为本次运
行策略,工程需要配置:配置需要关注的行情;配置关注的品种;配置驱动策略
的主品种;配置驱动的周期;配置策略参数;配置行情链接参数;配置交易账户;
策略参数;配置历史数据链接信息等。配置后开始运行工程。工程运行流程图如
图 4-3 所示。
24
万方数据
金融量化策略开发平台设计与实现
工程流程图
行情交易接口
工 程
策 略
开 始
初始化配置
请求连接
初 始 化
用户登录
注册行情数据
启动运行
是否结束
推送下单数据
否
是
响应行情数据
下 单
结 束
图 4-3 工程运行流程图
Fig.4-3 The Flow Chart Of Project
用户操作工程界面开始运行工程。实现工程开始初始化,接下来建立行情数
据链接和交易链接。用户可以选择虚拟的行情数据链接和交易链接,也可以选择
实盘的行情数据链接和交易链接,对此核心层并不知道运行的环境是虚拟还是实
盘。然后根据用户配置的参数实例化策略类,并初始化。在初始化时,工程请求
品种的行情数据,并等待行情数据下传。工程接收到主品种的行情数据后,开启
单独的线程运行策略的响应函数。策略就这样被驱动后运行起来。
用户可以操作工程的运行状态,首先创建导入一个策略,在后台一个工程就
被创建了,并装载了导入的策略。配置了连接信息和策略参数后,用户点击运行
工程,工程开始初始化,连接服务器,注册行情,收到行情并驱动策略。
用户可以暂停工程的运行。用户点击暂停,停止交易并停止行情数据对策略
25
万方数据
金融量化策略开发平台设计与实现
的驱动。
用户可以恢复被暂停的工程。点击恢复,重新打开行情数据对策略的驱动并
允许交易。
当用户想终止本次运行,可以点击退出,停止交易并停止行情数据对策略的
驱动,断开连接并结束本次运行,并释放相关资源。
策略运行流程首先初始化策略程序,工程在初始化时实例化策略,并初始化
策略的变量。策略初始化后开始等待行情数据并在响应后执行策略主程序。策略
运行的线程和工程运行的线程是独立开来的,避免策略的运行影响用户对工程运
行状态的操作。策略运行中产生交易订单。交易订单被交易链路传送到交易服务
器上。交易服务器根据交易订单状态的变化下传交易状态。策略响应交易事件,
并更新交易状态。策略响应交易事件的线程也是单独的线程,避免对交易链路接
收数据的影响。策略在用户的操作下结束运行并退出。
核心层主要概念的类设计如图 4-4 所示。
<<接 口 >>
IStrategy
+O nTick ( )
+O nB ar( )
Strategy
+O nT ick( )
+O nBar( )
Project
FutureMarketConnection
-mainT hread
-FutureUser
+Start( )
+P a use ( )
+Resum e ( )
+S top ( )
-dr ive( )
+Connect ( )
+Subscribe ( )
+O nT ick( )
1
*
FutureAccount
F uture
-I D
-B rokerID
-CurrentMargin
-MarketDataBuffer
+O nT ick( )
T ic k
-InstrumentID
-P rice
-V olume
FutureTradeConnection
-FutureAccount
-O rders
+Connect ( )
+L ogin ( )
+O rder( )
+CancelOrder( )
B ar
-Start_T im e
-E n d _T im e
-H igh _P rice
-L o w _P rice
O rder
-InstrumentID
-InvestorID
-LimitPrice
-OpenOrClose
-V olume
图 4-4 核心层类图
Fig.4-4 The Class Diagram of Core
26
万方数据
金融量化策略开发平台设计与实现
(1)工程类
工程连接并调配所有核心层其他类。工程监听主品种,接收主品种的行情数
据,并使用独立的线程驱动策略。
工程的实现的功能包括:
环境初始化:生成行情数据链接实例,连接行情数据服务器,注册关注的品
种;生成历史数据链接实例,链接历史数据数据库,读取历史数据;生成交易数
据链接实例,资金账户登录,开启交易线程;初始化策略。
开始运行:设置工程状态为运行;启动主线程,即驱动策略线程;读取主驱
动品种的行情数据;驱动策略运行。
暂停:设置工程状态为暂停;使主线程挂起。
恢复:设置工程状态为运行;使主线程恢复运行。
退出:设置工程状态为停止;关闭主线程;关闭交易链路;关闭行情链路。
(2)策略类
策略类是一个抽象类,被提供给策略开发者,由开发者实现策略类。策略类
为策略的运行提供一系列的操作接口。策略研究者需要在策略中调用系统提供多
种请求系统资源和操作的接口。包括当前关注的品种,以及各个品种的行情数据,
短期缓存的历史数据;时间相关的信息、账户和头寸信息、下单和撤单操作、以
及日志和监控接口等。策略类内的属性和方法分为需开发者自己实现的方法和提
供给策略的服务。
其中策略类中供开发者使用的服务或者数据有:
品种:策略类提供用户所有注册的需要被关注的品种,包含该品种的信息、
行情信息、持仓信息等。品种是策略注册的行情数据和品种。品种中包括该品种
信息和行情数据缓存。策略可以在该属性中读取所有品种(包括主品种)的实时
行情的本地缓存数据。
历史数据品种:历史数据品种是从本地数据库读取的历史数据,为策略提供
数据支持。
资金账户:资金账户是保存在本地的资金账户实例,供用户观察当前资金状
况。在下单、撤单和成交等操作后资金账户会被更新。
交易链路:交易链路为私有属性,对其子类不开放。改对象在 protected 方法
Order 里使用,为用户提供。
27
万方数据
金融量化策略开发平台设计与实现
日志:提供日志对象 Logger,策略开发者可以使用该对象完成日志输出,包
括信息日志输出;警告日志输出;调试信息输出;错误信息输出。
下单:为策略开发者提供下单操作,通过交易链路的下单操作完成。
撤单:为策略开发者提供撤单操作,通过交易链路的撤单操作完成。
请求信息:为策略开发者提供请求账户、头寸等信息的操作。
策略类中需要策略研究者实现的方法有:
程序的初始化:开发接口中有初始化函数用来实现程序的初始化相关参数、
对象和定时等工作。
响应行情事件:对行情数据响应的 Tick 级别的函数;对行情数据响应的 Bar
级别的函数;在这里实现行情数据分析的功能。
响应交易事件:对下单响应的的函数;响应下单后服务器返回的反馈信息;
响应撤单后服务器返回的反馈信息;用来响应下单后服务器返回的拒绝信息;用
来响应撤单后服务器返回的拒绝信息;用来响应下单成交后服务器返回的成交信
息。
系统事件:对系统意外事件进行响应,比如运行异常。
退出:用户终止运行时,策略响应用户的退出事件。
(3)账户类
在策略里提供账户数据的缓存数据和同步账户数据的函数。在对行情进行实
时分析之后,用户可以使用账户类提供的交易函数完成下单、撤单等交易操作。
这些操作会对资金账户带来变化。
期货资金账户信息包含有经纪公司代码、投资者帐号、上次质押金额、上次
信用额度、上次存款额、上次结算准备金、上次占用的保证金、利息基数、利息
收入、入金金额、出金金额、冻结的保证金、冻结的资金、冻结的手续费、当前
保证金总额、资金差额、手续费、平仓盈亏、持仓盈亏、期货结算准备金、可用
资金、可取资金、基本准备金、交易日、结算编号、信用额度、质押金额、交易
所保证金、投资者交割保证金、交易所交割保证金。
(4)品种类
在建立行情连接后,研究者选定所要关注的品种已经驱动策略的主品种。驱
动策略的品种只能是一个。在建立行情连接时,工程会向服务器请求所要关注的
品种行情数据,称之为注册。在注册了相关品种后,服务器就会下发该品种的行
28
万方数据
金融量化策略开发平台设计与实现
情数据。
品种类记录该品种的基本信息,包括合约代码、交易所代码、合约名称、合
约在交易所的代码、产品代码、产品类型、交割年份、交割月、市价单最大下单
量、市价单最小下单量、限价单最大下单量、限价单最小下单量、合约数量乘数、
最小变动价位、创建日、上市日、到期日、开始交割日、结束交割日、持仓类型、
持仓日期类型、多头保证金率、空头保证金率。
策略研究者可能不止关心一个品种的期货,所以策略要记录所有被关注的品
种。在配置工程时,用户可以对被观测的品种进行配置。
每个品种的行情数据都在并发的从服务器下传到客户端。品种类中缓存着接
收期货接口发来的行情数据,并保存在类中的 Tick 集合里。用户可以根据策略
需要在品种类中读取缓存的行情数据。
(5)行情数据
行情数据包含了当前实时成交信息,包括品种信息,当前买价、当前卖价、
成交量、时间戳等信息。行情数据是策略研究者判断当前行情的重要信息。在
Tick 下传到策略中,在 OnTick 函数里研究者对 Tick 信息进行处理和分析。
Tick 数据包括有交易日、合约(品种)代码、交易所代码、合约在交易所的
代码、最新价、上次结算价、昨收盘价、今开盘价、昨持仓量、最高价、最低价、
数量、成交金额、持仓量、今收盘价、本次结算价、涨停板价、跌停板价、昨虚
实度、今虚实度、最后修改时间、最后修改毫秒、申买价一、申买量一、申卖价
一、申卖量一、申买价二、申买量二、申卖价二、申卖量二、申买价三、申买量
三、申卖价三、申卖量三、申买价四、申买量四、申卖价四、申卖量四、申买价
五、申买量五、申卖价五、申卖量五、当日均价。
行情数据不仅有 Tick 还有 Bar,在收到 Tick 后并不会马上丢弃 Tick,而是
放到缓冲区里并等待一段时间后,比如 5 分钟,将这个时间段的 Tick 加工为一
个 Bar 数据。策略研究者可以选择以 Bar 行情数据来驱动策略,在 OnBar 函数里
实现策略的分析。对于部分策略交易来说,Tick 数据太快而导致来不及进行分析
就要接收下一个 Tick,这种情况可以使用 Bar 来驱动策略。
Bar 数据既包含了起始时间,截止时间,起始交易价格,收尾交易价格,期
间最高成交价格和期间最低成交价格,成交量的息。
(6)行情链接类
行情链接从外部获取行情数据,并响应外部下传的行情事件。核心层实现了
29
万方数据
金融量化策略开发平台设计与实现
行情链接连接信息的初始化、异步接收行情数据逻辑,核心层不实现行情链接的
链接功能,由行情链接类的子类提供外部实现。子类需要实现的功能包括:连接
行情服务器;注册期货品种;断开连接。
实盘行情链接和虚拟行情链接继承行情链接类,并实现行情数据的获取。
(7)交易链接类
交易链接传输交易操作给交易服务器,并响应下传的交易事件。核心层实现
了交易链接连接信息的初始化、连接和交易逻辑,核心层不实现具体交易链接功
能,由交易链接的子类提供外部实现。子类需要实现的功能包括:连接交易系统;
发送策略下单;撤单;响应交易状态。
实盘交易链接和虚拟交易链接继承行情链接类,并实现交易信息的交互。
(8)批量数据运行接口
核心层为 CUDA 批量数据处理提供接口,但并不在核心层实现 CUDA 调用
功能。接口包括以下方法:
设备启动和初始化:启动设备,生成上下文实例并初始化上下文实例;
异构数据传输:生成设备端变量实例,在主机端分配数据空间,初始化,并
传输到设备端;
设备端程序导入:将编译后的设备端程序导入到 GPU;
设备端程序运行:运行导入后的程序;
结果数据导出:从设备端读出运行结果数据;
清理资源:释放设备端资源和主机端对象空间。
4.2.3 应用层设计
应用层包括策略的生成、导入、配置、运行和监控,实现了虚拟账户的可视
化配置、虚拟行情链接的实现和可视化配置、虚拟交易链接的实现和可视化配置、
历史数据链接的实现和可视化配置等功能。
(1)策略开发
新建策略:平台为策略研究者提供一个策略模板工程,研究者可以通过新建
策略打开生成策略的向导,在输入相关信心后平台将为用户提供一个标准接口的
策略工程。工程为一个 VS2010 的 C#开发工程。
30
万方数据
金融量化策略开发平台设计与实现
策略的开发:研究者拿到策略模板工程后,基于 VS2010 开发,编译,生成
一个策略的动态链接库。该动态链接库为策略的实体,将被导入到平台中,并被
工程整合,调用和运行。
策略的导入:用户通过策略导入将开发完成的动态链接库加载到平台中,由
平台生成一个对应的工程。
策略运行:对工程的数据接口、参数设置,品种选择、驱动行情数据设置等
配置结束后,策略可以就可以被调起运行。
(2)虚拟资金账户
应用层实现虚拟资金账户的配置界面。
(3)虚拟行情数据链接
虚拟行情数据实现行情数据连接接口,读取历史数据,并运行单独的线程定
时驱动行情的更新,模拟真实行情数据下传场景。核心层不实现虚拟行情数据。
由应用层实现。
虚拟行情接口连接本地数据库,读取历史行情数据,并模仿实盘行情数 据
500ms 间隔下传一次 Tick 数据。
(4)虚拟交易链接
虚拟交易实现交易连接接口,并运行单独的线程接收交易操作,模拟真实交
易反馈数据下传场景,实现下单、撤单、下单响应、撤单响应操作。并模仿实盘
下单、成交延迟现象。
(5)CUDA 调用
应用层通过 ManagedCUDA 实现调用 CUDA 的方法:实现异构数据传输;
设备端程序导入;设备端程序运行;结果数据导出;清理资源等功能。
(6)日志
应用层实现日志输出功能。根据接口,用户可以输出调试、运行、结果能信
息。日志分为四个等级记录用户的输入:信息、警告、调试信息、以及错误。在
策略运行过程中,平台将实时打印记录在输出窗口中,并记录在日志文件中。
4.2.4 实盘链路层设计
平台通过 CTP 接口连接期货交易市场服务器获取实时行情数据,并发送交易
信息。期货行情通讯如图 4-5 所示。
31
万方数据
金融量化策略开发平台设计与实现
客户端
C T P接 口
CTP服 务 器
请求连接
请求连接
连接信息状态
连接信息状态
注册品种行情
注册行情
品 种 1行 情 信 息
品 种 1行 情 信 息
品 种 2行 情 信 息
品 种 2行 情 信 息
图 4-5 期货行情通讯图
Fig.4-5 The Communication Chart of Future Market Data Query
期货行情通讯图描述:首先客户端调用 CTP API 向服务器请求连接。CTP 服务
器返回连接信息,通知客户端连接状态,并成功建立连接。客户端可以使用其
他 CTP API 来与 CTP 服务器进行通讯。之后客户端调用 CTP API 向服务器注册
品种信息,请求行情数据。CTP 服务器根据注册的品种定时向客户端反馈行情
数据。客户端响应服务器发来的行情数据,缓存并驱动策略。
交易委托也是一个异步的过程。期货交易通讯如图 4-6 所示。
32
万方数据
金融量化策略开发平台设计与实现
客户端
C T P接 口
CTP服 务 器
交易后台
请求连接
请求连接
连接信息状态
连接信息状态
下单信息
下单请求
下 单
下单状态
下单状态
下单状态
成交信息
成交信息
成交信息
图 4-6 期货交易通讯图
Fig.4-6 The Communication Chart of Future Trading
期货交易通讯图描述:首先客户端调用 CTP API 向服务器请求连接。CTP 服务
器返回连接信息,通知客户端连接状态,并成功建立连接。客户端可以使用其
他 CTP API 来与 CTP 服务器进行通讯。客户端调用 CTP API 向服务器发出交易
指令。CTP 服务器收到交易指令后和后台交易系统通讯,并产生一个交易信息。
交易系统反馈交易状态,在交易状态发生变化时推送交易状态变更信息给 CTP
服务器。CTP 服务器接收交易系统的推送信息,并发送给 CTP 客户端 API。CTP
API 进一步推送给客户端,客户端响应交易状态变更信息并让策略响应。
交易系统在成功交易订单后推送交易成功的信息,过程同 5-7 步。
CTP API 中几个主要数据结构:
资金账户信息:期货资金账户信息包含有经纪公司代码、投资者帐号、上次
质押金额、上次信用额度、上次存款额、上次结算准备金、上次占用的保证金、
33
万方数据
金融量化策略开发平台设计与实现
利息基数、利息收入、入金金额、出金金额、冻结的保证金、冻结的资金、冻
结的手续费、当前保证金总额、资金差额、手续费、平仓盈亏、持仓盈亏、期
货结算准备金、可用资金、可取资金、基本准备金、交易日、结算编号、信用
额度、质押金额、交易所保证金、投资者交割保证金、交易所交割保证金。
持仓信息:期货持仓信息包括有合约代码、经纪公司代码、投资者代码、持
仓多空方向、投机套保标志、持仓日期、上日持仓、今日持仓、多头冻结、空
头冻结、开仓冻结金额、开仓冻结金额、开仓量、平仓量、开仓金额、平仓金
额、持仓成本、上次占用的保证金、占用的保证金、冻结的保证金、冻结的资
金、冻结的手续费、资金差额、手续费、平仓盈亏、持仓盈亏、上次结算价、
本次结算价、交易日、结算编号、开仓成本、交易所保证金、组合成交形成的
持仓、组合多头冻结、组合空头冻结、逐日盯市平仓盈亏、逐笔对冲平仓盈亏、
今日持仓、保证金率。
行情数据:行情数据包括有交易日、合约(品种)代码、交易所代码、合约
在交易所的代码、最新价、上次结算价、昨收盘价、今开盘价、昨持仓量、最
高价、最低价、数量、成交金额、持仓量、今收盘价、本次结算价、涨停板价、
跌停板价、昨虚实度、今虚实度、最后修改时间、最后修改毫秒、申买价一、
申买量一、申卖价一、申卖量一、申买价二、申买量二、申卖价二、申卖量二、
申买价三、申买量三、申卖价三、申卖量三、申买价四、申买量四、申卖价四、
申卖量四、申买价五、申买量五、申卖价五、申卖量五、当日均价。
订单:订单类包含有经纪公司代码、交易所代码、对冲种类、下单时间、交
易品种代码、价格、开平仓标志、下单量、已交易数量、未交易数量。
4.2.5 历史数据设计
历史数据保存在本地或者局域网内的数据库服务器上。期货数据分为 Tick
数据、1 分钟 Bar 数据、5 分钟 Bar 数据等。
4.3 本章小结
本章首先根据用户需求,确定了金融量化策略开发平台的系统架构。在此基
础上确定了平台的应用架构设计方案,将平台分为三层进行了架构设计。核心
层首先分析了核心结构的组成,然后定义了平台的核心概念和运行流程,定义
了可扩展的接口。应用层首先将核心层需要扩展的接口分别进行了设计,然后
实现了人机交互方式。数据链路层首先分析了实盘链接 CTP API,设计了行情数
34
万方数据
金融量化策略开发平台设计与实现
据下传和实盘交易链路,并针对历史数据设计了虚拟行情接口和历史数据的数
据库设计。
35
万方数据
金融量化策略开发平台设计与实现
5 金融量化策略开发平台实现和验证
本章对金融量化策略开发平台的应用架构三层进行了实现,使用软件工程方法
对金融量化策略开发平台的核心层、应用层和数据链路层的各个模块实现进行了说
明,并进行案例验证。
5.1 关键功能实现
关键实现包括平台核心层、平台应用层和实盘接口层。关键功能主要包括策
略模板生成,核心层工程运行、策略驱动、CUDA 接口实现、应用层虚拟行情
数据实现、虚拟交易实现、实盘链路实现。
5.1.1 核心层实现
核心层工程运行驱动者所有模块的执行和协作,工程开始执行的序列图如图
5-1 所示。
工程启动运行序列图描述:
(1)工程启动,初始化时首存启动行情数据链接,注册关注品种。
(2)连接历史数据链接。
(3)开启交易链接,链接交易服务器,登陆资金账户。
(4)读取资金账户信息。
(5)开启下单线程。
(6)初始化策略。
(7)启动驱动线程,让行情数据传入策略。
核心层中定了平台中主要的类定义。
36
万方数据
金融量化策略开发平台设计与实现
图 5-1 工程启动序列图
Fig.5-1 The Sequence Diagram of Project Initialization
(1)工程类
工程类含有行情数据连接、历史数据读取接口、策略、交易接口、日志接口、
图形输出接口等。在工程内启动一个独立线程用来驱动策略。工程类如图 5-1 所
示。工程类描述:
Init 函数负责初始化配置、连接行情数据、历史数据接口、初始化策略等。
37
万方数据
金融量化策略开发平台设计与实现
Start 函数启动策略响应行情数据的线程。
Pause 函数暂停策略的运行。
Resume 函数回复策略对行情数据的响应。
Stop 函数停止本次运行,关闭连接,回收资源。
drive 函数是私有函数,是驱动策略线程的函数。
strategy 成员为工程负责运行的策略。
driveFuture 成员为驱动策略运行的主品种。
图 5-2 工程类图
Fig.5-2 The Class Diagram of Project
mainThread 成员为响应行情的主线程。
isAlive 成员为工程状态位。
38
万方数据
金融量化策略开发平台设计与实现
BatchHandler 成员为批量数据分析接口。
Logger 为外部日志记录的接口,策略通过这个接口向外部输出日志。
Futures 为一个期货品种的集合,包含所有策略关注的行情数据。
FutureMarketConnection 为期货行情接口,负责行情数据的接收。接收的行
情信息写入到 Futures 里。
FutureHistoryDataConnection 为历史期货行情接口,负责行情数据的读取。
接收的行情信息写入到其成员 Futures 里。
FutureTradeConnection 为期货交易接口,负责交易和接收交易信息。
(2)策略接口
策略的接口抽象了策略需要研究者自行实现的方法。包括策略程序的初始
化、响应行情事件、响应交易事件、退出等。策略接口图如图 5-3 所示。
图 5-3 策略接口
Fig.5-3 The Strategy Interface
接口描述:
Init 函数用来实现程序的初始化相关工作。
OnTick 函数用来响应 Tick 级别的行情。
39
万方数据
金融量化策略开发平台设计与实现
OnBar 函数用来响应 Bar 级别的行情。
OnOrder 函数用来响应下单后服务器返回的反馈信息。
OnOrderCanceled 函数用来响应撤单后服务器返回的反馈信息。
OnOrderRejected 函数用来响应下单后服务器返回的拒绝信息。
OnCanceledOrderFailed 函数用来响应撤单后服务器返回的拒绝信息。
OnTrade 函数用来响应下单成交后服务器返回的成交信息。
Name 属性表示自定义的策略名。
(3)策略类
策略类实现了策略接口,并为策略开发者提供多种请求系统资源和操作的接
口。包括当前关注的期货品种,以及各个品种的行情数据,短期缓存的行情数
据,历史行情数据,时间信息、账户和头寸信息、下单和撤单操作、以及日志
和监控接口等。策略类图如图 5-4 所示。
策略类是一个虚类,其中策略接口并没有被实现,而是留给策略开发者根据
计量模型实现。
策略类描述如下:
FutureAccount 为策略所使用的资金期货账户。
Futures 为策略注册的所有需要关注的期货品种,每个 Future 对象里包含该
品种的信息、行情信息、持仓信息等。
StockAccount 为策略所使用的股票账户,StockAccount 可以得到账户的资金
信息并可以下单。
Stocks 为策略注册的所有需要关注的股票品种,每个 Stocks 对象里包含该品
种的信息、行情信息、持仓信息等。
Name 属性表示自定义的策略名。
方法为策略接口中未实现的虚函数:
Init 函数用来实现程序的初始化相关工作。
OnTick 函数用来响应 Tick 级别的行情。
OnBar 函数用来响应 Bar 级别的行情。
OnOrder 函数用来响应下单后服务器返回的反馈信息。
40
万方数据
金融量化策略开发平台设计与实现
OnOrderCanceled 函数用来响应撤单后服务器返回的反馈信息。
OnOrderRejected 函数用来响应下单后服务器返回的拒绝信息。
OnCanceledOrderFailed 函数用来响应撤单后服务器返回的拒绝信息。
OnTrade 函数用来响应下单成交后服务器返回的成交信息。
图 5-4 策略类图
Fig.5-4 The Strategy Class Diagram
(4)资金账户类
期货资金账户信息包含有经纪公司代码、投资者帐号、上次质押金额、上次
信用额度、上次存款额、上次结算准备金、上次占用的保证金、利息基数、利
息收入、入金金额、出金金额、冻结的保证金、冻结的资金、冻结的手续费、
当前保证金总额、资金差额、手续费、平仓盈亏、持仓盈亏、期货结算准备金、
可用资金、可取资金、基本准备金、交易日、结算编号、信用额度、质押金额、
交易所保证金、投资者交割保证金、交易所交割保证金。资金账户类如图 5-5 所
示。
41
万方数据
金融量化策略开发平台设计与实现
交易方面保存了历史下单信息,交易信息等。用户可以调用该对象的下单、
撤单等操作进行交易。
图 5-5 账户类图
Fig.5-5 The Account Class Diagram
(5)交易链接类
交易链接接收策略发来的下单、撤单等操作并缓存在本地,开启独立的线程
通过异步方式发送至交易服务器,并响应服务器反馈的交易状态信息。交易链
接类如图 5-6 所示。
交易链接类和交易服务器的交互不在核心层实现,而是在其子类中实现下
单、撤单、账户查询等操作。
42
万方数据
金融量化策略开发平台设计与实现
图 5-6 交易链接类图
Fig.5-6 The Trade Connection Class Diagram
(6)期货行情链接类
行情链接类如图 5-7 所示。行情链接类连接行情数据服务器,接收行情信息
并缓存在本地的 Futures 里。所有的行情数据获取在此类中获得。在核心层不实
现行情链接类和行情数据服务器的交互,由其子类具体实现交互。
43
万方数据
金融量化策略开发平台设计与实现
图 5-7 行情链接类图
Fig.5-7 The Market Data Connection Class Diagram
(7)品种类
在建立行情连接后,研究者选定所要关注的品种以及驱动策略的主品种。驱
动策略的品种只能是一个。策略研究者可能不止关心一个品种的期货,所以在
策略类里有 FutureSeries 来记录所有被关注的品种。
图 5-8 期货品种集合类图
Fig.5-8 The Future Series Class Diagram
44
万方数据
金融量化策略开发平台设计与实现
FutureSeries 记录多个 Future 对象,每个 Future 是一个被关注的期货品种。
在配置工程时,用户可以对被观测的品种进行配置。期货品种集合类如图 5-8 所
示。
每个品种的行情数据都在并发的从服务器下传到客户端。
图 5-9 期货品种类图
Fig.5-9 The Future Instrument Class Diagram
45
万方数据
金融量化策略开发平台设计与实现
期货品种类图如图 5-9 所示,包含数据信息包括合约代码、交易所代码、合
约名称、合约在交易所的代码、产品代码、产品类型、交割年份、交割月、市
价单最大下单量、市价单最小下单量、限价单最大下单量、限价单最小下单量、
合约数量乘数、最小变动价位、创建日、上市日、到期日、开始交割日、结束
交割日、持仓类型、持仓日期类型、多头保证金率、空头保证金率。
Future 类同时接收期货接口发来的行情数据,并保存在 Tick 集合里。策略中
Future 集合,通过访问用户可以根据策略需要读取主驱动行情历史数据,也可以
读取其他非主驱动的历史行情和最新的行情数据。
(8)行情数据类
行情数据以 Tick 形式下传。包含了当前实时成交信息,包括品种信息,当
前买价、当前卖价、成交量、时间戳等信息。行情数据是策略研究者判断当前
行情的重要信息。
在 Tick 下传到策略中,在 OnTick 函数里研究者对 Tick 信息进行处理和分析。
Tick 数据包括有交易日、合约(品种)代码、交易所代码、合约在交易所的
代码、最新价、上次结算价、昨收盘价、今开盘价、昨持仓量、最高价、最低
价、数量、成交金额、持仓量、今收盘价、本次结算价、涨停板价、跌停板价、
昨虚实度、今虚实度、最后修改时间、最后修改毫秒、申买价一、申买量一、
申卖价一、申卖量一、申买价二、申买量二、申卖价二、申卖量二、申买价三、
申买量三、申卖价三、申卖量三、申买价四、申买量四、申卖价四、申卖量四、
申买价五、申买量五、申卖价五、申卖量五、当日均价。Tick 类图如图 5-10 所
示。
行情数据不仅有 Tick 还有 Bar,工程在收到 Tick 后并不会马上丢弃 Tick,
而是放到缓冲区里并等待一段时间后,比如 5 分钟,将这个时间段的 Tick 加工
为一个 Bar 数据。
策略研究者可以选择以 Bar 行情数据来驱动策略,在 OnBar 函数里实现策略
的分析。对于部分策略交易来说,Tick 数据太快而导致来不及进行分析就要接
收下一个 Tick,这种情况可以使用 Bar 来驱动策略。
46
万方数据
金融量化策略开发平台设计与实现
图 5-10 分时行情数据类图
Fig.5-10 The Tick Class Diagram
(9)交易信息类
交易信息类用于策略判断当前的持仓和交易状态。交易信息类如图 5-11 所
示。
47
万方数据
金融量化策略开发平台设计与实现
成交信息包括经纪公司代码、投资者代码、合约代码、报单引用、用户代码、
交易所代码、成交编号、买卖方向、报单编号、会员代码、客户代码、交易角
色、合约在交易所的代码、开平标志、投机套保标志、价格、数量、成交时期、
成交时间、成交类型、成交价来源、交易所交易员代码、本地报单编号、结算
会员编号、业务单元、序号、交易日、结算编号、经纪公司报单编号、成交来
源。
图 5-11 交易信息类图
Fig.5-11 The Trade Class Diagram
(10)日志接口
日志接口 ILogger 是提供给策略的接口,策略开发者可以通过写日志的接口
将信息、警告、调试信息、错误信息输出。日志接口如图 5-12 所示。
48
万方数据
金融量化策略开发平台设计与实现
图 5-12 日志接口图
Fig.5-12 The Log Interface Diagram
核心层并不实现日志接口,而是提供给应用展现层实现,已提高可扩展性。
根据应用层对日志接口的实现不同,日志信息可以展现在界面的滚动屏,同时
记录在日志文件里。
(11)批量数据处理接口
批量数据处理接口如图 5-13 所示。
图 5-13 CUDA 批量数据接口图
Fig.5-13 The CUDA Batch Data Interface Diagram
CUDA 接口描述:
Init 启动设备,生成上下文实例并初始化上下文实例。
Transfer 生成设备端变量实例,在主机端分配数据空间,初始化,并传输到
设备端。
LoadKernel 将编译后的设备端程序导入到 GPU。
Run 运行导入后的程序。
49
万方数据
金融量化策略开发平台设计与实现
Read 结果数据导出:从设备端读出运行结果数据。
Close 清理资源,释放设备端资源和主机端对象空间。
5.1.2 应用层实现
(1)用户接口实现
新建策略:平台为策略研究者提供一个策略模板工程,研究者可以通过新建
策略打开生成策略的向导,在输入相关信心后平台将为用户提供一个标准接口的
策略工程。工程为一个 VS2010 的 C#开发工程。策略的创建向导如图 5-14 所示。
图 5-14 策略创建向导
Fig.5-14 Strategy Creating Wizard
策略的开发:研究者拿到策略模板工程后,基于 VS2010 开发,编译,生成
一个策略的动态链接库。该动态链接库为策略的实体,将被导入到平台中,被工
程实例化并运行。策略模板工程如图 5-15 所示。
50
万方数据
金融量化策略开发平台设计与实现
图 5-15 策略模板
Fig.5-15 Strategy Template
策略的导入:用户通过策略导入将开发完成的动态链接库加载到平台中,由
平台生成一个对应的工程。策略导入向导界面如图 5-16 所示。
策略运行:对工程的数据接口、参数设置,品种选择、驱动行情数据设置等
配置结束后,策略可以就可以被调起运行。
图 5-16 策略导入向导
Fig.5-16 Strategy Import Wizard
(2)虚拟资金账户
回测需要使用虚拟账户、虚拟行情数据、虚拟交易接口。虚拟接口在应用层
实现。虚拟资金账户和标准资金账户保持一致,由用户配置生成。
51
万方数据
金融量化策略开发平台设计与实现
(3)虚拟行情数据实现
虚拟行情数据实现行情数据连接接口,读取历史数据,并运行单独的线程定
时驱动行情的更新,模拟真实行情数据下传场景。核心层不实现虚拟行情数据。
由应用层实现。虚拟行情数据链接类如图 5-17 所示。
图 5-17 虚拟行情数据类图
Fig.5-17 The Virtual Market Data Connection Class Diagram
虚拟行情数据类实现行情数据类的连接、注册和关闭连接的方法:
Connect 函数实现连接数据库。
Subscribe 函数实现历史数据的读取,并开启单独的线程定时更新行情数据。
Close 函数实现资源回收、关闭数据库连接。
(4)虚拟交易链接类
虚拟交易链接类实现仿真交易功能。虚拟交易链接类类图如图 5-18 所示。
图 5-18 虚拟交易链接类图
Fig.5-18 The Virtual Trade Connection Class Diagram
52
万方数据
金融量化策略开发平台设计与实现
虚拟交易链接类描述:
Connect 函数实现初始化。
Login 实现账户虚拟登陆。
order 实现虚拟的下单。
cancelOrder 实现虚拟的撤单。
Query 实现信息查询。
Close 实现资源回收、关闭数据库连接。
(5)CUDA 批量数据处理类
CUDA 批量类类图如图 5-19 所示。
图 5-19 CUDA 批量数据处理类图
Fig.5-19 The CUDA Batch Data Handler Class Diagram
CUDA 批量数据处理类描述:
Init 启动设备,生成上下文实例并初始化上下文 CudaContext 的实例 context。
Transfer 生成设备端变量实例,在主机端分配数据空间,保存在 data 对象下。
其中 data 是一个多维 object 数组,存放传入和传出的数据。
53
万方数据
金融量化策略开发平台设计与实现
LoadKernel 将编译后的设备端程序导入到 GPU。
Run 运行导入后的程序。
Read 结果数据导出:从设备端读出运行结果数据。
Close 清理资源,释放设备端资源和主机端对象空间。
(6)日志
实现核心层的日志接口,为策略类提供日志接口。根据接口,用户可以输出
调试、运行、结果能信息。
5.1.3 实盘链路层实现
实盘期货行情数据接口实现和交易接口实现在数据接口层的实现。
(1)连接登陆
登陆时序图如图 5-20 所示。
:Project
:FutureMarketCTPConnection
:CTPMarketData
:CTPWrapper
CTPClientApi
Connect ( )
Connect ( )
MarketDataCreate( )
CreateFtdcMdApi( )
ConnectionMessage 1
ConnectionMessage 2
UserL ogin
L ogin ( )
L oginMessage 1
L oginMessage 2
L oginMessage 3
L oginMessage 4
图 5-20 登陆时序图
Fig.5-20 Login Sequence Diagram
54
万方数据
金融量化策略开发平台设计与实现
Project 初始化时调用 FutureMarketCTPConnection 的 Connect 方法请求连接。
FutureMarketCTPConnection 调 用 CTPMarketData 的 Connect 方 法 请 求 连 接 。
CTPMarketData 调 用 CTPWrapper 的 MarketDataCreate 方 法 请 求 连 接 。
CTPWrapper[29]向 CTP API 请求连接,并注册影响事件的函数。
CTP API 请求服务连接。
CTP API 接收服务器返回的连接状态信息,并激活给 CTPWrapper 的响应函
数。CTPWrapper 接收服务器返回的连接状态信息,并激活 CTPMarketData 的响
应 函 数 。 CTPMarketData 接 收 CTPWrapper 返 回 的 连 接 状 态 信 息 , 并 激 活
FutureMarketCTPConnection 的 响 应 函 数 。 FutureMarketCTPConnection 接 收
CTPMarketData 的连接状态信息,确认连接。
(2)行情下传
行情下传时序图如图 5-21 所示:
:Project
:FutureMarketCTPConnection
:CTPMarketData
:CTPWrapper
CTPClientApi
Subscribe ( )
SubscribeMarketData( )
SubscribeMarketData( )
SubscribeMarketData
MarketData1
MarketData1
MarketData2
MarketData2
MarketData2
MarketData2
MarketData2
MarketData2
图 5-21 行情数据获取时序图
Fig.5-21 Market Data Sequence Diagram
行情信息获取时序图说明:
55
万方数据
金融量化策略开发平台设计与实现
Project 初始化时调用 FutureMarketCTPConnection 的 Subscribe 方法请求关注
的行情。FutureMarketCTPConnection 调用 CTPMarketData 的 SubscribeMarketData
方法请求连接。CTPMarketData 调用 CTPWrapper 的 SubscribeMarketData 方法请
求连接。CTPWrapper 调用 SubscribeMarketData 向 CTP API 请求连接,并注册影
响事件的函数。
CTP API 请求服务连接。
CTP API 接收服务器返回的行情信息,并激活给 CTPWrapper 的响应函数。
CTPWrapper 接收 API 返回的连接状态信息,并激活 CTPMarketData 的响应函数。
CTPMarketData 接 收 CTPWrapper 返 回 的 行 情 信 息 , 并 激 活
FutureMarketCTPConnection 的 响 应 函 数 。 FutureMarketCTPConnection 接 收
CTPMarketData 的连接状态信息,并激活 Project。
(3)查询信息
查询信息时序图如图 5-22 所示。
:Strategy
:FutureTradeCTPConnection
:CTPTrader
:CTPWrapper
CTPClientApi
Q ue ry( )
QueryXXXXX( )
ProcessQueryTask( )
Process( )
Message
Message
Message
Message
图 5-22 信息查询时序图
Fig.5-22 Requiring Message Sequence Diagram
信息查询时序图说明:
56
万方数据
金融量化策略开发平台设计与实现
策 略 运 行 时 调 用 FutureTradeCTPConnection 的 Query 方 法 提 交 查 询 。
FutureTradeCTPConnection 调用 CTPTrader 的 Query 方法(函数根据请求的信息
不同而变化)提交查询。CTPTrader 调用 CTPWrapper 的 ProcessQueryTask 方法
请求查询。CTPWrapper 调用 CTP API 的 Process 函数请求,并注册影响事件的
函数。
CTP API 请求服务器,提交查询信息。
CTP API 接收服务器返回的查询信息,并激活给 CTPWrapper 的响应函数。
CTPWrapper 接收 API 返回的连接状态信息,并激活 CTPTrader 的响应函数。
CTPTrader 接收 CTPWrapper 返回的行情信息,并激活 FutureTradeCTPConnection
的响应函数。FutureTradeCTPConnection 接收 CTPTrader 的连接状态信息,并返
回给 Strategy。
(4)交易
交易时序图如图 5-23 所示:
:Strategy
:FutureTradeCTPConnection
:CTPTrader
:CTPWrapper
CTPClientApi
O rder( )
InsertOrder( )
ReqOrderInsert( )
ReqOrderInsert( )
OrderStatus
OrderStatus
OrderStatus
OnOrder( )
TradeMessage
TradeMessage
TradeMessage
O nT rade
图 5-23 下单时序图
Fig.5-23 Order Sequence Diagram
交易时序图说明:
57
万方数据
金融量化策略开发平台设计与实现
策略运行时调用 FutureTradeCTPConnection 的 Order 方法提交交易信息。
FutureTradeCTPConnection 调用 CTPTrader 的 InsertOrder 方法提交交易信息。
CTPTrader 调用 CTPWrapper 的 ReqOrderInsert 方法提交交易信息。CTPWrapper
调用 CTP API 的 ReqOrderInsert 函数提交交易信息,并注册影响事件的函数。
CTP API 请求服务器,提交交易信息。CTP API 接收服务器返回的交易状态,
并激活给 CTPWrapper 的响应函数。CTPWrapper 接收 API 返回的交易状态信息,
并激活 CTPTrader 的响应函数。CTPTrader 接收 CTPWrapper 返回的交易状态信
息,并激活 FutureTradeCTPConnection 的响应函数。FutureTradeCTPConnection
接收 CTPTrader 的交易状态信息,并返回给 Strategy。
服务器根据交易状态的变更反馈 CTP API 交易状态信息。CTPWrapper 接收
API 返回的交易状态信息,并激活 CTPTrader 的响应函数;CTPTrader 接收
CTPWrapper 返回的交易状态信息,并激活 FutureTradeCTPConnection 的响应函
数。FutureTradeCTPConnection 接收 CTPTrader 的交易状态信息,并返回给
Strategy。
(5)登出
用户请求退出,工程响应用户请求并登出行情链接和交易链接向 CTP 服务
器发送,登出请求。
5.1.4 历史数据实现
分笔行情数据和分笔行情数据式是最终策略使用的两种数据形式,第三方和
实时接收的行情数据结构是中间数据结构,将最终经整理后保存在历史数据库
中。
(1)分笔行情数据表结构
分笔行情数据数据表根据品种代码和时间进行分区。每个品种一个分区,按
月份建立子分区,并以时间字段建分区索引以提高查询效率。
历史数据由第三方机构提供,通常只保存实盘行情的部分数据。
分笔行情数据表结构设计如表 5-1 所示,包含了合约代码,时间,最新价,
持仓量,成交额,成交量,买一价,买一量,卖一价,卖一量等字段。
58
万方数据
金融量化策略开发平台设计与实现
表 5-1 行情数据表结构
Table5-1 Tick Data Table Structure
序号
中文
1
合约代码
2
英文
数据类型
InstrumentID
varchar2(10)
时间
DateTime
varchar2(10)
3
最新价
LastPrice
NUMBER(10)
4
持仓量
OpenInterest
NUMBER(10)
5
成交额
Turnover
NUMBER(10)
6
成交量
Volume
NUMBER(10)
7
买一价
BidPrice1
NUMBER(10)
8
买一量
BidVolume1
NUMBER(10)
9
卖一价
AskPrice1
NUMBER(10)
10
卖一量
AskVolume1
NUMBER(10)
(2)分时行情数据表结构
分时行情数据数据表根据品种代码和时间进行分区。每个品种一个分区,按
月份建立子分区,并以时间字段建分区索引以提高查询效率。
分时行情数据表结构设计如表 5-2 所示,包含了合约代码,时间,开盘价,
最高价,最低价,收盘价,成交额,成交量,买一价,买一量,卖一价,卖一量
等字段。
5.2 关键功能验证
金融量化策略开发平台三个关键功能的验证用例:
(1)行情驱动型回测功能验证。验证流程如下:生成策略;导入策略;读
取历史行情数据;采用历史行情数据驱动策略;虚拟交易接口处理交易信息。
(2)批量分析型回测功能验证。验证流程如下:配置虚拟账户和数据库链
接;初始化 GPU 资源;读取一个月股指期货历史行情数据(2012 年 1 月 4 日--2012
年 2 月 24 日数据量:1,072,500 行),配置 4 组参数组合;编写设备端代码,采
用 GPU 批量分析历史数据。同时采用 CPU 批量分析同样的历史数据;对比运行结
59
万方数据
金融量化策略开发平台设计与实现
果。
(3)期货实盘接口验证用例:验证流程如下:连接登陆;注册行情信息;
响应行情信息;交易;请求账户信息。
表 5-2 分时行情数据表结构
Table5-2 Bar Data Table Structure
序号
中文
英文
类型
1
合约代码
InstrumentID
varchar2(10)
2
时间
DateTime
varchar2(10)
3
开盘价
Open
NUMBER(10)
4
最高价
High
NUMBER(10)
5
最低价
Low
NUMBER(10)
6
收盘价
Close
NUMBER(10)
7
成交额
Turnover
NUMBER(10)
8
成交量
Volume
NUMBER(10)
9
买一价
BidPrice1
NUMBER(10)
10
买一量
BidVolume1
NUMBER(10)
11
卖一价
AskPrice1
NUMBER(10)
12
卖一量
AskVolume1
NUMBER(10)
5.2.1 行情驱动型回测功能验证
本测试案例测试回测需要的基本功能,包括策略的生成、参数的配置、工程
的运行、历史数据读取和行情交易的模拟功能。
首先用户根据采用向导式界面配置一个策略工程,生成一个策略模板。策略
模板为一个 Visual Studio 开发工程,如图 5-24 所示。之后用户依照策略模板
开发属于自己的策略程序。验证策略程序的代码逻辑性后,对工程进行编译并生
成一个动态链接库。该动态链接库是策略程序。
60
万方数据
金融量化策略开发平台设计与实现
图 5
24 策略模板
Fig.5-24 Strategy Template
用户将该动态链接库导入到平台中。导入时需要配置这次策略运行需要的参
数信息,如图 5-25 所示。
图 5
25 策略参数配置向导
Fig.5-25 Strategy Parameter Configuration Wizard
61
万方数据
金融量化策略开发平台设计与实现
并配置行情链接信息(在回测中为数据库连接信息),交易链接信息等。数
据库链接信息如图 5-26 所示。
图 5
26 数据库连接配置向导
Fig.5-26 Database Connection Configuration Wizard
配置结束后,用户点击启动按钮开始启动工程。启动时,工程读取历史行情
数据,虚拟行情接口开始连接,注册并请求历史数据,读入缓存。虚拟行情链接
后日志如图 5-27 所示。
图 5
27 虚拟行情链接日志
Fig.5-27 Virtual Market Data Connection Log
虚拟行情采用历史行情数据驱动策略。行情驱动线程开始运行,按 500ms 周
期下传一次 Tick,策略开始响应行情数据。策略响应行情数据后打印日志如图
5-28 所示。
图 5
28 策略响应日志
Fig.5-28 Strategy Reaction Log
策略响应行情数据后调用交易接口,查看交易数据,交易日志如图 5-29 所
62
万方数据
金融量化策略开发平台设计与实现
示。
图 5
29 虚拟交易链接日志
Fig.5-29 Virtual Trade Connection Log
用例运行结束。行情驱动型回测通过读取历史数据,模拟行情数据以固定频
率下传,成功驱动策略运行。通过虚拟交易类模拟下单和下单成交延时响应等效
果实现真实交易的模仿功能。
5.2.2 批量分析型回测功能验证
本案例验证批量分析策略功能,调用 GPU 模块功能,并检验 GPU 模块的运行
效率。
批量分析型回测和行情驱动型略微不同。批量分析数据不需要模拟每 隔
500ms 下传行情数据。用户导入策略后配置虚拟账户和数据库链接,点击启动按
钮开始运行工程。功能受限初始化 GPU 资源。然后读取一个月股指期货历史行情
数据(2012 年 1 月 4 日--2012 年 2 月 24 日数据量:1,072,500 行),配置 4 组参
数组合,将数据批量导入 GPU 设备执行分析算法,成功实现批量分析处理,并
证实执行效率比 CPU 处理更出色,得到了约 20 倍速度的提升。测试结果如表
5-3 所示。
表 5-3 批量数据运行效率对比表
Table5-3 Batch Data Analyzing Efficiency Table
计算模块
硬件信息
计算时间
GPU
GT335M
41 秒
CPU
I7-3630QM
731 秒
5.2.3 期货实盘链路验证
本案例验证平台实盘链接的功能。
首先配置链接服务器的链接信息。然后开始连接期货服务器,建立连接。建
立连接后,用户登录。为了获取行情数据,向服务器请求注册品种。然后等待行
63
万方数据
金融量化策略开发平台设计与实现
情数据下传。通过接口进行实盘交易,下单并等待成交反馈。最后请求账户信息。
测试结果如表 5-4 所示。
表 5-4 期货实盘链路验证
Table5-4 Future Trade Connection Test
测试功能
测试方法
结果
行情数据获取
连接 CTP 服务器,注册股指期货品种,
获取行情数据
通过
下单
连接 CTP 服务器,下单并等待交易状
态反馈
通过
撤单
连接 CTP 服务器,撤单并等待交易状
态反馈
通过
资金账户查询
连接 CTP 服务器,请求资金账户信息
通过
下单信息查询
连接 CTP 服务器,请求下单信息
通过
交易信息查询
连接 CTP 服务器,请求交易信息
通过
交割信息查询
连接 CTP 服务器,请求交割信息
通过
交割确认信息查
询
连接 CTP 服务器,请求交割确认信息
通过
最大持仓信息查
询
连接 CTP 服务器,请求最大持仓信息
通过
投资者信息查询
连接 CTP 服务器,请求投资者信息
通过
头寸信息查询
连接 CTP 服务器,请求头寸信息
通过
头寸明细信息查
询
连接 CTP 服务器,请求头寸明细信息
通过
综合头寸信息查
询
连接 CTP 服务器,请求综合头寸信息
通过
合约信息查询
连接 CTP 服务器,请求合约信息
通过
交易所信息查询
连接 CTP 服务器,请求交易所信息
通过
本案例通过 CTP API 成功实现期货实盘交易、实盘行情数据下传和交易信息
查询等功能。
64
万方数据
金融量化策略开发平台设计与实现
5.3 本章小结
本章首先确定了平台的应用架构设计方案,将平台分为三层进行了架构设
计。核心层首先分析了核心结构的组成,然后定义了平台的核心概念和运行流
程,定义了可扩展的接口。应用层首先将核心层需要扩展的接口分别进行了设
计,然后实现了人机交互方式。数据链路层首先分析了实盘链接 CTP API,设计
了行情数据下传和实盘交易链路,并针对历史数据设计了虚拟行情接口和历史
数据的数据库表结构。
65
万方数据
金融量化策略开发平台设计与实现
6 结 论
6.1 总结
本文先对国内金融量化工具进行研究分析。针对国内期货公司对量化工具的
需求,提出了一套可行的设计方案。首先对金融量化策略开发平台需求进行了分
析,然后进行了系统设计和系统功能的详细描述。对信金融量化策略开发平台的
各个模块进行了设计和实现。实现了金融量化策略开发平台的设计和实现。
本文取得的主要成果有:
(1)金融量化策略开发平台核心模块的设计和实现
实现了平台核心模块的设计,整合了策略、实时行情、历史数据、交易服务、
日志等模块,并提供给策略研究者开发扩展的接口。
实现了策略模板、虚拟行情、虚拟交易等策略开发和测试所需的基本功能。
(2)实现了 CUDA 纳入策略分析的设计与实现
实现了调用 CUDA 实现批处理行情数据分析的模块,得到了比 CPU 快约 20 倍
的处理速度。
(3)实现了期货实盘交易的设计和实现
实现了期货实盘行情数据下传功能、期货实盘交易功能。
达到了项目预期设计目标。经过平台运行与使用,回测性能得到提高,并可
以接入实时行情进行交易。
6.2 展望
金融量化策略开发平台在量化分析过程中发挥重要作用,减少了策略研究人
员回测对机器性能的需求,降低了时间成本。但是依然存在一些问题,需要进一
步完善和改进:
(1)多个驱动策略模型
随着高频交易的发展,投资者对套利模型的研究对实时响应和交易速度有极
高的要求。多个行情驱动模型比单个行情驱动更能把握套利机会。后续将考虑纳
66
万方数据
金融量化策略开发平台设计与实现
入多驱动多账户交易模型。
(2)投资收益和统计分析报告
策略运行结束后,策略研究者需要对投资效率进行验证。后续将纳入报表模
块,结合绩效分析算法为研究者提供一套绩效报告。
67
万方数据
金融量化策略开发平台设计与实现
参考文献
[1] 王冰,李想,浅议量化投资在国内市场的发展[J],北京,1-2.
[2] 黄鲲,量化交易及相应的软件开发[D],天津大学管理学院,2011,20-29.
[3] 丁鹏,量化投资策略与技术[M],北京,电子工业出版社,2012,2-8.
[4] 徐莉莉,量化投资在中国的发展现状[J],北京,2012,1-12.
[5] 龚东赓,程序化交易的发展历史[J],现状,2011,10-35.
[6] 期货日报,国内量化交易平台介绍[J],期货日报,2012,1-73.
[7] 艾琳奥尔德里奇,高频交易[M],北京,机械工业出版社,2011,21-25.
[8] 欧内斯特陈,量化交易[M],东北财经大学出版社,2014,18-57.
[9] Fred Gehm,Quantitative Trading and Money Management[M],华中科技大学
出版社,2012,43-73.
[10] 李国旗,量化投资系统:平台、原理和可信性,电子工业出版社, 2015,
20-95.
[11] 陈曼,GPU 通用计算与 CUDA[OL]
http://blog.csdn.net/chengman2009/article/details/5524971
[12] Nvidia,CUDA Toolkit Documentation[OL],
http://docs.nvidia.com/cuda/index.html
[13] Nicolas Wilt,The CUDA Handbook[M],北京,机械工业出版社,2014,56-58.
[14] Shane Cook,CUDA Programming[M],北京,机械工业出版社,2014,78-85.
[15] Terry ManagedCuda,How To Setup a C# Cuda Project using Visual Studio
2010[OL],2015,
http://managedcuda.codeplex.com/documention
[16] J. Watsham,Futures And Options In Risk Management[M],北京大学出版社,
2003,89-97.
[17] 宥达信息技术有限公司,策略开发指南[M],2014,64-67.
[18] Lovelady.M.,Visual Quantitative Finance[M],机械工业出版社,2015,42-55.
[19] Richard Tortoriello,Qunatitative Strategies for Achieving ALPHA[M],上海交
通大学出版社,2013,13-17.
[20] 陈炜,投资者订单提交行为、订单薄特征与数量化交易研究[M],经济科学
出版社,2012,18-25.
[21] 永安期货,CTP 综合交易平台简介[OL],2013
68
万方数据
金融量化策略开发平台设计与实现
http://www.yafco.com/show.php?contentid=274009
[22] 上海期货信息技术有限公司,综合交易平台 API 说明[S],2008,4-6.
[23] 上海期货信息技术有限公司,综合交易平台 API 技术开发指南[S],2012,
4-11.
[24] 龚东赓,程序化交易的发展历史[J],现状,2011,10-35.
[25] 国泰君安期货,上海期货交易所上市品种介绍[J],2012,1-73.
[26] Richard Niemiec,Oracle Database 11gR2 性能调整与优化,北京,清华大学
出版社[M],45-52.
[27] 刘铁猛,深入浅出 WPF[M],水利水电出版社,2010,35-66.
[28] John C. Hull,Options,Futures And Other Securities[M],北京,机械工业出版
社,2010,171-181.
[29] 黄鹤,建立 C#与 CTP 的接口
http://www.360doc.com/content/14/0211/00/3218170_351502832.shtml
69
万方数据
金融量化策略开发平台设计与实现
致 谢
在此,向在我论文研究和撰写过程中曾给予我关心和帮助的人们致以最诚挚
的感谢!
我要衷心感谢我的导师唐新怀教授,在整个论文撰写过程中,唐新怀教授给
予了我悉心的指导和帮助,经常在周末休息时间约见我,了解论文进度情况,
解答论文研究和撰写过程中的疑问,使我的论文能够顺利完成。 唐新怀教授不
仅传授给我论文研究的方法和思考方式。他对教学严谨的态度以及科学研究的
热爱使我获益匪浅,受益终身,在此我向唐新怀教授表示最由衷的敬意和最真
诚的感谢!
感谢我的第二导师张艳红教授,在我攻读硕士学位期间,给予我很多无私的
关怀和帮助。在此我向张艳红教授表示真诚的由衷的感谢!
感谢我的同学徐旼之,在论文的研究和撰写过程中给我的鼓励和陪伴,帮助
我查找资料,解答我的问题,谢谢你在我攻读硕士学位期间的大力支持!
感谢我的朋友郑佳和杨志勇,在项目中给予的帮忙和支持,以及在我的论文
的研究和撰写过程中给我的鼓励和支持,谢谢你们的支持!
感谢上海交通大学研究生学院和软件学院的老师们的辛勤工作,使我在攻读
硕士学位能够顺利的完成学业!感谢所有传授知识给我的老师们!感谢所有给予
我帮助的老师们!感谢所有给予我帮助的同学们!
70
万方数据
金融量化策略开发平台设计与实现
攻读学位期间发表的学术论文目录
[1] 许索晗,基于 CUDA 的金融量化策略开发平台的设计与实现,上海交通大学
内部网络公示,2015
71
万方数据
Download