程序化交易信号优化过滤策略
Optimized Filtering Strategy for Programmed Transaction Signals
DOI: 10.12677/FIN.2023.133058, PDF, HTML, XML, 下载: 290  浏览: 415 
作者: 张启徽:山东交通学院经济与管理学院,山东 济南
关键词: 程序化交易未来函数波动信号半自动交易Programming Trading Future Function Fluctuation Signal Semi-Automatic Trading Signal Filtering
摘要: 随着网络传输速度以及电脑计算能力和行业人员信息技术水平的提高,程序化交易逐渐得到应用。众多研究者侧重于策略模型的理论研究和构建,然而在具体实现交易策略时,对诸如信号漂移、信号闪烁、信号消失等影响策略运行的实际问题缺乏深入的分析,本文分析了这些问题产生的原因并提出了相应的优化过滤策略,以期为程序化交易爱好者提供一定的借鉴意义。
Abstract: With the improvement of network transmission speed, computer computing ability and information technology level of Industry personnel, programmed transactions are gradually applied. Many researchers focus on the theoretical research and construction of the strategy model. However, when implementing the transaction strategy, there is no in-depth analysis of the practical problems that affect the operation of the strategy, such as signal drift, signal flicker, signal disappearance, etc. This paper analyzes the causes of these problems and puts forward corresponding optimization filtering strategies, with a view to providing some reference for procedural traders.
文章引用:张启徽. 程序化交易信号优化过滤策略[J]. 金融, 2023, 13(3): 574-578. https://doi.org/10.12677/FIN.2023.133058

1. 引言

证监会2015年10月9日公布的《证券期货市场程序化交易管理办法(征求意见稿)》中明确程序化交易是指通过既定程序或特定软件自动生成或执行交易指令的交易行为。根据此定义依据一定技术指标、交易规则和参数约束构建个性化的交易模型,由计算机计算模型设定的条件,从而根据计算出的条件结果自动触发交易指令、快速自动买入或者卖出特定数量和特定品种的投资标的交易行为都称为程序化交易 [1] 。目前,国内程序化交易策略一般使用程序化交易平台提供的交易软件,这些平台软件能够连接各种交易市场的历史和实时行情数据,用户可以利用这类平台提供的高级程序语言如Python语言创建自己的程序交易策略,利用历史数据对策略模型进行回测、参数优化,并将回测结果以可视化图表的方式进行显示,以便于观看回测结果和策略模型的调整优化 [2] ;另一种存在形式是证券公司、期货公司、投资公司以及私募基金等用自行研发的交易系统运行多市场、多品种、多周期、多组合的量化交易策略来降低投资风险。第一种交易平台最近几年发展迅速,平台产品不断完善升级,且编写交易策略相对容易,在广大非计算机专业出身的程序交易爱好者中得到广泛认同和使用。

2. 程序化交易的客观性和局限性

2.1. 程序化交易的客观性

根据数据调查显示北美市场程序化已经占有超过百分之七十的交易份额,就我国目前市场情况来看,我国的程序化交易份额虽低于欧美的平均水平 [3] ,但程序化交易的占比也在30%左右,程序化交易平台如开拓者Trade Blazer、文华财经、极智量化、期货通等不断涌现,为程序化交易提供了便利条件;在期货市场上,暴涨暴跌不时出现,行情的剧烈波动会引起投资者情绪的波动,随着盈亏的不断变化,投资者难免会做出滞涨杀跌的非理性操作。程序化交易依据交易信号进行买进或卖出操作,而不以自身主观的看法进行买卖操作,从而可以规避投资人贪婪、恐惧及迟疑等心理状态的变化对操作的影响。另外,手工交易出现亏损时,个人投资者一般不舍得割肉止损,一致越亏越多,甚至爆仓,若使用程序交易会设置止盈止损,当出现一定的亏损时,程序会及时平仓,一般不会出现越亏越多的情况;再者,期货市场允许T + 0操作,当价格短时间内波动较大时,一个交易需要在几分钟甚至几秒钟完成,手动盯盘只有通过不断翻盘才能监控不同品种,难以及时捕捉瞬间出现的机会,程序化交易能同时监控多个品种,可以在第一时间发出信号并下单,自动捕捉瞬间出现的机会。

