二、 期货量化基本流程

提示:应期货监管部门要求,交易者必须确认上一交易日结算单后,才能进行当日交易。所以对于全自动量化交易者必须到文华软件交易界面->参数设置->交易安全->勾选“自动确认结算单”,否则将影响你的交易无法下单。手动交易者登录交易界面后可手动每日确认结算单,无需必须勾选“自动确认结算单”项。

(一)整理思路,编写模型
1、宽语言模型构建方法

库安算法交易软件使用宽语言编程,类C语言语法,支持各类复杂策略的开发,支持个性化的信号管理和精细化下单方案。公式属于编译型,编译后直接运行可执行文件,大大提高了公式的执行效率。

(1)基于K线数据的公式结构

“基于K线数据”类型,指根据K线图表数据构建趋势策略,写入算法交易接管信号对下单精细化管理的模型。

公式由定义数据区、定义环境设置、设置跨合约跨周期引用关键字、定义参数、定义变量和主程序构成,如下图所示。除主程序外,其余部分可针对具体思路缺省。

(2)独立算法交易模型的公式结构

“独立的算法交易模型”类型,指不调用K线图表数据,仅以盘口和账户数据构建的算法模型。

公式由调用数据区Data、定义变量Vars和主函数Begin—End三部分组成,如下图所示:

(3)编写公式:

如下图,点击软件右上方角菜单【量化】->【编写公式】进行编写。

(4)编写规则:

① 宽语言编程语法:http://www.wenhua.com.cn/guide/myQuant_zjyfhs2.htm
② 常见编写和机制说明:https://www.wenhua.com.cn/guide/myquant_zjyfhs6.htm
③ 账户函数取交易账户的数据,不需要在Data区定义;
④ 独立的算法交易模型不支持定义参数。

2、查找函数
(1)系统函数

Wh9支持丰富的WFC开源函数类库,提供近200个开源函数,共700余个系统函数,支持金融统计类函数、循环执行函数、基本面函数、头寸类函数、手动下单辅助函数、期权类函数等交易建模所需的各类函数,支持用户自由实现各类量化交易思路。

如下图所示,在量化菜单下点击【函数列表】,可查看函数的具体分类和使用说明。

编写时,在编写平台上双击蓝色的系统函数,单击鼠标右键【查找函数说明】可查看函数具体使用说明。

(2)自定义函数

如果要在模型中调用比较复杂的计算,而现有的函数又无法满足需要,则可以通过创建自定义函数来实现。

①自定义函数的结构:

一个自定义函数由参数定义、变量定义、主程序三部分构成,如下图所示:

②编写自定义函数:

如下图所示,是如何编写用户自定义函数。

③ 编写规则:
·自定义函数语法介绍:https://www.wenhua.com.cn/guide/myQuant_zjyfhs2.htm
·自定义函数不能直接加载在图表上,只能在其他自定义函数或公式应用中调用;
·未经过编译保存的自定义函数不能在其他公式中被引用;

3、信号指令和下单委托函数
(1)六种信号指令:BK、SK、SP、BP、BPK、SPK

. 信号指令根据K线图表数据计算信号,可显示信号图标并对信号做历史回测,不支持下单委托;

. 可用于基于图表数据计算的K线图公式,不可用于独立的算法模型;

. 常见思路:通过函数获取信号的价位、距离、信号到目前的高低点等;

. 信号指令如下表,具体使用方法请在“公式编写平台”->【帮助】->“指令说明”中查看:

指令 指令图标 指令函数
建立多头持仓 BK(N,Price,IsCancel);
建立空头持仓 SK(N,Price,IsCancel);
平多头持仓 SP(N,Price,IsCancel);
平空头持仓 BP(N,Price,IsCancel);
买平后买开新仓 BPK(N,Price,IsCancel);
卖平后卖开新仓 SPK(N,Price,IsCancel);
(2)下单委托函数:A_SendOrder

. 不计算信号,根据条件直接发委托单,只能用于实时行情,不能历史回测;

. 可用于K线图公式/独立算法交易模型;

. 常见思路:获取账户信息、盘口高频数据等实现精细化下单;

. 函数用法如下,更多使用方法请在软件右上方菜单【量化】->“函数列表”中查看:

