自动化交易

标题: 文华 WH8 编写股票、期货程序化交易的基本流程 [打印本页]

作者: autojiaoyi.com    时间: 2018-6-2 12:33
标题: 文华 WH8 编写股票、期货程序化交易的基本流程
第一步 整理思路,编写模型
(一)趋势模型构建方法
     做程序化自动交易,首先要有模型,文华的趋势模型开发使用麦语言编程,语法简单,功能强大,初识编程的投资者在掌握了模型编写技巧后,也能轻易的将思路转化成交易模型。
    1、麦语言模型的结构:
    麦语言模型主要由变量、交易条件和交易指令以及模型关键字组成,如下图是一个简单过滤模型的基本结构。
[attach]16[/attach]
    2、麦语言模型编写步骤:
    (1)构建模型思路,量化出必要的条件和数据,将其定义成变量;
    (2)将赋值好的变量组合起来,构建模型的开平仓条件;
    (3)对开平仓条件添加相应的开平指令,按照模型性质添加模型关键字;
    (4)模型编写完成后,进行语法检测,加载到主图并查看模型历史回测报告
    下图①-⑤是如何建立一个趋势模型。
[attach]17[/attach]
    注:
    图中④处各属性选项用法如下:
    副图指标,加载模型在副图中显示;
   K线附属指标,加载模型在主图中显示,与k线叠加在一起;
    主图k线形态,加载模型在主图中显示,替换原有k线指标,该属性的模型不支持效果
测试。
(二)函数查找方法
    1、了解函数
    方法1:在编写菜单下点击函数列表,可以查看趋势模型和算法模型的全部函数和详细说明。
[attach]18[/attach]
    方法2:在模型编写平台,双击蓝色的系统函数,点击右键【查找函数说明】,可查看当前函数的具体介绍。
[attach]19[/attach]
    2、了解交易指令
    麦语言的交易指令如下,可在编写平台上点击【插入】->【插入指令】详细了解;
    买开指令-------------------------BK
    卖开指令-------------------------SK
    卖平指令-------------------------SP
    买平指令-------------------------BP
    买平开反手指令------------------BPK
    卖平开反手指令------------------SPK
    清仓指令-------------------CLOSEOUT
    限价止损指令-------------------STOP
    追踪止损指令------------------STOP1
[attach]20[/attach]

第二步 模型测试和优化
(一)测试模型在历史K线的效果
当有了模型后,我们通常是不敢马上进行实盘交易的,因为我们不了解模型,不知道它是否符合我们的交易思路、盈利率是多少、胜率是多少、多久出一次交易信号等等。只有了解模型才能信任模型并放心的在实盘中应用,所以在实盘交易前需要先检验模型在历史k线上的效果,深度了解模型的运行效果和局限性。
如下图,是如何加载模型并查看回测报告的方法,加载模型后点击【回测报告】按钮可查看详细分析报告。
[attach]21[/attach]
如上图,通过回测分析报告中提供的各个参考指标,投资者可360度的检验模型好坏。
点击下图④处的【资金曲线】,可以直观的看到资金曲线的变化情况,检查模型的效果是否符合我们的预期要求。
[attach]22[/attach]
(二)了解模型(查看模型交易明细)
资金最大回撤发生在哪一根K线?出现资金最大回撤时的几笔交易的盈亏都是多少?模型测试的每笔交易的时间和价格具体是多少?这一系列问题都可在“信号明细”中找到答案。信号明细以表格的形式给出了模型完整的成交明细,记录模型下单历程。
如下图红框位置所示,点击【信号明细】,可查看详细的效果测试成交明细。
[attach]23[/attach]
(三)测试模型的敏感度
模型对于参数变动的敏感程度,直接反映了它对市场变化的适应能力,参数稍有风吹草动,收益率就大幅变动的模型显然是不稳定的。
敏感性测试图以滑点、手续费等作为横坐标,以平均盈利/平均亏损、收益率等参数为纵坐标,用线性形态直观展现出参数变化对平均盈亏、胜率等指标的影响,测试模型的敏感程度,帮助我们找到更好的模型。
如下图红框位置所示,选好横坐标和纵坐标要考量的变量后,点击【计算】按钮便可查看敏感性测试图。
[attach]24[/attach]
(四)优化模型参数
我们会发现在一段时间内表现很好的模型,过了一段时间就好像失效了一样,这种情况可能是由于模型参数不再适应当前市场行情引起的,我们需要统计历史数据寻找新的最优参数。大量的指标计算、参数筛选工作单凭人工计算几乎是不可能的,利用“参数优化”功能,可在指定的范围内让计算机筛选出最适合当前行情的参数。
如下图所示:通过①【枚举】按钮,进行大范围海选抽样。通过②【遗传】按钮,在已经筛选的优质参数附近寻找更优的参数。参数优化原理,请参考说明书“参数优化让模型达到最优”。
[attach]25[/attach]
第三步 模型的加载运行
  通过历史回测和参数优化,模型的执行效果得到了大幅提升。但是仅有模型是不能自动交易的,还需要借助程序化运行平台运行,自动下单。
程序化软件有盒子和模组两种运行平台,对于习惯盯着K线图、指标、信号,有时还会手动干预下单的用户,更适合使用页面盒子功能;对于程序化思路成熟,不需要手动干预,由策略全自动下单、加减仓、风控、资金管理的用户,则更适合使用模组功能。
(一)方式一:加入盒子自动运行
一些投资者想要由软件计算信号,根据自己的盘感手动执行下单,这样的思路就需要使用盒子来实现。
如下图,在加载页面盒子时选择“弹出下单提示”,当满足条件时,会弹出如下图红框中所示的确认窗口,点击【多反空】按钮即可完成下单。

