说一下, 近几个月的研究成果或者经验,后续会继续更新本篇,如果时间允许,可能规划写本量化方面的电子书。
我一直在用TB交易开拓者研究期货量化, 当然金字塔量化,文华8量化, 都会用也会写代码, 但是还是更习惯TB。
经验一: 需要优化的参数最多就只能是两个,而且计算次数不能太多, 比如, 双均线策略,再加固定止损, 就有三个参数了, 为了避免过度优化,大均线固定用120,不要优化,小均线参数可优化(范围4--30,步长为2), 固定止损可优化(范围20--80,步长为5),计算次数是(30-4)/2+1=14,(80-20)/5+1 =13,14*13=182次运算,然后优化完参数,看策略指标的交易次数, 至少是运算次数的3倍。 这段话虽然简短, 但是也是几个月辛苦研究的经验,切记 。
针对经验一,说点题外话,我也有一些松鼠量化的策略,他们的软广到处都是, 回测的样本内数据,收益曲线都很好, 但是测试样本外数据就阳痿了。另外,我为啥说参数不能多, 也是踩过坑,我最多的参数用了12个,运算次数天文数字,学习了啥啥遗传算法(没学会,哈哈),也在拼多多租用24核的云服务器优化参数,耗用的时间精力,还有心气,真的一眼难尽。 结果就是,运算次数太多, 花费很长时间,参数太多,过度优化, 优化出来的一组参数,只适用这段特定的样本内数据,样本外数据测试,无一例外的阳痿。
经验二:用合约指数,比如TB的000指数,或者文华的螺纹指数,优化的策略样本内回测表现很好, 样本外表现也好, 但是指数合约和主力合约存在误差,比如螺纹钢在切换主力前后1个月的误差大,切换之后误差减小,每年三个主力合约,又比如苯乙烯,白银这些频繁的切换主力合约,误差就不停的忽大忽小。 真实的交易是交易主力合约,一般的做法是在指数合约出现开多或开空的信号, 映射主力合约, 用主力合约下单。 这种误差举一个特殊的例子,在9:00 这一刻,指数合约出现开多信号,指数合约是3500,主力合约是3480,在10:15这一刻出现平多信号,指数合约是3600,主力合约是3590,计算指数合约平仓,盈利100点,主力合约盈利90点,这种累积的误差非常吓人,在指数上测试是非常稳定赚钱的,但是一交易就亏。又啰嗦一句, 用指数回测并不是一无是处,对一些追涨杀跌的突破策略,指数合约能避免一些假突破,也有用指数合约映射主力合约,次主力合约的研究方法。这并不是一无是处的。
经验三:从2020年开始,大放水的经济政策导致商品波动明显加剧,这对策略回测的影响也是非常明显的, 比如策略是15分钟周期,回测的样本内数据是2020年1月1日到2024年12月25日, 一共27020根K线,大概1000次交易,样本外数据用2020年之前的?之前的波动率明显小呀, 测试一下能赚钱吗?反正目前为止,我研究的策略被这个问题难住了,用15分钟或者30分钟的周期回测,前段后段数据波动性明显差的大,导致样本外数据测试不能稳定赚钱,如果用1分钟,3分钟,5分钟的周期回测,策略的品种通用性又被降低,比如2个小时内,菜油豆油波幅100跳,PTA甲醇波幅30跳,一个本来靠波动幅度赚钱的策略,只能适用部分品种。 当然,有的大神策略通用性非常强,我还在方面努力ing。
经验四:人工干预是否可行,我的想法是,可以,顺着策略原来的方向,特殊行情的,特定点的,不频繁的少量干预。比如我的策略是趋势突破策略,突破之后就直接是一波非常顺畅的上涨行情,在出现一个黄昏星的大阴线的收盘价平多,黄昏星后跌了一小段,此时我的人工干预让利润回吐减小,但是策略信号仍然是多头,我应该把多头接回来,出现阳包阴,或者十字线的K线形态, 开多,继续保持策略的多头。这种情况并不多见,而且不要频繁干预,也要注意文华指数在走震荡行情还是单边趋势行情,尽量是文华指数在走震荡行情的时候干预。 干预的目的是多一点点利润,能包住滑点,减少一点明显的震荡磨损即可,不能妄想人工干预会给策略本身有非常明显的优化。 当然,我也想过,也尝试过,把人工干预的思路,写成代码,添加到策略中,结果是稍有一点效果,但不是特别优秀,我还在这方面会继续花费时间, 毕竟,量化本来的逻辑就应该是多个开仓条件, 多个平仓条件,而不是固定的一个开仓条件,一个平仓条件,所以,特殊行情特殊对待。比如突然有一天,你策略本就是多头,合约涨停,那应该平多,等待策略的下一个信号,期货中涨停毕竟很少见,利润落袋非常关键,涨停又快速回调的概率远远大于继续大涨。
经验五:这几个经验之间没啥特定的顺序,这里说一下平台的选择,期货:TB交易开拓者,金字塔,文华8,MC,现成的框架和数据,研究都是免费的,文华8用手机号可以体验2个月,TB和金字塔写策略,回测,模拟交易都是免费的,只有实盘才收费。股票:掘金量化,迅投量化,聚宽都是稳定的,免费的非常好的平台。我和大多数新手一样,刚开始进入量化之门,先怀疑平台会窃取我的策略,然后想造轮子,学习数据库,行情数据获取,清洗数据,pyqt搭建行情界面,策略回测后各种计算(夏普,最大回撤,盈亏比等),这些都需要大量的时间写代码,前提是你会写代码, 而且有这方面完整的学习资料,到头来发现,花费太多时间造轮子了,而且会造轮子了,却没有很多时间研究策略逻辑。此消彼长的嘛,对于新手朋友,我建议不要造轮子,研究策略吧!
经验六:我给客户代写技术指标和量化策略,经常给客户解释,同一个技术指标,不通用所有的股票,当然,同一个技术指标,也不通用一只股票的所有时间段。举例:上证指数在2024年9月18日之前一段持续的下跌,航运概念指数也是单边下跌,然而智能交通概念指数是横线震荡行情,细分行业,银行指数是震荡上涨趋势,同一个公式,在这段时间的选股效果就天差地别。再举例:一只股票经过一年半的下跌,再经过一年的震荡,这个时候就应该用macd类型的趋势指标了, 如果再用kdj这种超买超卖的指标, 在超买区,极有可能出现kdj钝化失效,超买区继续涨,而不是到超买区就下跌。
同理,期货也是一样的,同一个量化策略,怎么能完全通用逐月切换主力合约,2个月切换一次主力合约, 4个月切换一次主力合约。再比如:原油主导的,沥青,燃油,低硫燃油,液化气等,早盘夜盘开盘时会频繁的出现大幅跳空,一个正常适用螺纹钢的策略,肯定不适用原油系列。再比如趋势性强的合约,和震荡行情偏多的合约,也不适用同一个策略。再比如3分钟适用的策略, 用在15分钟上,可能连回测的样本内行情都是亏钱的,更不用说样本外数据了。