2.2. 程序化交易的局限性

在趋势性行情中,由于趋势的平稳性,策略交易程序容易捕捉到交易信号,在暴涨暴跌行情中,由于开仓条件的限制,程序不易捕捉到信号,因此,程序化交易策略多适用于单边趋势性行情中,然而市场行情总是趋势行情与震荡行情交替进行,并且震荡行情占据着市场行情的大部分时间,在震荡行情中,价格在较小的范围内波动,频繁的开平仓所造成的手续费增加就会使程序交易者不堪重负,因此当行情震荡时,程序化交易策略将变得不再合适 [4] 。另外,在期货市场投资主体中,除了机构投资者,还有大量的个体投资者,中国期货业协会在2020年发布的报告中显示,截至2019年底,中国期货市场的散户投资者数量为360万,散户占比约为83.3%,在散户投资者中,只有具有计算机知识背景的投资者才有编程能力,且编程能力参差不齐 [5] 。由于期货市场是零和市场,一个投资者编写的策略难以给其他投资者使用,这样就限制了程序化交易的普及使用;即使有计算机知识的人在初次编写策略时,也会遇到交易信号漂移、信号闪烁、信号重复出现、信号消失等诸多问题,这些波动信号的存在不仅时刻困扰着策略设计者,也严重影响了交易策略的实际应用效果,因此对程序交易中出现的信号进行优化过滤是编写程序化交易策略的重点和难点。再者,多数策略是基于MACD、均线等技术指标编写的,所有技术指标都具有滞后性,基于历史数据和技术指标编写的策略虽然在回测历史数据时有较高的胜率和收益率,但在未来行情中并不一定会有较好的表现 [6] ;诸如MACD,均线等指标在市场上的使用率非常高,当基于相同指标的策略趋于大众化时,策略的收益率就会降低,难以再获得超额收益。

3. 程序化交易波动信号产生的原因分析

程序交易者利用自己掌握的技术指标和交易平台提供的程序语言及函数编写策略代码将自己的交易思想程序化,然后利用历史数据对模型回测和优化,在对模型回测优化过程中不断出现的上述波动信号会使策略设计者筋疲力尽甚至失去信心。下面就这些信号产生的原因根据自己实际编写程序化交易策略的经验进行分析以飨读者。

3.1. 策略中存在未来函数

策略中存在未来函数是波动信号产生的主要原因。在进行策略沙盘推演时经常会遇到推演过程中在过往K线中再出现买进或卖出等交易信号或交易信号从某根K线漂移到过往K线的情况,由于出现信号的K线在信号出现时已经结束,因此此时出现的交易信号在实盘时并不会触发交易指令;然而在对历史数据回测时会对这些信号产生的盈亏计算在内,从而造成回测结果的虚高,究其原因主要是因为在策略中使用了平台提供的未来函数。未来函数是在当前时间点引用未来数据的函数,即引用当时还没有发生的数据对之前发出的判断进行修正的函数,具体地说,就是本周期结束后显示的指标买卖提示信号可能在以后发生新的数据后改变位置或消失。含有未来函数策略的基本特征是买卖信号的不确定,常常是某时刻发出了买卖信号,随着价格的涨跌该信号消失或在新的位置重新标示出来,为了行情预测的需要,大部分平台都会提供一些未来函数,如ZIG (K,N)之字转向,BACKSET (X,N)向前赋值函数等都属于未来函数。

3.2. 策略中引用了跨周期数据