注:
1、两种指令可同时用于一个公式中;
2、交易需写入下单委托函数A_SendOrder,信号指令只在图表上显示信号标识,不能下单委托。

(二)模型测试和优化
1、测试模型在历史K线上的效果(查看信号回测报告)

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

如下图,将模型加载到K线图,在K线图上点击鼠标右键->【模型回测报告】,即可查看详细的分析报告。通过回测分析报告中提供的各个参考指标,投资者可360度的检验模型好坏。

在K线上点击鼠标右键,勾选【显示权益曲线】,可直观的看到资金曲线的变化情况,检查模型的效果是否符合我们的预期要求。

2、了解模型(查看模型信号明细)

资金最大回撤发生在哪一根K线?出现资金最大回撤时的几笔交易的盈亏都是多少?模型测试的每笔交易的时间和价格具体是多少?这一系列问题都可在“信号明细”中找到答案。如下图,加载模型回测后,在K线图上点击鼠标右键->【信号明细】,可查看详细的信号成交明细。

3、测试模型敏感度

模型对于参数变动的敏感程度,反映了它对市场变化的适应能力,参数稍有风吹草动,收益率就大幅变动的模型显然是不稳定的。敏感性测试图以滑点、手续费等作为横坐标,以平均盈利/平均亏损、收益率等参数为纵坐标,用线型形态直观展现出参数变化对平均盈亏、胜率等指标的影响,测试模型的敏感程度,帮助我们找到更好的模型。

如下图,加载模型回测后,在K线图右键菜单【敏感性测试】,选好横坐标和纵坐标要考量的变量后,点击计算,查看敏感性测试图。

4、优化模型参数

我们会发现在一段时间内表现很好的模型,过了一段时间就好像失效了一样,这种情况可能是由于模型参数不再适应当前市场行情引起的,我们需要统计历史数据寻找新的最优参数,但单凭人工计算几乎是不可能的。利用“参数优化”功能,可在指定的范围内让计算机筛选出最适合当前行情的参数。

如下图,加载模型回测后,在K线图右键菜单选择【参数优化】,可通过①【枚举】按钮,进行大范围海选抽样;通过②【遗传】按钮,在已经筛选的优质参数附近寻找更优的参数。参数优化原理参考“参数优化让模型达到最优”。

(三)运行模型自动交易

通过历史回测和参数优化,模型的执行效果得到了大幅提升。但是仅有模型是不能自动交易的,还需要借助量化平台运行,自动下单。

Wh9针对不同的期货量化策略提供不同的运行平台,趋势策略里写算法交易的模型需要在期货合约运行模组上基于图表数据运行,独立的算法交易模型则需要在算法交易模型运行池中后台运行。

1、添加模型到运行模组全自动运行

对每个策略单独分配资金,进行独立的资金管理、风险控制,这样的需求可以在运行模组中实现。

如下图,是如何将模型加载到模组运行的操作:

完成上面的设置后,按照下图所示方法打开运行模组界面。

点击后会弹出如下图界面,不同的页面区域分别显示模组分区、资金、信号、监控K线图和运行日志信息。

(1)建立模组运行单元时交易合约的指定方式(如下图)

数据合约是指加载模型计算理论信号的合约,交易合约是模型出信号后实际交易的合约,可自己设置。

注:
模型中写入Trade_Other指定交易合约函数,此处会自动抓取模型中编写的交易合约,不可设置;
数据合约为加权合约或主连合约时,写入Trade_Other:Auto;可实现自动换月移仓。

(2)运行单元的运行方式选择(如下图)

① 延续回测信号运行方式:模组运行单元中历史k线图显示回测的信号,后续以历史信号为基础,根据实时数据计算新信号。

模组重新启动影响:

如果本次启动与前一次退出之间产生新数据,缺失的数据会自动申请,并且对这部分数据进行历史回测。回测信号与历史信号同时保留,加载成功之后,延续这些信号继续运行。

② 忽略回测信号运行方式:模组运行单元中历史k线图不显示信号,从加载时开始重新计算信号,不以任何历史信号为基础。

模组重新启动影响:

