欢迎访问chatgpt中文教程网,学习chatgpt相关知识,以下是正文内容:
使用ChatGPT开发股票量化策略
【本文只分享策略的原理,不推荐实盘交易】
TL;DR
使用chatGPT可以提高编写策略的效率。但对于不了解量化或编程的人来说,只使用chatGPT难以开发一个可实盘的量化策略
环境准备
joinquant的账号(注册地址) ChatGPT账号(注册地址)[本次使用的是chatGPT4,chatGPT3.5也可以]
策略
本次要实现策略来源于德邦证券的一篇研报《金工小市值专题之一:小市值策略初探》。根据研报的描述,小市值策略的投资逻辑主要有以下四点
规模溢价:通过统计发现,中国A股市场中,公司规模和股票风险溢价存在负相关关系[1]; 卖空限制:由于中国股市没有完善的卖空机制,导致在一定时间范围内,股票的价格会更容易被错误定价; 投资者结构:中国股市中散户比例比较高,而散户对小市值股票会更加关注; **壳价值**[2]:由于中国股市IPO采用的是核准制,上市的成本和要求都比较严格,因此一些公司会选择借壳上市,而借的这个壳,一般是会选择收购一些小市值的上市公司;
原始小市值策略也比较简单,即从基础股票池中筛选出流通市值最小的100只股票进行买入。如果持有的股票不在这100只股票里,则卖出。每个月调仓一次。基础股票池的条件为:
股票上市满1年; 不属于ST、*ST的股票; 股票换仓日尾盘非涨停; 非注册制、非北交所的股票;
开发流程
其实也没有什么好说的,毕竟chatGPT比较智能,就直接把你的需求跟他说就好,你能说的越具体(prompt工程),他写的代码就能越正确。比如在描述策略的时候,对话是
现在我需要在joinquant平台上面实现一个量化策略,具体描述如下:
交易市场: 中国A股市场
策略逻辑: 根据以下条件筛选出股票候选池:1.排除 ST 股、*ST 股;2. 排除北交所股票;3. 排除上市不满 20 日的次新股票。然后从候选池中选取流通市值最小的100只股票作为交易候选池。如果持有的股票不在交易候选池中则卖出。如果交易候选池的股票没有持有,则使用可用资金平均进行买入
调仓频率: 每个月的首个交易日
第一部分对话 - 背景设定
第一部分对话是为了确认chatGPT是否有joinquant平台开发的背景知识,它给了我一个示例策略的代码。不过这份代码在joinquant上面运行的时候是报错的。错误的原因是chatGPT编造了一个joinquant平台下单的API:order_target_percent
,虽然把错误信息给到chatGPT后,它能识别出错误的原因,但是给出来新代码仍然是错误的。
这个时候就需要提供更多的信息,可以直接从joinquant平台上面找到下单的接口文档然后贴进去。这次chatGPT能够识别出需要的下单函数,并且给出可运行的代码。
第二部分对话 - 策略开发
第二部分对话开始开发小市值策略,chatGPT根据之前的描述给出了对应的代码,从结构上来看是正确的。但是遇到的问题和之前是一样的,chatGPT仍然会编造各种API,导致了报错,处理的方式和之前一样
最终chatGPT给出了在joinquant平台上面一个可运行的策略代码(代码地址)。整体逻辑和描述的基本一致,但是有些细微的地方实现还有问题,具体为:
逻辑错误:get_stock_pool函数只取了100只股票来作为候选池,实际上应该取所有满足条件的股票; 未来函数:使用了get_price函数在开盘时间点来获取当天的数据,这个在当前策略下不会影响到回测结果,但是该策略是无法实盘运行。并且chatGPT未能识别这个问题;
策略表现
收益概述 | |
---|---|
回测时间 | 190101 - 230427 |
策略收益 | 80.59% |
年化收益 | 15.13% |
超额收益 | 36.32% |
最大回撤 | 19.40% |
总结
亮点:
将自然语言转变为代码:能根据需求的文字描述生成代码 纠错:贴出报错信息后能够找到报错的原因以及改正代码,和开发时候的debug有点像 接受上下文信息:不是简单的一问一答的方式 支持中文
缺点:
领域知识缺失:由于chatGPT是通用领域的模型,对于特定的领域知识,需要额外训练 无中生有:受第一点的影响,经常编各种不存在API 回答生成的内容有长度限制,如果代码过长就得分成好几段输出 chatGPT4限制3小时25个对话。。。。。
优化思路:
借助langchain[3]框架 利用openai平台提供的fine-tuning API[4]
参考资料
崔劲,殷霞,豁秋菊: CAPM模型在中国资本市场的改进研究——基于规模溢价的实证分析.
[2]屈源育,沈涛,吴卫星: 上市公司壳价值与资源配置效率
[3]langchain: https://github.com/hwchase17/langchain
[4]fine-tuning: https://platform.openai.com/docs/guides/fine-tuning