程序化交易主要适用于趋势性行情中,而程序交易又属于高频交易,交易策略主要应用于1分钟、5分钟等短周期K线上,而仅使用短周线K线数据又难以判断出60分钟线、日线、周线上的中长期趋势性行情,因此,策略设计者通常会在使用短周期数据时,为了判断行情的趋势性而引用长周期数据,引用的长周期数据仍然属于未来数据,产生的信号具有与引用未来函数一样的信号波动现象。例如,在分钟K线上引用日线数据的收盘价CLOSE,而日线的收盘价在全天交易结束时才能确定,而在分钟线上引用的日线收盘价会随着交易的进行而不断变化,价格上涨时则信号成功,价格下跌则信号自动消失。如果价格不断的上下波动则交易条件在成立与否之间不断的变化,从而引起交易信号的波动。只要引用的数据周期大于策略程序实际运行的周期就属于引用了未来的跨周期数据,交易平台只允许小周期引用大周期数据,只有在策略程序中使用了跨周期数据就会产生交易信号的波动现象,因此在交易程序中尽量不要引用跨周期数据。

3.3. 盘整行情导致策略频繁开平仓

程序化交易只有在趋势性行情中才能体现其优势,然而行情大部分时间总是如心电图般震荡,震荡行情下策略程序一会给出开多仓信号,一会给出开空仓信号,频繁的交易意味着交易者要频繁的付出交易手续费,期货市场上,日内平仓又通常比隔日平仓多出一倍的手续费,震荡行情下频繁交易的手续费往往使交易者不堪重负。因此震荡行情下如何减少开仓信号也是策略优化的一个方面。

3.4. 开平仓条件不严密导致频繁开平仓

交易程序反复发出策略程序编写者不期望出现的开平仓信号触发交易指令会产生较多的交易手续费。产生这种现象的原因之一是开平仓条件逻辑不够严密,程序一会满足开多条件,一会满足开空条件,多空条件存在重合的交集,条件逻辑错误只要认真检查就不难发现修改。另外当前K线的最高价、最低价、收盘价在当前K线没走完之前都是变化的,变化的价格容易导致条件时而满足时而不满足,造成信号的不稳定,可以用上根K线的价格代替当前K线的价格来避免交易信号闪烁,在实盘之前要通过模拟账户不断的检查修改完善交易程序方可实盘。

4. 程序化交易中波动信号优化过滤策略

4.1. 策略中避免使用未来函数

通过上面的原因分析了解了未来函数的特征,具备了识别策略中有无未来函数的基础,另外网上有免费的识别策略代码中有无未来函数的工具。虽然策略中不宜直接使用未来函数,但未来函数可以给操作者一个可能转折的点位,这是其他函数所无法提示的,未来函数给出的阶段顶底转折买卖点仍有重要的参考价值。在下跌趋势中含未来函数的卖出信号较准,买入信号不准;而在上涨趋势中买入信号较准,而卖出信号不准,未来函数符合在熊市中每次逢高抛出都是正确的,在牛市中每次逢低买入都是正确的规律,因此当含有未来函数的策略出现信号后要结合大周期趋势综合判断。虽然在全自动交易策略中不宜直接使用未来函数,但在充分了解未来函数性质后对其给出的交易信号提示可以综合大周期趋势进行半自动交易,也就是说交易者可以利用未来函数给出的信号再结合自己的经验判断手工进行买卖操作。

4.2. 谨慎使用跨周期数据

为了便于在小周期如1分钟或5分钟K线上使用策略时判断行情的趋势性,策略设计者通常会跨周期引用数据。如在1分钟或5分钟K线上引用30分钟、60分钟或5日线、10日线等日线数据。由于大周期的最高价、最低价、收盘价在当前小周期K线上并不能最终确定,价格的不确定会造成交易信号的时隐时现。另外分钟线和日线数据单独存储及平台的局限性也不能保证程序所读取的大周期数据完全准确,在策略中引用大周期数据增加了信号的波动性和程序的复杂性。为了判断更长周期的趋势可以通过延长分钟线时间轴的方式,假设策略运行在5分钟线上,可以用EMA (C*N)来判断5分钟线时的5日均线趋势,其中C为当前5分钟的实时价,1小时时间周期里有12根5分钟K线,一天有4个小时交易时间,因此一天4小时的交易时间里有48 (1*12*4)根5分钟K线,因此可以用EMA (C,1*12*4*5)来近似判断5日均线趋势,同理EMA (C,1*12*4*5*2)也可以用来判断10日均线趋势,笔者用此方法解决了困扰多时的引用日线数据造成的信号波动现象。

