图表程序化交易
图表程序化交易的机理

易得图表程序化是以虚拟初始投入资金为基础,根据图表中的历史K线数据和加载的交易系统公式计算执行,产生一系列的交易信号而形成的交易结果。在这个过程中就会形成一套独立的,包括资产、持仓、现金、盈亏、持仓成本等数据的虚拟数据系统。


图表程序化的整个过程与真实账户无关,它以虚拟初始投入资金严格按照交易系统公式的逻辑执行,从而产生交易信号。在交易信号出现的时候,不会考虑盘口挂单、撮合机制等因素的影响,也就是说出现了交易信号,如果虚拟资金还没用完就一定能买得到或者卖得出去,因此我们也将其称之为理论持仓、理论计算结果。


上面我们说到图表程序化计算的过程与真实账户无关,如果要进行实盘的交易,真实账户只在最新k线上的理论持仓发生变化时,跟随其后进行同方向的实盘委托即可完成交易。也就是说实盘账户跟着虚拟账户的最新计算结果买卖就是了。


图表程序化是一种“所见即所得”的交易方式,根据交易系统公式算出在历史K线数据上的各个开平仓位置,并将开平仓信号显示在K线图上。是最简单的一种程序化交易方式,非常适合新手用户使用。



进行图表程序化加载的公式必须是“交易系统”类型的公式。对应的“交易系统”类型的函数包括有BUY(开多)、SELL(平多)、HOLDING(持仓量)、CASH(现金)、ASSET(资产)等100多个。凡是使用了这类函数的公式,系统都会为这个公式创建一套以虚拟初始投入资金为基础虚拟数据系统,并以这个虚拟数据系统进行执行。刚提到的HOLDING、CASH都是取得虚拟盘产生的持仓量和现金。

启动图表程序化

1、登录交易


见”期货交易”文档 - 期货CTP交易登陆


2、打开K线图


打开选定品种的K线图,选择好数据周期(1分钟线、5分钟线、日线等),设定除权方式(默认向前复权)。


小技巧:如果不需要过多的历史数据加载到K线图参与图表程序化,可以在K线图右键菜单“锁定时间段”-“锁定起始时间”(或者快捷键42),将起始时间前的数据截断。减少了运算的数据,运行效率自然也会提高。



3、确保行情已登录、历史数据齐全准确


程序化的运行依赖于历史数据进行计算,所以历史数据必须完整准备。同时行情必须登录,这样盘中实时行情数据才能推送过来,驱动程序化的运行。


4、加载交易系统公式到图表


图表程序化交易运行在“交易系统”类型的公式上。加载公式的方式很多,常用的有直接敲公式名称由键盘精灵载入,或者在左侧的管理面板的公式树中双击载入,或者在公式树直接拖拽到想要的主图或附图。管理面板的调出方法:鼠标点击易得系统最左侧边框或者Shift+W快捷键。


5、调出图表程序化交易对话框


调出图表程序化交易对话框的方法有2种:

1)主菜单 “交易”-“图表程序化交易”
2)右键点击加载的交易系统公式的标题栏,选择菜单“图表程序化交易”


6、启动图表程序化



启动图表程序化的方法有2个:

1)点击启动交易按钮。
2)点击加载的交易系统公式的标题栏的苦脸图标。

此时程序化交易已启动成功,苦脸会变成笑脸图标。


7、停止程序化交易


停止图表程序化的方法跟启动程序化交易的操作完全相同,只是启动交易按钮此时变成停止按钮,笑脸变成了苦脸图标。


8、退出程序化交易



点击退出程序化交易按钮后,图表程序化的相关数据将删除,并结束了图表程序化交易,此时笑脸图标消失。

执行频率设置


执行频率是指驱动图表程序化公式执行的频率,执行频率有每笔Tick行情、走完整根K线、新生成K线、固定时间间隔四种。执行频率在条件预警、图表程序化交易、后台程序化交易中都会出现,也是同一个概念。下面我们分别介绍一下四种方式的区别。


1、每笔Tick行情


是指在盘中每接收到一笔Tick分笔行情数据就执行一次公式计算。这种方式的优点在于不会错过每笔Tick行情数据;缺点在于如果在多笔Tick合成的数据周期中(比如1分钟线),会造成信号的闪烁。因为1分钟线是由一分钟内成交的所有分笔数据合成,每收到一笔Tick的时候该周期的K线还没有最终走完定型,数据后面还可能会变。如果此时计算生产了交易信号,在后续行情改变了该K线周期的数据后,再次计算交易信号又可能消失了。


信号消失的问题为公式的回测带来了难题,因为在历史数据中是无法还原该周期内每笔Tick的情况,造成了回测跟盘中实际执行的结果不一致。


如果数据类型是分笔数据周期,因为该周期就是由一笔Tick数据生成,就不存在信号闪烁的问题。这种情况下每笔Tick行情执行频率跟下面介绍的走完整根K线的实际效果也是一样的。


2、走完整根K线


