投资者咨询:【学习资料】量化交易用户一些典型提问的解答 (文华财经)
来源:文华财经 日期:2021-12-28 11:28
策略模型和技术指标有什么区别?
模型 =( 技术指标) + (下单条件、止损等交易内容) + (分配资金、风控等头寸管理内容)
模型的回测和运行还支持设置信号计算起始时间,展现出你从什么时间开始交易,投了多少钱做交易,交易盈亏曲线是什么样的,模型还包含交易的时间和资金的内容。
如何把指标转化为模型? 初步转化是加下单条件即可,深度转化是再加上止损止盈、头寸管理。
第一步:指标公式中加入交易指令
写法范例:COND,SIG,//满足COND条件时,立即发出Sig信号
Sig:BK、SP、SK、BP、BPK、SPK
其中,如果交易过程中,并不是一直持仓,那么用BK、SP、SK、BP;如果交易过程中一直保持有持仓,非多即空,那么用BPK、SPK。
***做完这一步,一个简单的模型就形成了,后面的二步根据情况决定是否需要做。
第二步:加入止损条件
第三步:加入头寸管理
例如:
ONEYTOT<=INITMONEY*(1-10/100),SP
ONEYTOT<=INITMONEY*(1-10/100),BP
-------------------
以下资料,根据量化用户在论坛的发帖提问总结而来。
1、信号计算起始时间是什么意思?
答:量化交易回测有两个时间,一个是指标计算始时间(也称数据起始时间),一个是信号计算起始时间。二个时间不是一回事的。
以沪铜2201合约为例,该合约的数据起始时间就是合约的挂牌时间是2021年1月18日,在挂牌初期交易不活跃,交易量很少,缺少流动性,你并不会去交易这个合约。
随着时间的推移,到2021年11月份以后,距离交割日时间越来越短了,沪铜2101合约交易活跃起来,成交量逐渐增大,2021年11月1日你决定开始交易这个合约,那么信号计算起始时间就应该设置为2021年11月1日。模型自11月1日以后开始计算信号,此后如果满足信号条件,就会发出交易信号。
2、交易指令如何选择?用单一指令(BK、SP、SK、BP)还是反手指令(BPK、SPK)?
答:在将指标改写成量化交易模型过程中,具体使用哪种交易指令,取决于你的交易思路。如果交易过程中,并不是一直持仓,那么适合选择单一指令;如果交易过程中一直保持有持仓,非多即空,那么可以使用反手指令。
例如:在一波上涨趋势中,空头盈利空间要远小于多头盈利空间,做空甚至有可能不断亏损,这时使用反手指令是不适合的。使用一些判断趋势方向的条件,配合单一方向的指令,规避逆势交易,往往能够获得更高的收益。
3、量化交易能否加减仓?
答:软件提供加仓指令AddLong/AddShort,以及减仓指令LowerLong/LowerShort,用于编写加仓和减仓策略。
4、选择什么k线周期交易?
答:量化交易选择哪一个k线周期?这个问题没有标准答案。越小的周期,交易机会越多,但是随之而来的是更多的手续成本和滑点损失;越大的周期,趋势越明显,单笔盈利空间越大,但是相应的需要承担的回撤风险也越大。
一个模型更适合在哪个周期上运行,可以通过历史数据回测来判断,这也是量化交易的魅力所在。实际研究过程中,可以将模型逐一放到不同的k线周期上进行回测,通过对比模型回测报告中的收益、回撤、胜率、盈亏比、滑点损失等数据,最终找到表现最好的周期,这就是这个模型最适合的周期。
5、如何对模型进行长期数据验证?
答:如果你要对模型做长期数据验证,那就需要主连链回测了。
主连链回测用各个月份合约的历史数据算信号,交易的也是具体的月份合约,回测结果更加客观,但是回测计算数据量大,回测计算时间长。
主连链回测,不是使用你看到的品种主连k线图的数据计算信号的,而是采用主连包含的各个月份合约自挂牌以来的全部k线数据计算信号,规避品种主连k线换月时价格跳空对量化计算准确性的影响。
调用方法:模型不要写入trade_other('auto')语句,把模型直接加载到品种主连上,系统会自动调用主连链回测。
1、收盘价模型
主图显示信号、权益曲线。
右键菜单 -》回测报告-》月份合约线图,可以查看模型在月份合约k线图上的具体表现,原型指标线、变量数值等。
2、模型带有sigcheck等运行优化函数
主图上不显示信号和资金曲线。
品种加权就是一个品种各个月份合约价格的加权平均指数,月份合约的持仓量越大,占的权重就越大,品种加权基本上代表主力月份合约的走势。因为实际交易中各个合约的调仓是逐步进行的,所以品种加权的k线图趋势的连续性较好,没有跳空情况。
模型调试好以后,需要加载到具体月份合约上做实际交易的。加载到具体月份合约,收益率、胜率就是要衰减的,就是正常的现象,品种加权毕竟不是真实的合约,是我们用加权方法作了平滑技术处理的实验器材,胜率、收益虽然高,但不真实。加载到月份合约的的回测结才是最后的真实结果。
***品种加权也可以直接拿来做交易使用。因为品种加权本身并不是交易合约,所以模型中需要写入trade_other('auto')来指定交易主力合约,主力合约切换月份时支持自动移仓。因为品种加权是各个月份的平均价格,本质上是对价格走势做了钝化处理,一些细小的波动反应不出来的,所以不适合做短线交易使用。
使用trade_other来做交易,真实的收益率、胜率,也达不到加权回测结果那么高的,也会有所衰减。
7、模型回测为什么不包括最新一天盘中的数据?
答:最新一天盘中的数据是实时变化的,如果回测包含了最新的数据,那么每次回测的结果都是不同的,不利于对回测报告进行对比和研究。
对于量化研究来说,晚一天并不会产生很大影响。每日收盘以后,就可以对当天的数据进行回测了。
8、什么是杠杆倍数?
答:杠杆倍数 = 最大资金使用率 / 保证金。为什么看测试报告一定要看杠杆倍数?因为杠杆倍数直接影响收益率。
例如:同样的模型、初始资金、保证金比例,假设杠杆倍数为1时,收益率是20%。这时加一倍的仓,杠杆倍数变为2,那么收益率就会变成40%。会发现多出的盈利并不是量化策略带来的,是因为加大了资金使用率,但也同时扩大了风险。所以一个模型的收益率,必须是在一个合理的杠杆倍数下才有参考意义。
9、权益和损益有什么区别?
答:权益计算的是账户可用资金和持仓保证金,是包含了浮动盈亏的,但这些浮动盈亏在你没有平仓以前还没真的变现,最后实际平仓变现时候,金额可能会有变化;而损益计算的是每次持仓为0时,账户的可用资金,是不包括浮动盈亏的,所以一般损益回撤更能体现本金真实的回撤情况。
10、胜率和盈亏比哪个更重要?
答:评价一个模型,不能单只看收益率的,胜率和盈亏比是二个更重要的评价指标。
胜率和盈亏比就像一对兄弟,最理想的状态是高胜率的同时又能保证高盈亏比,遗憾的是这种情况只能是理想状态,实盘交易过程中是不存在这种情况的。
不同类型的交易策略对胜率和盈亏比的评价标准和倾向也不同。短线交易,高频、震荡回归策略,具有高胜率、低盈亏比的特点;而长线交易,常见的趋势跟踪策略,往往是低胜率、高盈亏比。理论上盈亏比和胜率的乘积大于0.6的模型就是可以盈利的,乘积越大代表模型越好。
低胜率也是可以盈利的。例如:10次交易,7次亏损3次盈利,胜率仅为30%,但是只要盈亏比超过2.4,相当于每次亏损1元、盈利2.4元,10次交易最终还是盈利的。
对于长线趋势策略而言,一个品种一年中出现明显趋势的次数并不多,模型能否成功的关键是抓住大的趋势波动,所以胜率是很难达到很高的水平的,这时想办法提高盈亏比,让利润充分奔跑,更容易获得较高的收益。
11、夏普比率是什么意思?
答:夏普比率代表了每承受一个单位的风险,会产生多少的超额收益。夏普比率大于1,代表收益高于风险。
期货交易中有个显著特点,预期收益越高,需要承担的交易风险也越大;预期收益较低,承担的交易风险也相对较低。而对于一个理性的交易者,追求的往往是在固定所能承受的风险下,追求最大的收益;或在固定的预期收益下,追求最低的风险。而夏普比率正是衡量风险收益比的指标,收益相同的两个模型,一般会选择夏普比率更高的模型,因为这个模型相对风险较低。
12、参数优化中枚举和遗传是什么意思?
答:参数优化的计算实际上就是将所有参数的全部排列组合都计算一遍,找到最优的结果。但是在参数较多的情况下,即使是在较高的计算机硬件水平下,也可能需要几个小时,甚至几天时间才能计算完成,这样效率实在太低了。
参数优化中的“枚举”是一个初选的过程,通过设定计算步长、参数关系表达式,降低计算量、提高优化效率。虽然是初选,但实际不影响优化效果,因为量化交易要选择的参数是需要具备一定适应性的,不能是极值。一个“孤岛”型的参数,往往会带来过度优化的问题。
当从软件里以排序的方式显示出的参数组中选择好了参数以后,可以继续使用遗传功能进行精调,通过对比不同参数的收益、胜率、盈亏比等信息,最终确定最佳参数组合。
13、敏感性测试是做什么用的?
答:模型回测时,滑点越大,模型收益率肯定越低,但是滑点对收益率的影响幅度有多大,是很难从测试报告中看出来的。敏感性测试可自动绘制出滑点逐渐增大时,收益率、胜率、回撤等数据的变化曲线,评估的是模型的实战能力。
实际交易过程中发现,很多模型回测报告中的收益非常好,但是一到实盘运行收益就大打折扣。很多时候是因为回测报告是在固定的手续费和滑点状态下测试的,实战中,一旦手续费或滑点增大,有些模型收益就会大幅降低。敏感性测试就是为了让投资者提前发现策略的这种风险。
14、策略模型,实盘运行和回测效果一致?
答:运行模组,是运行模型的功能模块,支持全自动交易,运行效果和回测是一致的。
模组,支持256个运行单元,实现多品种、多策略、多周期组合交易。模组为每个单元分配独立的资金,用来管理当前策略的持仓和资金变化,各单元独立运行,互不干扰。模组运行时,你需要把你实盘资金账号的资金,分配给各个运行单元,各个运行单元的资金的总和,不能超过账户总资金的。
对于做信号监测的初级量化需求,可以把模型加载到页面盒子里运行。页面盒子支持256个模型的信号监测,信号满足条件会弹出下单提示窗口。页面盒子适合运行那些只包含信号策略语句,不涉及资金管理的基础模型;页面盒子也适用于模型开发阶段,监测和验证基础策略部分的信号计算的有效性。
15、模组新建运行单元,数据起始时间、信号计算起始时间怎么设?
答:数据起始时间根据你模型里对历史k线数据的统计参数来定,例如你的模型用到了20日均线,那么数据起始时间就需要指定为1个月以前的日期(一个月22个交易日)即可。不适合把回测用到的很多年的k线数据都加载到模组的,那会影响模组运行速度。
信号计算起始时间,一般指定下一个交易日,因为你从下一个交易日开始做实盘交易,以前的历史信号对你没有用处的。
[此问答已经被作者于2024/7/4 10:44:22编辑过]
技术人员回复
日期:2021-12-31 9:18
运行优化函数的应用场景
写了sigcheck、sigcheck_min运行优化函数,在k线还没有走完的情况下提前发出信号,K线走完做复核,如果信号消失恢复原来的持仓状态。
sigcheck('A',1)盘中出信号1秒下单,k线走完复核
适用于胜率高的模型,提前下单获得更好的价位,提高模型收益。
k线走完的时候,如果条件仍然满足,多赚了“指令价-这根k线收盘价”这个价差;如果k线走完条件不再满足,牺牲了这个价差以及手续费成本。
***因为这个函数用tick逐笔数据做计算,计算量非常大,回测时间会很长的,需要耐心等待。对于15分钟以上的长周期的模型,写法改为sigcheck_min('A',1),盘中出信号1分钟下单,k线走完复核,用分钟逐笔数据计算模型,减少计算量,回测时间会大幅缩短。
[此问答已经被作者于2024/7/4 9:56:41编辑过]
技术人员回复
日期:2021-12-31 9:46
请不要在此跟帖