4.3. 盘整行情适当增加信号触发间隔时间

盘整行情虽不会像未来数据那样引起信号波动,但心电图似的行情会在很小的价差范围内不断触发开平仓操作,既没有价差空间也徒增手续费,还占用资金影响其他品种开仓,这也是策略设计者比较头疼的地方。对于盘整行情可以使用平台提供了盘整行情判断函数来判断,如果是盘整行情可以加大开仓信号K线间隔;平多后的开多信号或平空后的开空信号适当增加K线间隔;另外对于价格波动较小的品种,可以根据策略提示信号综合判断后半自动手工开平仓或屏蔽掉远离长期均线的开仓信号来增加胜率。

4.4. 力求简单,避免过度优化

策略设计者为了追求交易信号的胜率,往往对策略附加过多的限制条件或把参数范围设置的过小。虽然这些措施对提高胜率有一定的帮助,但胜率并不是衡量策略好坏的唯一因素,毫无疑问的是世上并不存在100%正确的交易策略,一个胜率90%的策略也可能会造成重大损失,一个胜率30%的策略也可以获得长期的良好效果,衡量一个策略好坏最简单的标准是从长期交易来看能够做到“赢大输小”,做到长期稳定赢利。另外交易策略并非越复杂越有效,程序交易属于短周期高频交易,如果程序过于复杂,数据计算量过大,在监控多品种时,由于每周期时间都要时时计算,客户端电脑可能会卡死,简单的策略也往往具有反脆弱性,过度优化意味着过度拟合,往往适得其反,当胜率提高而收益减少时往往到了优化的极限,不应再过度优化。

4.5. 编写适合自己的程序化交易策略

先做自我认识,对自我进行评估,判断程序化交易是否与自身的交易特性相符合,做交易的时候很多盈利的机会都在犹豫不决的空档中溜走,对于时常犹豫不决的投资者来说,可以将自己的交易思想程序化。另外每个投资人都有自己常用的技术指标,在编写交易程序时选择自己善用的指标组合。每个指标各有各的原理,把多个指标揉合在一起往往彼此冲突,组合的指标不要过多,过多的指标组合不仅增加了策略复杂性,也难以达到理想效果。稳定赢利的模型通常是趋势跟踪模型,这类模型的特点是胜率低,回撤少,长期回报率高,但由于胜率低,需要策略使用者有较强的心理承受能力。

5. 结语

文章就程序化交易中出现信号波动的原因进行了分析并提出了有针对性的策略建议。在实际策略实现过程中出现的无用信号不止文中提到的这些,也有不少其他正确的信号过滤方法,全自动程序化交易信号过滤是一个不断尝试不断完善的过程,笔者只是根据自己的经历提出些思路,希望对读者与所启发。

参考文献

[1] 刘伟, 沈春根. 基于技术分析指标组合的程序化交易模型研究[J]. 经济数学, 2015(3): 87-92.
[2] 朱伊琳. 数据时代下程序化交易的前景与发展[J]. 全国商情·理论研究, 2016(25): 89-90.
[3] 田汉卿. 量化投资与程序化交易[J]. 清华金融评论, 2016(2): 31-33.
[4] 包晶晶. 程序化交易在我国证券市场上的发展研究初探[J]. 新经济, 2015(2): 30-31.
[5] 余冬悦. 基于技术指标组合的程序化交易策略[J]. 荆楚理工学院学报, 2019, 34(6): 32-38.
[6] 冯志华. 基于趋势型指标的商品期货程序化交易策略设计[D]: [硕士学位论文]. 兰州: 西北师范大学, 2021.