本文主要记录量化学习之路,同样也是验证学习成果的方式。
啰哩啰嗦但有用的交代个人学习方式不太一样,对于量化投资,大部人开头的做法都是对python大学特学,但是python其实只是工具而已,帮助我们提高效率和有可能从数据中发现更多投资方向,但不是量化投资的核心。更重要的是在策略思想,这是一个长期累积的过程,有了策略思想,才知道量化的目的,需要如何借助用工具实现这些目的,这个时候python等工具就派上用场了。
学习方式:边用边学所以,我的学习方式是,学一点python基础,比如搞明白数组、元素、对象是什么,他们的区别,常用的一些函数,比如sum、groupy、append、dropna、sort、if等很基础的函数即可,其余的等课程里面有相关的用法再去补课,这样就可以直接学以致用,而不是单纯地学习python,否则会觉得很枯燥。
找一个好老师:chatgpt当然,补课如何补才比较高效也很重要,此时不得不感慨openai的chatgpt大模型,简直是学习的利器,就像是一位24小时陪伴在身边的好老师,随时随地给你解答问题、纠正错误。以前,我的python都在网上搜索,同样的也各种出错,老是找同事朋友帮忙,他们也无法很快地给到帮助,但是chatgpt完美地解决了这个问题。擅用chatgpt!
!
!
找一个好课程:bigquant
我此次用的是bigquant的宽客学院教程,同时也用bigquant量化平台:需要的点此注册,顺便我可以挣点宽币用chatgpt。
BigQuant量化交易平台 - AI人工智能量化投资交易平台
金融分析月度效应是否存在?
月度效应:月度效应指的是市场在不同月份中表现出的统计上的显著差异。根据历史数据的分析,许多市场都存在某些特定月份表现更好或更差的趋势。
一个常见的月度效应是“一月效应”,即一月份市场表现相对较好。这可能是由于投资者在年末进行资金调整、纳入年度绩效考核和税务规划等因素的影响。另一个月度效应是“十二月效应”,即十二月份市场通常表现较好,可能与假日季节性需求和年度绩效平仓有关。
除了一月和十二月效应外,其他月份也可能存在一些特定的市场趋势。例如,股市可能在某些月份中呈现出更大的波动性,或者某些行业在特定月份中表现出更强劲的增长。
需要注意的是,月度效应并非一定会持续或重复出现。市场是动态变化的,过去的统计趋势并不能完全预测未来的表现。因此,在制定投资策略时,应该综合考虑多个因素,而不仅仅依赖于月度效应。
这是chatgpt给出的解释,下面就来分析一下这个效应是否真的存在。
第一步:取数据(2022-02-01至2022-12-31)
这里我用的是可视化,代码也可以取,不过我会用部分模块,就
数据结果如下:
第二步:对各条数据进行按月标记
读取出来的数据很多,但对于月度效应的目标只有date、intrument(股票代码)、return_0有用,因此要单独取这几条数据读取出来的数据是每日的,需要将每条收益数据标记是哪个月的# 统计以上模块读取的数据,并标记其月份df=m13.data.read() #读取数据df1=df[['date','instrument','return_0']] #return_0是收益df1['月份']=df1['date'].dt.month #统计当前收益的月份df1
第三步:计算月度收益期望
月度收益期望=每月的收益平均值=每月收益总和/当月天数
此时,需要用python自定义函数来计算:
def calc_return(df1): #自定义函数,不知道的返回去看python的函数定义课程,还是不明白的问chatgpt mean=df1['return_0'].mean() #计算收益的平均值 df1['收益期望']=mean #新增一个字段,并赋值为平均值 return df1df1=df1.groupby('月份').apply(calc_return) #以月为单位,按照上述平均值计算方式计算每个月的平均值df1.drop_duplicates('月份',inplace=True) #看结果会发现有很多重复值,这个就是去重的df1
第四步:图表表示
看列表可能不是很清楚,数据分析中很重要的是画图,通过图表展示可以让数据结果更清晰。
不知道怎么画图的,请看bigquant的bigcharts文档,抄代码,改一改就行
import bigchartsfrom bigcharts import optsbigcharts.Chart( data=df1[['月份','收益期望']]-1, #收益涨跌=收益率-1,负为跌,正为涨 type_="bar", x="月份" # y=["收益期望"],).render()
从结果看,1月份并不赚钱,但我只取了一年数据,我们把数据量加到5年,看看表现有没有变化?
没什么变化,有空的可以加到10年+试试。
隔夜收益如何?隔夜收益指的是持有某个金融资产(如股票、债券、货币等)过夜期间所获得的收益。在股票市场中,如果投资者在当天购买股票并在当天收盘前未出售,那么这些股票将持有过夜,隔夜期间的股价波动将导致投资者获得或损失隔夜收益。在固定收益市场中,例如债券市场,投资者可能会获得隔夜利息收入。而在外汇市场中,隔夜收益是指持有某种货币对的头寸过夜所产生的利息。总的来说,隔夜收益是投资者在持有金融资产过夜期间所获得的盈利或损失。
先理清一下计算步骤:
1.隔夜收益=今日开盘价/昨日收盘价-1=open_0/close_1-1
2.计算高开和低开的概率(即收益为正和收益为负的概率)
第一步,同样的取数据(2017-02-01至2022-12-31)
方法同上,因为要算的收益,所以这里取了因子值open_0、close_1,看看数据的原貌:
第二步,数据处理
根据目标是计算隔夜收益,所以用代码处理一下(也可以直接在特征列表处理,方式多多):
# 隔夜收益计算df=m13.data.read()df1=df[['date','instrument','close_1','open_0']]df1['隔夜收益']=df1['open_0']/df1['close_1']-1df1
第三步,计算高开、低开的概率
方式一:高开概率=高开天数/总天数(低开同)
#计算高开、低开概率import numpy as npdf1['是否高开']=np.where(df1['隔夜收益']>0,1,0)df1['是否低开']=np.where(df1['隔夜收益']<0,1,0)high_=df1['是否高开'].sum()/len(df1)low_=df1['是否低开'].sum()/len(df1)print(f'高开概率{high_}')print(f'低开概率{low_}')
方式二:高开概率=高开平均值(低开同)
#计算高开、低开概率2import numpy as npdf1['是否高开']=np.where(df1['隔夜收益']>0,1,0)df1['是否低开']=np.where(df1['隔夜收益']<0,1,0)high_=df1['是否高开'].mean()low_=df1['是否低开'].mean()print(f'高开概率{high_}')print(f'低开概率{low_}')
看起来低开概率更高,尾盘买、开盘卖恐怕不能带来更好收益,那么反过来开盘买、第二天收盘卖呢?可以自己写一下,我贴个我计算的结果:
还是亏钱的概率大了一点点!