[attach]26[/attach]

1、加载单合约到盒子运行步骤:
如下图,是如何添加单合约到盒子:
[attach]27[/attach]
2、批量加载合约到盒子运行步骤:
如果想要通过一个公式同时监控多个合约运行,逐一添加合约到盒子就太麻烦了。我们可以把需要运行的合约添加到一个合约篮子中,在篮子报价页面点右键->【一篮子合约装入页面盒子】,便可将合约批量添加到盒子中,如下图所示。   
[attach]28[/attach]      
[attach]29[/attach]
(二)方式二:加入模组全自动运行
有的投资者想要实现出信号N秒后下单、一根K线执行多次信号,或者使用策略进行账户资金头寸管理、风险控制等,这些需求都需要在运行模组中实现。
如下图,是如何建立运行模组的操作。
[attach]30[/attach]
模组加载之后的效果如下图,不同的页面区域分别显示分区模组、资金、信号、监控K线图和运行日志信息。
[attach]32[/attach]
1、建立模组时交易合约的指定方式(如下图)
[attach]33[/attach]
(1)模型中写入交易合约的此处会自动抓取模型中编写的交易合约
模型中没有写入交易合约的,可在此处手动设置。
(2)数据合约为指定交易合约(如IF1801):
A 模型中写入TRADE_OTHER函数的,按照TRADE_OTHER函数指定的合约作为交易合约。
B 模型中未写入TRADE_OTHER函数的,默认交易合约与数据合约一致。
(3)数据合约为主连/指数合约:
A 按照模型中TRADE_OTHER函数指定的合约作为交易合约。
B TRADE_OTHER函数写为TRADE_OTHER('AUTO')时,可实现自动换月移仓。
2.模组的运行方式选择(如下图)
[attach]34[/attach]
(1)延续回测信号运行方式:模组历史k线图显示回测的信号,后续以历史信号为基础,根据实时数据计算新信号。
模组重新启动影响:
如果本次启动与前一次退出之间产生新数据,缺失的数据会自动申请,并且对这部分数据进行历史回测。回测信号与历史信号同时保留,加载成功之后,延续这些信号继续运行。
(2)忽略回测信号运行方式:模组历史k线图不显示信号,从模组加载时开始重新计算信号,不以任何历史信号为基础。
模组重新启动影响:
如果本次启动与前一次退出之间没有产生新数据,由于没有缺失数据,所以历史信号保留,加载完成之后,延续历史信号运行。
如果本次启动与前一次退出之间产生新数据,缺失的数据会自动申请,但不会进行历史回测,并且清空所有的历史信号。加载成功之后,模组资金复原为初始资金,持仓清零,相当于重新开始运行。
注:选择忽略回测信号的运行方式,模组加载成功后,第一个有效信号必须是开仓信号。

(三)相关常见问题解答
1、如何设置页面盒子平铺窗口数?
答:软件右上方菜单【系统工具】—>【个性化设置】里设置平铺窗口个数,再单击页面盒子即可实现多窗口平铺。
注:双击页面盒子可以直接单窗口放大显示当前页面盒子。
[attach]35[/attach]
2、页面盒子的模型如何删除?
答:如下图所示,是将页面盒子删除的方法。
[attach]36[/attach]
3、页面盒子是否可以同时显示报价窗口?
答:可以,在【系统工具】—>【个性化设置】—>【程序化交易】—>【页面盒子平铺带报价窗口】处进行设置即可。
[attach]37[/attach]
[attach]38[/attach]
4、量能周期如何加载到盒子中?
答:在盒子中添加合约后,在窗口里切换成量能周期,然后点击右键 ->保存页块即可。
5、模组状态列表中各项代表的含义?
下单信号:模组运行过程中最后确认、下单的信号(包括信号消失),不显示没有确认的可能变化的信号。
信号手数:最后信号用户设置或模型写入的手数。
下单手数:模组运行过程中实际的下单手数。
理论持仓:BKVOL=根据信号下单手数计算的理论持仓,完全根据信号计算不受手动干预影响。
初始权益:模组本次运行开始时实际资金曲线的权益值。
当前权益:模组运行过程中实际资金曲线的权益值。
可用资金:根据实际资金曲线计算的实际的可用资金,可实时查看模组的实际可用资金情况。
实际资金曲线: =(初始权益 – 初始权益包含的浮动盈亏)+ 平仓盈亏(累计值)+ 当前浮动盈亏–手续费(累计值)。
6、运行模组分区的使用技巧
创建复本:登录多账号状态下,可为不同的交易账号,创建相同的运行模组。
设置该模组为闲置状态:将该模组设置为退出运行状态,可一次退出分区内的所有模组。设置为闲置状态的模组不占用模组运行数量。
设置该模组为激活状态:将闲置状态的模组恢复为运行状态,可一次打开分区内的所有模组。
[attach]39[/attach]
7、如果我不在电脑前,但想知道模型的运行情况怎么办?
答:可以使用【日志邮件】功能,该功能可以帮助您接收到模型运行动态的邮件,人不在电脑前一样可以监控自己的程序。
[attach]40[/attach]
8、怎样实现手动打开模组时自动加载运行?
答:在软件右上方菜单【系统工具】->个性化设置->程序化交易,勾选【打开模组自动加载】项,再次打开模组时就会自动加载运行。
9、复核状态为什么显示为 --?
答:显示为--,表示最后信号不需要复核。
注:K线走完确认信号下单/不进行信号复核的信号执行方式,为不需要复核的信号。






欢迎光临 自动化交易 (http://www.autojiaoyi.com/) Powered by Discuz! X3.4