行为金融学是金融学、心理学、行为学、社会学等学科相交叉的边缘学科,力图揭示金融市场的非理性行为和决策规律。行为金融理论认为,证券的市场价格并不只由证券内在价值所决定,还在很大程度上受到投资者主体行为的影响,即投资者心理与行为对证券市场的价格决定及其变动具有重大影响。行为金融学本质上是研究人们在市场上的真实行为,而不是按照随机漫步理论上的行为。心理学以及社会学和人类学的社会科学学科为研究真实的人在市场中的行为提供了模型。使用基于这些学科的研究揭示了人类行为的可预测模式。
曾看到一句话解释传统金融学与行为金融学非常好:传统金融学研究的是市场“应该是”什么样,而行为金融学研究的是市场“实际是”什么样。在看待任何领域的事物时,“应该是”的视角帮我们把握长远基准,“实际是”的视角帮我们理解当下发生的事情。
理论基础 要深入系统的了解行为金融学,首先需要了解行为金融学的三大理论基础:有限理性假说、有限套利以及前景理论。
有限理性假说 传统金融学假设人都是“理性人”,其基本特征是每一个从事经济活动的人所采取的经济行为和决策都是用最小的成本代价去获得最大的经济利益。然而,因为人的知识、时间 ...
1 确定与随机问题设你和朋友玩一个游戏,规则如下:
1、桌子上有7颗棋子,你们二人轮流拿走一定数量,最终谁先拿走最后一颗棋子的人获胜;
2、你的朋友相信随机,在他的回合里,他可以投掷一枚6面子,并拿走对应数目的棋子(如果剩下的棋小于这个数目则全部拿走);
3、你不喜欢随机,因此在你的回合里可以自行决定拿走1颗棋子或2颗棋子,但是不能不拿,同时你可以选择先走或后走那么在最优决策的情况下你的获胜几率是多少?
解答首先最优决策的情况一定是选择后手,且每次只拿1颗棋子,除非到你的回合时场上只剩1-2颗棋子,此时可以全部拿走获胜,因为在没有把握决胜时,给对方回合留的棋子越少,你失败的概率更高。
定义轮到你时,如果还剩$n$个棋子,胜率为$p_n$。则易得:$p_1 = p_2 = 100%$
$n=3$时,你拿1,对方拿1,你再拿1才能胜利,即:$p_3 = \frac{1}{6}p_1=\frac{1}{6}$
同理$p_4 = \frac{1}{6}p_1+\frac{1}{6}p_2=\frac{2}{6}$
可以得到规 ...
为什么中性化?在因子投资的研究中,深入探索和理解因子的作用至关重要,包括对因子的检验和因子收益的计算等关键步骤。而为了提高因子的表现,降低因子在各个维度的风险暴露,我们通常会遵循一个去极值、标准化、中性化的标准流程。其中,去极值、标准化都很容易理解,那么什么叫中性化,又如何中性化呢?
我们一般会针对因子在行业上的暴露中性化,有些因子与特定行业关联紧密,例如银行业或制造业。当我们仅仅通过回归分析得出一个因子与收益的关系良好,但没有考虑到不同行业之间的差异时,我们可能过早得出这一因子非常有效的结论。
市值也是一个需要格外留意的因素。在过去,小市值股票通常表现出更高的平均收益,而如今大市值股票可能更具吸引力。若某因子在小市值股票中表现出色,我们需要搞清楚,是因为市值本身的作用还是因为因子本身的效用。市值中性化有助于解决这一谜团。
当然我们也可以对更多的风险因子进行中性化,比如Barra的十个风险因子就是常用的用于风险中性化的指标。
为什么要中性化?用生活中的场景举例,通常我们可以用价格评价一个苹果的好坏,毕竟一分价钱一分货,但是进口的苹果一般会比国产贵不少,能说明进口苹果一定好吗?显然不行! ...
引用站外地址
Moderate-risk-model
6YoungHome
适度冒险因子由于本因子需要用到分钟级别的量价数据,全部得到数据量太大,难以保存与下载。因此,我只选取了其中299只股票2021年的数据进行简单的实现。
数据准备123456789import pandas as pdimport jsonimport osimport zipfileimport numpy as npfrom tqdm import tqdmfrom mytools import backtestimport warningswarnings.filterwarnings("ignore")
12with open("../data/stock_pool.json", 'r') as f: stock_pool = jso ...
引用站外地址
Trifactor-model
6YoungHome
策略简介利用Fama三因子模型构建的A股周度百股策略。
环境与数据准备123456789import numpy as npfrom tqdm import tqdmimport pandas as pdimport osimport gcimport warningswarnings.filterwarnings('ignore')from quantools import backtest
1234567891011stk_data = pd.read_csv("../data/stk_data.csv")stk_data['close_date'] = pd.to_datetime(stk_data['close_date'] ...
什么是RSI相对强弱指数(Relative Strength Index, RSI)股票市场是技术分析中常使用的动量指标。它能够衡量股票近期价格变化的速度和幅度,从而评估该股票价格是否被高估或低估。
RSI不仅可以发现超买和超卖的股票,还可以发现准备进行价格趋势逆转或纠正回调的股票;当然它也可以提示投资者在何时买入和卖出。一般来说,RSI读数达到70或以上表示超买情况,而读数达到30或以下表示超卖状态。
RSI比较了股票在价格上涨的日子和价格下跌的日子的强度。将这种比较的结果与价格走势相关联可以让交易者了解一种股票可能的表现。RSI与其他技术指标一起使用,可以帮助交易者做出更明智的交易决策。
RSI的计算方法$$RS = \frac{ts_mean(gain,14)}{ts_mean(loss,14)} \RSI = 100-\frac{100}{1+RS}$$
Python计算与绘图为了绘制一只股票的RSI线,我们可以从Tushare方便的下载股票高开低收量等数据。
12345678910import tushare as ts# 获取股票数据api = ts.p ...
简介与计算方式移动平均收敛/发散线(Moving Average Convergence/Divergence,MACD)是一种趋势跟踪的动量指标,它通过股票价格的两个指数移动平均线计算得出,一般来说,MACD线是通过股票收盘价12日移动平均值减去26日移动平均值。
此外,通过计算MACD的9日移动平均值,将之定义为“信号线”。将MACD线与信号线绘制于同一张图重,可以发现有效的买入、卖出信号:当MACD线穿过信号线上方时买入;当MACD线穿过信号线下方时卖出。该指标可以用多种方式解释,最常见的方法是研究MACD指标的交叉、背离以及快速上升和下降。$$MACD = SMA(close, 12) - SMA(close, 26) \Signal = SMA(MACD, 9)$$
使用注意用MACD指标分析市场时,有几个关键要点一定要注意:
MACD指标的计算方式:一般来说,MACD线是通过股票收盘价12日移动平均值减去26日移动平均值。信号线是MACD线的9日移动平均。但是这是美国人在美股市场中发现的规律,在中国用什么样的参数合适,在其他金融市场 ...
因子分类 第一类叫做量价因子,第二类叫做基本面因子,第三类叫另类因子。而里面量价因子大概是占60%的左右,20%是基本面因子,剩下20%是另类因子
量价因子主要是有哪些数据去产生的呢?一般是来源成交量的数据,包括每分每秒的这个这个股票的价格、资金流、以及各类K线等技术指标,包括动量指标、周期指标、成交量指标、价格指标等。
基本面因子则是大家说的财务报表、营收、券商报告、分析师预期等,一般都是来源于这个包括万得、朝阳永续的数据库。而这种数据,它的一个时间更新频率一般比较长,一般是以这个月频或者季度的数据进行更新,不像价格每分每秒都在发生改变。
还有就是另类因子,包括社交舆情,电商数据,门店数据这样的一些因子
基本面因子基本情况 比如:盈利能力因子:资本收益率(ROE),资产回报率(ROA),主营业务毛利率,主营业务利润率,净利率。像成长,盈利,估值这些都可以划到基本面因子里面去。
基本面因子的解释的参考资料https://www.bilibili.com/video/BV1TE41117pJ?from=search&seid=13977766754480028 ...
下载数据集下载“fashion_mnist”数据集,进行分类
123456789101112131415161718192021import torchvisionfrom torch.utils import datafrom torchvision import transformsdef load_data_fashion_mnist(batch_size, resize=None): """下载Fashion-MNIST数据集,然后将其加载到内存中""" trans = [transforms.ToTensor()] if resize: trans.insert(0, transforms.Resize(resize)) trans = transforms.Compose(trans) mnist_train = torchvision.datasets.FashionMNIST( root="./data", train=True, ...
模拟数据集模拟一个$y = w_1x_1 + w_2x_2 + b + \epsilon$的数据集
1234567891011121314151617181920from torch.utils import dataimport torchdef init_linear_data(w, b, nums_example): """模拟一个有噪声的多元线性回归数据""" X = torch.normal(0, 1, (nums_example, len(w))) y = torch.matmul(X, w) + b y = y + torch.normal(0, 0.01, (nums_example, len(w))) return X, torch.reshape(y, (-1, 1))def load_array(data_arrays, batch_size, is_train=True): #@save """构造一个PyTorch数据迭代器 ...