如果本次启动与前一次退出之间没有产生新数据,由于没有缺失数据,所以历史信号保留,加载完成之后,延续历史信号运行。

如果本次启动与前一次退出之间产生新数据,缺失的数据会自动申请,但不会进行历史回测,并且清空所有的历史信号。加载成功之后,运行单元资金复原为初始资金,持仓清零,相当于重新开始运行。

注:选择忽略回测信号的运行方式,运行单元加载成功后,第一个有效信号必须是开仓信号。

2、独立算法交易模型运行池

独立的算法交易策略需要在专门的算法交易模型运行池中后台运行。如下图,是如何建立算法交易运行池:

建立好算法交易模型运行池后,可按照下图所示方法打开运行界面查看。

相关问题解答
1、模组单元状态列表中各项代表的含义?
下单信号:最后确认、下单的信号(包括信号消失),不显示没有确认的可能变化的信号;
信号手数:下单信号用户设置或模型写入的手数;
下单手数:模组当前单元运行过程中实际的下单手数;
单元持仓:模组当前单元实际持仓;
理论持仓:BKVOL = 根据信号下单手数计算的理论持仓,完全根据信号计算;
平仓盈亏:模组当前单元本次打开后产生的累计的平仓盈亏,根据单元持仓的实际成交价格计算;
浮动盈亏:模组当前单元持仓的浮盈,根据单元持仓持仓价格计算;
期初权益:模组本次运行开始时实际资金曲线的权益值;
当前权益:模组运行过程中实际资金曲线的权益值;
可用资金:根据实际资金曲线计算的实际可用资金,可实时查看模组的实际可用资金情况;
理论资金曲线:MONEYTOT =根据信号的理论持仓以及理论开、平仓价格进行计算;
实际资金曲线:(初始权益 – 初始权益包含的浮动盈亏)+ 平仓盈亏(累计值)+ 当前浮动盈亏– 手续费(累计值);
2、模组分区的使用技巧
模组分区像文件夹一样,用户可按品种、按策略、按周期等思路划分,建立不同的分区管理运行单元。
设置当前分区各单元为闲置状态:将当前分区下的运行单元设置为退出运行状态,可一次退出分区内所有单元。设置为闲置状态的单元不占用单元运行数量。
设置当前分区各单元为运行状态:将当前分区下所有闲置状态的单元恢复为运行状态,可一次打开分区内所有单元。
3、如果我不在电脑前,但想知道模型的运行情况怎么办?
答:可以使用【日志邮件】功能,该功能可以帮助您接收到模型运行动态的邮件,人不在电脑前一样可以监控自己的程序。在软件右上方【系统工具】->【个性化设置】中按下图的操作步骤勾选启用后,盒子和模组的交易动态会直接发送至绑定的邮箱中。
4、模组监控K线图上的黄白线是什么?
答:黄白线分别为理论资金曲线和实际资金曲线;
理论资金曲线(白线):根据信号指令计算的单元起始资金运行到当前的剩余可用资金;
实际资金曲线(黄线):未加载模组运行单元前,实际资金曲线为单元的起始资金;
单元运行后,实际资金曲线=起始资金+当前单元的实际平仓盈亏+当前单元的实际浮动盈亏—手续费成本;
运行单元持续运行,实际资金曲线可以记录当前单元的实际盈亏情况,理论资金曲线与实际资金曲线的对比,可以了解运行单元的滑点成本。
注:对数坐标和线性坐标:线性坐标表示的是价格变化的绝对值,而对数坐标表示的是价格变化的相对强度。
5、模组运行单元K线图右键菜单的“重新计算历史信号”和“清除历史信号重新运行”是什么意思?
答:重新计算历史信号:是重新指定一个日期,从这个日期开始将历史的信号再算一遍,相当于重新回测一遍,历史信号会保留。
清除历史信号重新运行:赋给当前单元一个初始状态,以这个状态重新开始运行,这个状态包括持仓方向、手数、价格等,会忽略历史信号。
6、运行单元初始资金的作用
答:模组中每个运行的模型称为单元,单元之间独立运行。运行单元中的模型开仓需要占用保证金,设置单元的初始资金,便可用于单元开仓使用。单元运行所产生的资金的变化,也是基于初始资金的设置。