理解了上面的每笔Tick行情驱动,走完整根K线也就很好理解了。就是每来一笔Tick行情数据的时候先按兵不动,等待该周期的最后一笔Tick行情数据到来之后再执行。这时候这根K线的数据已经定型不再改变了,所以就不会出现信号闪烁的问题,盘中实际的执行结果跟回测的结果是一致的。


这样每根K线只会计算一次,如果是1分钟线,也就是每1分钟执行一次公式计算。


3、新生成K线


新生成K线跟走完整根K线模式的差别在于,走完整根K线是在该根K线最的最后一笔Tick到来后执行,而新生成K线则是在该根K线的第一笔Tick到来后就马上执行,该根K线后续的Tick数据变化都不再执行。


因为每根K线周期也是仅执行了一次公式,所以也不存在信号闪烁的问题。盘中执行的结果跟回测的结果可能会不一致,但如果您的公式只是用了该根K线的开盘价,那么盘中执行结果跟回测结果却是一样的,因为开盘价在第一笔Tick到来的时候就确定了。


4、固定时间间隔


固定时间间隔是使用定时器每隔N秒进行一次公式的执行,这个执行频率是无序的,不可控的。这种模式适合不考虑信号闪烁和回测的一致性问题,只要达到条件就立即执行交易。


说了这么多,到底哪种模式最好呢?其实每种模式各有特点,没有好坏、更没有对错之分。只要您了解了其运行的机理,您就可以选择一款最适合您的策略初衷,最符合您应用场景的执行频率模式。

持仓同步

本章的开头我们提到,图表程序化交易以虚拟资金为基础按照公式逻辑执行产生了一套理论的虚拟数据系统。所以理论计算出来的持仓量因为时间差、撮合成交未匹配等因素,往往跟实际账号中的持仓量不一致。持仓同步功能就是为了解决这个问题,通过对实际账户的仓位按市价进行加仓或者减仓下单,以使实际持仓和理论持仓保持一致。



持仓同步可以手工持仓同步和自动持仓同步,手工持仓同步很简单,就是手工点击“手工持仓同步”按钮,根据仓位差进行加减仓下单操作。


下面我们主要介绍一下自动持仓同步。启动自动持仓同步,勾选持仓自动同步选项即可。自动同步的频率有走完整根K线和固定时间间隔两种,概念和原理跟上面所讲的执行频率一样,这里不再赘述。


当根K线有信号不自动同步是指当前执行的K线如果产生了交易信号,在自动同步的时候就跳过不进行同步,避免程序化报单和持仓同步出现重复交易的情况。


同步下单需确认是同步的加减仓下单指弹出确认框点击确定后再执行,以免出错。


示例:


我们可以从上图来理解持仓同步的过程,上面的K线图和下面的程序化信号列表上都标注了7个对应的交易信号。其中第一个和第三个信号是由持仓同步来完成的。


第一个开多信号,是因为信号在K线图上时间是出现在21:01,而我们程序化是在21:05才启动的,所以错过了执行第一个信号。由于当时空仓,所以持仓同步机制对实际账户按市价进行了加仓的开多操作。


第三个信号,由于公式执行的下单价格是4726,但价格一路上涨以致未能撮合成交。所以持仓同步机制检测到了实际账户持仓和理论持仓的差异,先对刚才价格4726的委托进行了撤单,再按市价进行了加仓操作。


我们注意到持仓同步都是按市价进行报单的。在持仓同步报单之前,会对本图表程序化交易产生的相同标的的所有未成交委托进行撤单,以免造成重复委托。需要注意的是,只对本图表程序化策略交易产生的相同标的的所有未成交委托进行撤单;对该标的的手工委托报单或者其他程序化策略的委托报单,不进行撤单。


信号列表


在图表程序化交易对话框的下方,列出了本图表程序化交易产生的所有交易信号。每个信号包含了信号时间、下单时间、方向、成交量等列信息,您可以通过鼠标拖拽列的标题移动改变列的显示顺序,系统并会为您记忆下来。


如果在高级设置里设置了信号下单需手工确认,那么交易信号需由右键菜单的“执行下单”或双击信号列表来发出报单。


在右键菜单中可以删除列表中的交易信号记录,在图表程序化运行的过程中不建议删除。因为上节讲到的持仓同步撤单,就是根据这里的交易信号记录来区别是否是本策略发出的未成交委托。


在右键菜单,还支持对交易信号列表的导出。


查看日志

打开日志所在目录查看图表程序化交易日志。



高级设置


1、信号选择与日志



信号选择可以勾选Buy、BuyShort、Sell、SellShort进一步控制四种交易信号,比如如果没有勾选Buy,那么公式中的Buy指令将不执行。


下单需手工确认是指在公式执行中产生的交易信号将会在信号列表中列出,不自动下单。用户可以在信号列表中通过右键菜单点击“执行下单”按钮或双击确认下单。


最多保存N条交易信号到信号列表,如果超过了将删除前面的超出部分,0表示全部保存不删除。


