73rd Meetup
由small_q创建,最终由small_q 被浏览 125 用户
MeetUP直播答疑 时间:4月11日(周四)19:00 直播地址:B站(https://live.bilibili.com/21929948)
以下问题解答,对应源码请访问子目录, 本次MeetUP 直播答疑大纲如下:
1、如果需要计算一个表,需要很久的时间,可以提交定时任务后台计算,那如何读取表的计算后内容?
https://bigquant.com/codeshare/2b7b68e8-36ac-49d5-bc08-cee8d47a640a
2、请讲一下stockranker的滚动训练,滚动训练是一个循环每次滚动周期训练完成后,stockranker是否需要保存模型,下次滚动训练是否需要调取已经保存的模型继续训练?如果不要保存模型,stockranker不需要配置就默认增量训练吗?滚动训练怎么固化模型呢?
滚动训练(Rolling Training)是一种用于模型训练的策略,尤其在量化投资领域中非常适用。在这个领域,市场状况持续变化,新的数据持续产生,因此模型需要不断地更新以适应新的市场环境。滚动训练就是为了解决这个问题而设计的。
滚动训练的基本步骤如下:
- 初始训练:首先,选择一个时间窗口内的历史数据作为初始训练集,用这些数据训练出一个初始模型。
- 滚动窗口:在之后的时间点,不断地移动训练数据的时间窗口。这个窗口可以是固定长度,也可以随着时间扩大。
- 增量更新:在每个新的时间窗口,用最新的数据更新模型。更新的方法可以是重新训练整个模型,也可以仅仅对现有模型进行增量训练。
- 回测评估:在每次模型更新后,使用模型在当前窗口之后的数据上进行回测,以检验模型的表现。
- 模型部署:如果模型的回测结果令人满意,可以将模型部署到实际的交易中。
滚动训练的好处包括:
- 适应性:模型可以不断适应新的市场条件,减少模型过时的风险。
- 减少过拟合:通过频繁更新模型,可以减少模型对历史数据的过拟合。
- 性能监控:可以持续监控模型的表现,及时发现潜在的问题并进行调整。
然而,滚动训练也有其挑战:
- 计算成本:频繁训练模型需要更多的计算资源。
- 参数选择:需要仔细选择滚动窗口的大小、更新频率等参数。
- 模型稳定性:模型需要在适应新数据的同时保持一定的稳定性,以避免在实际交易中表现过于波动。
增量训练(Incremental Training)和全量训练(Full Training)是机器学习中的两种不同的训练方法,它们在处理数据和模型更新方面有所不同。下面是它们的主要区别:
- 数据使用:
- 增量训练:在增量训练中,模型会逐步使用新数据进行训练。这意味着模型不需要再次从头开始训练,而是在已有的模型基础上,利用新数据进行更新和学习。这种方法适用于数据实时到达的情况,或者当数据量太大不可能一次性全部加载到内存中时。
- 全量训练:全量训练通常指的是从头开始训练模型,每次训练都使用全部可用的数据集。这种方法保证了模型能够看到所有的训练数据,但也可能需要更多的计算资源和时间。
- 计算资源:
- 增量训练:因为是逐步训练,通常来说,增量训练需要的计算资源相对较少,因为它一次处理的数据量较小。
- 全量训练:需要一次性处理整个数据集,因此通常需要更多的内存和计算能力。
- 模型更新:
- 增量训练:模型是持续更新的,可以灵活适应新数据的变化。但是,如果不小心处理,可能会遇到模型忘记之前学习的知识的问题(灾难性遗忘)。
- 全量训练:每次更新模型时,都是基于完整的数据集重新训练,因此模型能够保持对先前数据的记忆。
3、关于交易引擎BigTrader问题:根据其接口函数 initialize=m1_initialize_bigquant_run, before_trading_start=m1_before_trading_start_bigquant_run, handle_tick=m1_handle_tick_bigquant_run, handle_data=m1_handle_data_bigquant_run, handle_trade=m1_handle_trade_bigquant_run, handle_order=m1_handle_order_bigquant_run, after_trading=m1_after_trading_bigquant_run, 可见,它应该遵循了大多数量化交易回测引擎运行逻辑的:即回测引擎启动时先进行初始化,然后进入以交易日为单位的运行循环的。交易日循环首先运行盘前处理函数,再进入K线(或tick频率或其他)处理函数,收盘后运行盘后处理函数,周而复始。但BigQuant模拟或实盘交易,为什么要在前一日晚上运营策略程序,发出交易信号?貌似只能做日频交易,不能做更细颗粒度的交易或风险管理,不够精确啊!后续是否会改变这种现况?
答:前一日晚上有了前一日的市场行情数据就能通过策略计算出第二天的交易信号,分钟级别的模拟交易在我们新版的bigtrader中是可以支持了。
4、使用复杂一点的多表SQL或机器学习时,所使用AIStudio的默认资源规格进行运行,往往是会遇到资源不够而崩溃,如何预估所需要多少资源恰到好处,盲目设置浪费宽币而没完成任务!请问有什么诀窍吗?或系统能否自动适配资源,达到最优化利用?
答:我们在编写代码和调试代码的时候可以把测试数据量控制小一些,代码编写成功后在切换相应的资源去进行机器学习等。资源不够而崩溃,往往就是内存溢出了(oom)所以提前预估一下自己的数据量选择一个相应大小的内存资源。
5、新版的实盘都有哪些新功能或改进,预计什么时候上线?
答:新版实盘会是一个在用户windows pc上运行的交易终端,会在用户运行模拟交易后,实现交易信号的本地生成和执行,可以解决原有的策略无法运行、BQ集群和券商信号不同步、需要手动导入导出等问题,预计会在4月中旬逐步开始公测,现在可以在我的交易-策略组合界面先行创建组合,加入实盘waitlist,在内测结束后,运营小伙伴们会按顺序邀请大家对实盘终端进行公测
6、两个因子分别做单因子回测时,发现他们存在明显的涨跌配对互补,如何在多因子训练时体现这种互补,使多因子回测结果回撤更小,收益更稳定?难道只能靠海量搜索和网格或者随机挖掘?有没有原理或者经验可以指导探索方向?(这里先不考虑两个单因子策略的配对交易,只考虑融合这种多组互补现象的多因子组合策略)
答:有一种方法是分别用这两个因子选股,然后把选出的股票一起买入或卖出。做出来的效果也是两个单因子策略的配对交易的效果呀,为什么就不直接用配对交易呢?
当你在多因子模型中融合两个具有互补特性的单因子时,目标是将这种互补性质转化为更稳定的回报和更小的回撤。这可以通过以下几个步骤来实现:
因子正交化:在融合因子之前,可以对因子进行正交化处理,确保它们之间的独立性。这可以通过统计方法如主成分分析(PCA)实现。正交化后的因子可以减少冗余信息并减少因子之间的多重共线性问题。
因子权重优化:使用风险模型和优化框架来确定每个因子在多因子模型中的权重。权重可以通过最大化夏普比率、最小化波动率或其他优化目标来确定。在这个过程中,可以考虑到因子之间的互补性,以实现更好的风险调整后回报。
因子组合构建:结合因子得分和权重构建多因子组合。可以使用线性或非线性的方式来融合因子得分。非线性方法,如机器学习模型(例如决策树、神经网络等),可以捕捉因子之间的复杂关系。
风险管理:通过动态调整因子权重来管理风险。在市场环境发生变化时,可能需要重新评估因子的权重,以确保互补性。这种动态调整可以基于市场波动率、相关性变化或其他风险预警指标。
回测和调整:进行多因子策略的历史回测,评估策略的性能。基于回测结果,对因子权重和组合规则进行调整,以优化策略表现。
机器学习方法:可以使用机器学习算法来自动识别和组合互补因子。例如,集成学习方法(如随机森林、梯度提升树)可以有效地结合多个因子的预测能力。
经验和直觉:经验和市场直觉也是设计多因子模型的重要组成部分。了解每个因子在不同市场条件下的表现可以帮助你更好地调整它们在组合中的权重。
模型稳健性测试:通过各种压力测试和极端情况测试来确保模型的稳健性。例如,可以使用历史的市场危机期间的数据来测试模型的表现。
7、同一种风格,回测和实际交易收益曲线有大幅回撤,也有大幅上涨,大量的多因子组合也证实这个事实,有办法避开回撤吗?多策略组合择时?还是新因子的发掘继续多因子组合?
答:避免过拟合:确保模型的稳健性,对历史数据的拟合不要过度细致,使用样本外测试,交叉验证等方法验证模型的稳定性。
动态因子权重:通过不同市场阶段调整因子的权重,使得因子组合能够适应市场的变化。
多策略组合:将不同风格、不同类型的策略组合起来,利用它们之间的低相关性降低整体组合的波动性。
择时:虽然市场择时非常困难,但可以通过宏观经济指标、市场情绪指标等信号,对市场风险进行一定程度的预判,并相应调整仓位。
风险管理:设置止损点、风险敞口限制、最大回撤控制等,通过严格的风险管理来减少回撤。
新因子的发掘:不断寻找和测试新的因子,以保持策略的新鲜度和适应性。但需要注意的是,新因子也需要经过严格的验证,以确保它们的有效性。
流动性管理:在模型中考虑资产的流动性,避免在流动性不足时进行大规模交易,增加滑点损失。
考虑交易成本:在回测时考虑更为真实的交易成本,包括佣金、印花税、滑点等,以尽量接近实际交易情况。
机器学习和人工智能:利用机器学习和人工智能技术,尝试识别市场模式和隐藏的结构性变化,但同时警惕拟合的风险。
持续监控和调整:市场是动态变化的,需要持续监控策略表现,及时调整策略参数或逻辑以适应市场的变化。
8、因子挖掘时似乎发现量价财务技术等基础因子下,遗传或者神经网络构造出新的衍生因子回测时,都有缺陷,目前有几百个的样本,应该感觉不是个人点背!难道消除现有的缺陷只能是引入新的基础因子吗?
答:这可能是因为多种原因:
- 过拟合:当使用复杂的机器学习模型(如神经网络)或者遗传算法对历史数据进行因子挖掘时,很容易产生过拟合现象。
- 样本外验证不足:如果仅仅基于有限的历史数据进行模型训练和验证,可能会导致对未来数据表现的误判。为了确保模型的泛化能力,需要进行充分的样本外测试,也就是在不同的时间段上验证模型的有效性。
- 结构性变化:金融市场是动态变化的,历史上有效的因子在将来可能不再有效,这可能是由于市场结构的变化或者市场参与者行为的改变。
为了解决这些问题,可以采取以下措施:
-
简化模型:减少模型的复杂性,使用更简单的因子或者模型以减少过拟合的风险。
-
增加样本数量:增加训练样本的数量和多样性,使用不同市场环境和时间段的数据进行训练和测试。
-
经济逻辑验证:确保因子的设计有一定的经济逻辑或市场解释,而不仅仅是纯粹的数据驱动。
\
9、我想用stockranker的排序算法预测单一个股如何实现,之前总是提示错误。
答:是训练集和预测集都只有一个股票吗?stockranker实现不了,因为stockranker是排序算法,一个标的每天的排名都为1了。
\n
————————————————————————
开通PLUS会员,系统学AI量化投资(https://bigquant.com/service/plus)
- 解锁全平台所有课程/文章/源码/研报/白皮书,系统学AI量化;
- 加入会员群(6位老师+1位助教)在线答疑,与数百位量化投资者在线交流;
\
- 输入余文韬老师邀请码:khtj41 (优惠100元)
- 联系客服小Q:索要优惠券(优惠300元,总共优惠400元)
\