启动时检测交易信号并执行,是指在图表程序化刚启动的时候会根据历史数据进行一次全历史的公式计算,如果最后一根K线有交易信号,可根据此选项是否执行下单。


保存下单日志是指将交易信号明细写入日志文件。


2、下单品种映射



下单品种映射功能,可实现图表程序化监控源品种,而下单指向到另一只品种。如果使用下单品种映射功能,在下单函数中应避免使用LIMIT限价委托,因为监控的品种的价格与目标品种价格可能相差太大,除非取得目标品种的价格作为限价价格。建议使用MARKET市价委托。


如上图,图表程序化运行在白银指数上,而下单执行的是白银月份合约。


3、多账户下单系数和合约下单系数



通过"账户下单系数"和"合约下单系数"两项共同作用,用户可以调整实际下单的倍数。下单指令将会对当前账户和勾选的多个账户同时进行下单。上移下移可调整账户下单顺序。


账户实际下单数量 = 下单数量 * 账户系数 * 合约系数。


注意:此设置仅在当前图表程序化策略下单起效,不会作用于外部手工下单;外部设置的手工下单多账户系数也不会作用于此图表程序化下单。


4、声音设置



用户可以在执行下单时启用各种下单类型的声音提示,支持wav格式的音频文件。勾选启用可以设置该下单类别的声音是否起效。


5、资金费率设置



图表程序化支持自定义策略执行的资金、费率、保证金率等。


我们知道在公式编辑器中编写交易系统公式或者后台程序化公式,会出现“执行设置”按钮,里面也有相同的资金费率设置。所以上图中,如果您勾选了下方的“使用公式自有设置”,那么这个页面的设置都会变灰不可修改,按照公式编写中的资金费率执行。如果没有勾选,那么就可以自定义不同于公式中的资金费率设置。



见上图,系统包含了各个品种的默认费率和保证金率,这些数据可以从各个经纪商下载同步。如果在高级设置的资金费率页面上方勾选了“使用系统默认保证金费率”,就使用系统的默认配置数据。如果不勾选,那么就可以自由设置。


费率可以按成交额的百分比收取或者按成交量收取


滑点成本是指在限价委托中,对于交易信号的下单价格会按品种最小变动单位顺价几个点位的价格,以便委托更容易成交。对于市价委托无效。


比如,下单执行价格是10.0元,品种最小变动单位是0.02元,设定了滑点成本开仓平仓都是2个变动价位。那么对于不同下单指令,最终下单价格会有调整:


开多:10.0 + (0.02 * 2) = 10.04元
平多:10.0 - (0.02 * 2) = 9.96元
开空:10.0 - (0.02 * 2) = 9.96元
平空:10.0 + (0.02 * 2) = 10.04元


固定合约乘数,勾选是指忽略各个品种的标准合约乘数,使用固定一个数值。没有勾选则使用品种标准的合约乘数。


我们知道下单所需资金的计算是价格*下单量*合约乘数*保证金比例。有些品种如AU黄金的合约乘数是1000,或者价位较高。如果虚拟资金为100万,某些策略在历史数据的计算过程中可能很快将虚拟资金耗完,导致后续不能再开仓。固定合约乘数可以忽略这些限制让策略更好地验证执行。


勾选允许零股买卖可以不按最小手数交易,允许零股买卖。


虚盘初始金可以进行自行修改。


6、追单、撤单的下单设置



同样,在公式编辑器中编写交易系统公式或者后台程序化公式,会出现“执行设置”按钮,里面也有相同的追单、撤单设置。所以上图中,如果您勾选了下方的“使用公式自有设置”,那么这个页面的设置都会变灰不可修改,按照公式编写中的追单、撤单设置执行。如果没有勾选,那么就可以自定义不同于公式中的追单、撤单设置。


自动下单前先撤该品种所有未成交单

自动下单前先撤该品种同向未成交单

这两个设置都非常好理解,其中同向是指开多、平多、开空、平空四种相同的委托。


是否追单选项可以设置在委托单在一定时间内未能成交,可以先撤单再进一步追单。

1) N秒不成就撤
2) N秒不成就撤,然后N档内追单,再不成就 立即撤单
3) N秒不成就撤,然后N档内追单,再不成就 挂单不动
4) N秒不成就撤,然后N档内追单,再不成就 市价追单


注意N档内追单,是指按之前的委托价格顺价N档;如果之前的委托是市价,那么就去最新价顺价N档。顺价的意思是开多和平空就加N档价位,平多和开空就减N档价位。N档价位等于N*品种最小变动价位


平仓顺序:分为先今后昨和先昨后今,是指先平今仓还是先平昨仓。此设置仅在上期所和上期能源所起效,其他期货交易所不区分今仓和昨仓。


思考:追单和自动持仓同步都是对未成交单进行纠错补单的一种方法,所以使用者在同时使用准单和自动持仓同步时,应该考虑这个问题,这两种方法的同时使用可能造成补单重复的问题。