楼主: 大多数88
1965 46

[量化金融] 图论在投资中的应用 [推广有奖]

11
kedemingshi 在职认证  发表于 2022-6-11 14:13:15
                     数据集的中值也可以测量中心趋势,但计算方法是将所有数字按数字顺序排列,每次删除一个值,直到找到一个中心值,或者如果有偶数的值,则删除剩余两个值的平均值。-12-中位数无法解释较低数字的聚类,即使其他值可能很遥远。  当向用户建议阈值时,我们如何确定哪个阈值将提供适当数量的边?为了做到这一点,我们将使用标准偏差,以确保在图形中获得一定百分比的边。数据集的平均值减去一个标准偏差提供了一个图表,该图表保留了16%相关性最小股票的边缘。平均值加上一个标准差给出了一个图表,显示了16%相关性最强的股票之间的联系。标准偏差公式基于平均偏差,即从每个数据值到平均值的距离的平均值。    不相关  相关的  — 13-为了消除绝对值,让我们对分子进行平方运算,因为绝对值很难处理较大的数字和数据集。这为我们提供了测量平方偏差的方差公式。使这个偏差为它的平方根。             这个公式可以重写为求和函数,而不是分子。 如果你看过标准偏差公式,你可能会问,为什么上面的分母是n而不是n-1。

12
mingdashike22 在职认证  发表于 2022-6-11 14:13:19
这就是所谓的自由度,它意味着如果数据集中没有最终值,就有可能找到它。如果我们事先知道数据集的平均值,您只需要n-1个数据点,就可以计算出最终值。 — 14 —  5.           调查5.1。多元化还是不多元化?5.1.1.     项目开发我调查的第一部分将试图确定多元化投资组合是否比单一投资组合更具回报效率。要做到这一点,我们必须编写一个python程序,该程序将根据输入股票之间的相关性创建一个图表。我开始编写这个程序,并一直需要以下库。8、从pandas\\u datareader导入数据作为pdr 9。将熊猫作为pd 10导入。将numpy作为np 11导入。将fix\\u yahoo\\u finance作为yf 12导入。导入matplotlib。pyplot为plt 13。将统计信息作为统计信息14导入。将networkx作为nx导入,然后我们将tickers的输入转换为字符串数组,以及数据集的开始和结束日期。18、股票价格=[]19。20.ticker\\u input=输入(“请逐个输入您要使用的股票行情。完成后只需键入‘完成’!\\n”)21。22、当ticker\\u输入时!=“完成”:23。股票行情。追加(str(ticker\\u输入))24。ticker\\u输入=输入()25。26、start\\u date=输入(“在此处输入开始获取数据的日期(请将其转换为YYYY-MM-DD格式)\\n”)27。28.end\\u date=输入(“在此输入我们将停止从中获取数据的日期(请将其转换为YYYY-MM-DD格式)\\n”)29。30.#从Yahoo 31下载数据。

13
nandehutu2022 在职认证  发表于 2022-6-11 14:13:22
数据=pdr。DataReader(tickers,“yahoo”,start\\u date,end\\u date)[“Adj Close”]观察结果数据表明,比较美元价格变化并不准确,因为它不考虑起始价格。例如,A股开盘价为0.01美元,收盘价为0.02美元,B股开盘价为1000美元,收盘价为1001美元。尽管B股以美元计价上涨了100倍,但A股价格上涨了一倍,而B股只上涨了十分之一。将1000美元投资于A股将变成2000美元,而将1000美元投资于B股将变成1001美元。熊猫有一个内置的功能,可以改变到百分比变化。百分比变化的公式如下所示,因为您需要它前面的值,所以集合中的第一个值将变为错误,因此我们使用pandas中的内置函数将其删除。33.#将值更改为均匀测量的百分比更改34。数据=数据。pct\\U更改()35。36.#删除第一个百分比的更改和丢失的数据作为其NaN 37。数据=数据。dropna(axis=0,how=\'any\',thresh=None,subset=None,inplace=False)现在我们可以使用公式找到数据集之间的相关性!  45.#定义函数相关性,可用于查找不同股票的两个不同数据集之间的相关性46。def corr(x,y):47。x\\u平均值=x.平均值()48。y\\u平均值=y.平均值()49。分子\\u和=0 50。分母\\u sum\\u x=0 51。分母\\u sum\\u y=0 52。对于范围内的i(len(x)):53。分子\\u sum+=(x[i]-x\\u平均)*(y[i]-y\\u平均)54。分母\\u sum\\u x+=(x[i]-x\\u平均值)**2 55。分母\\u sum\\u y+=(y[i]-y\\u平均值)**2 56。相关性\\u值=(分子\\u和/((分母\\u和x*分母\\u和y)**(0.5)))57。返回correlation\\u值58。

14
nandehutu2022 在职认证  发表于 2022-6-11 14:13:26
59.     60.  相关性=np。零((len(tickers),len(tickers)))61。相关性列表=[]62。63.#在程序64的开头为所有输入的股票行情器生成相关矩阵。对于范围(0,len(tickers))内的ticker:65。对于范围内的tickerpair(0,len(tickers)):66。if ticker!=机票号码:67。相关性【ticker,tickerpair】=更正(数据[:,ticker],数据[:,tickerpair])68。相关性列表。追加(corr(data[:,ticker],data[:,tickerpair])-16-现在我们知道了相关函数的工作原理。让我们仔细检查一下程序是否也可以使用较大的输入。结果,AAPL(苹果)、GOOG(字母)、CX(Cemex)、FB(Facebook)和T(AT&T)的输入产生了以下相关矩阵。[[0.                  0.29776174  0.41549919  0.48168096  0.11685589] [0.29776174  0.                  0.28608064  0.3142884    0.20039596] [0.41549919  0.28608064  0.                  0.65710632  0.06741857] [0.48168096  0.3142884    0.65710632  0.                  0.11252147]   [0.11685589  0.20039596  0.06741857  0.11252147  0.                ]]  该矩阵的格式已经正确,可以创建具有节点和边的图形,但是,必须更改这些值。下面的代码片段将相关值与用户选择的阈值进行比较,并基于此将值更改为1,表示有边,或0,表示没有边。相关矩阵[[0.0.2 0.4 0.4 0.1][0.2 0.2 0.3 0.2][0.4 0.2 0.0.6 0.1][0.4 0.3 0.6 0.0.1][0.1 0.2 0.1 0.1 0。]]多元化&阈值为0.21邻接矩阵[[0.1.0.0.1][1.  0.  1.  0.  1. ]     [0.  1.  0.  0.  1. ]     [0.  0.  0.  0.  1. ]     [1.  1.  1.  1.  0.  ]]104

15
何人来此 在职认证  发表于 2022-6-11 14:13:29
#使前一个相关矩阵成为股票的邻接矩阵,并考虑相关性和阈值。105、虽然阈值!=“完成”:106。对于范围(0,len(tickers)):107中的ticker。对于范围内的tickerpair(0,len(tickers)):108。if ticker!=机票号码:109。如果user\\u preference==“D”:110。如果abs(corr(data[:,ticker],data[:,tickerpair])<阈值:111。邻接矩阵[ticker,tickerpair]=1 112。如果abs(corr(data[:,ticker],data[:,tickerpair])>阈值:113。邻接矩阵[ticker,tickerpair]=0 114。如果user\\U preference==“U”:115。如果abs(corr(data[:,ticker],data[:,tickerpair])>阈值:116。邻接矩阵[ticker,tickerpair]=1 117。如果abs(corr(data[:,ticker],data[:,tickerpair])<阈值:118。邻接矩阵[ticker,tickerpair]=0如果用户寻找一个不相关的投资组合,并在被询问时键入“D”来表示,则阈值下的值将更改为1;如果用户寻找一个相关的投资组合,并且之前键入了“U”,则阈值上的值将设置为1。-17-用眼睛查找最大的完整子图非常困难,因为有比我们正在搜索的一个子图中的边多得多的边,而且节点不是多边形,所以我们需要一个函数来帮助用户突出显示最大的完整子图。幸运的是,networkx有一个用于完整子图或派系的内置函数,它将在一个较大的图中按从最小到最大的顺序列出所有完整子图。

16
mingdashike22 在职认证  发表于 2022-6-11 14:13:32
我们可以选择完整子图列表中的最后一项,在绘制整个图之前,将其中的标记颜色更改为其他颜色。129.complete\\u graphs=[s代表nx中的s。如果len(s)>1,则枚举所有\\u团(H)130。max\\u complete\\u graph=complete\\u graphs[长度(complete\\u graphs)-1]131。打印(max\\u complete\\u graph)132。133、颜色映射=[]134。对于范围内的索引(0,len(tickers)):135。如果max\\u complete\\u图中的tickers[索引]:136。color\\u贴图。追加(\'#C21807\')137。如果标记器[索引]不在max\\U complete\\U图中:138。color\\u贴图。附加(“黑色”)139。140.nx。draw(H,node\\u color=color\\u map,with\\u labels=True,node\\u size=450,font\\u size=7,font\\u color=“white”)在使用多组计时器进行测试后,我意识到在没有数据信息的情况下很难找到完美的阈值,因此我决定向用户提供方法和中介来帮助他们。72.#打印用户73的平均相关性。打印(“\\n平均相关性为”,统计。平均值(correlations\\u list))74。75.#打印用户76的平均相关性。打印(“\\n中位数相关性为”,统计。中位数(relations\\u list))我又测试了几次,发现仍然很难确定最佳阈值。从这里开始,我决定使用标准相关性,以确保在图上显示16%的最低相关性(如果用户正在搜索多样化/不相关的股票),或16%的最高相关性(如果用户正在搜索未多样化/相关的股票)。-18 —82.  #查找并利用标准偏差为给定数据集83向用户建议阈值。对于范围内的i(0,len(correlations\\u list)):84。标准偏差和+=(相关性列表【i】-统计。平均值(相关性列表))**2 85。

17
可人4 在职认证  发表于 2022-6-11 14:13:35
标准偏差=((standard\\u deviation\\u sum/(len(correlations\\u list)-1))**(0.5)),即使使用了统计数据和标准偏差,我发现它仍在产生不太可能在第一次创建理想投资组合的结果。由于需要多次试验才能找到最佳阈值,我决定制作一个交互式图表。它将向用户提供数据的平均值和中间值,以及使用标准偏差的建议阈值,就像以前一样,用户将输入一个值,图形将显示出来。但是,如果阈值没有产生所需的结果,他们可以关闭窗口并输入新的阈值,而无需重新输入以前的所有输入。选择你的投资组合将包含的股票的程序已经完成。下一个计划的目的是模拟已开发投资组合的价格,并将其与其他股票进行比较,以衡量策略的有效性。我开始使用与第一个程序相同的输入系统。之后,程序继续计算投资组合的起始价格,方法是将投资组合中每只股票的一股价格相加。为了创建准确的结果,投资组合必须以与之进行比较的指数相同的方式进行加权。道琼斯指数采用价格加权法进行加权,该方法包括根据公司股价对公司进行排名。这种方法确实考虑了股票分割,我们通过使用调整后的收盘价避免了这种情况。这种方法也不能解释这样一个事实,即10美元股票的1美元变动要比100美元股票的1美元变动重要得多。-19-标准普尔500指数采用市值进行衡量,其中公司根据指数持有的流通股数量进行排名。

18
可人4 在职认证  发表于 2022-6-11 14:13:38
为了模拟这一点,创建了一个关联列表,该列表定义了一个股票代码,其中包含标准普尔500.139所持股票的数量#函数,该函数计算给定行号的投资组合中一支股票的起始价格。def portfolio\\u calc(世界其他地区):141。价格=0 142。如果index\\u输入==“SPY”:143。对于范围(0,len(tickers))中的列:144。价格+=(数据[股票代码[列]]。iloc[行]*权重字典[股票代码[列]])145。sum\\u of\\u shares+=权重\\u字典[标记器[列]]146。147、如果index\\u input=“^DJI”:148。价格=数据。总和(轴=1)[行]/长度(标记)149。如果index\\u输入!=“^DJI”和“SPY”:150。价格=数据。总和(轴=1)[行]151。返回价格要求用户输入将与投资组合进行比较的指数。创建了一个新的数据框架,其中总投资组合价格为一列,指数价格为同一日期的另一列。index\\u input=str(input(“您希望将您的投资组合与什么指数进行比较?\\n”))137。index\\u data=pdr。DataReader(index\\u input,\'yahoo\',start\\u date,end\\u date)[\'Adj Close\']156。index\\u list=[]157。公文包列表=[]158。159、对于范围内的r(0,len(数据索引)):160。index\\u列表。追加(index\\u data.iloc[r])161。portfolio\\u列表。追加(portfolio\\u calc(r))162。比较=pd。数据帧(index=data.index)164。比较[\'Index Price\']=索引列表165。比较[\'Portfolio Price\']=Portfolio\\u列表结果数据框再次以美元为单位显示数据,因此我们必须再次将其更改为百分比变化,以便将我们的投资组合的变动与所选指数进行准确比较。我们创建了一个函数,如果给定列名和行,它将查找百分比变化并将其输出到一个全新的数据帧。156

19
mingdashike22 在职认证  发表于 2022-6-11 14:13:41
#创建一个新的数据帧,将美元价格更改为之前值的百分比变化。比较百分比=pd。数据帧(索引=数据索引)158。159.— 20 —160. def percent\\u change(列,行):161。如果列==1:162。百分比=((比较[‘指数价格’]。iloc[r]-比较[‘指数价格’]。iloc[0])163。/比较[“指数价格”]。iloc[0])164。如果列==2:165。百分比=((比较[\'Portfolio Price\'。iloc[r]-比较[\'Portfolio Price\'。iloc[0])/比较[\'Portfolio Price\'。iloc[0])166。返回百分比167。168.      169. index\\u list\\u percent=[]170。portfolio\\u price\\u percent=[]171。172、对于范围内的r(0,len(comparison\\u percentage.index)):173。index\\u list\\u百分比。追加(百分比变化(1,r))174。portfolio\\u price\\u百分比。追加(百分比变化(2,r))175。176、比较百分比[“指数价格”]=指数列表百分比177。comparison\\u percentage[\'Portfolio Price\']=Portfolio\\u Price\\u percent现在显示的图表准确地比较了我们的投资组合和指数的变动。作为最后的润色,我添加了一段代码,计算用户投资组合优于指数的天数百分比。跑赢大市计数=0 192。total\\u count=0 193。194.对于范围内的r(0,len(比较百分比指数)):195。if comparison\\u percentage[“组合价格”]。iloc[r]>比较百分比[“指数价格”]。iloc[右]:196。跑赢大市计数+=1 197。total\\u count+=1 198。跑赢大市百分比=(跑赢大市计数/总计数)*100 199。打印(比较百分比)201。打印(“您的投资组合,包括“、股票“、跑赢大市”、索引\\u输入、跑赢大市百分比、”%的时间。”)5.1.2.

20
mingdashike22 在职认证  发表于 2022-6-11 14:13:44
测试有效性,以测试我们战略的有效性和下一节中制定的计划的成功性,我们将选取两个最著名的股票市场指数(标准普尔500指数和道琼斯指数),并试图创建一个既优于该指数,又能确定多元化或非多元化投资组合是否更有效的投资组合21-由于道琼斯指数仅由30只股票组成,因此在我们的测试中,可以对所有股票进行测试,尽管对标准普尔500指数而言,对所有500只股票进行测试可能不是很省时。我们将对指数中权重最高的50只股票进行测试。从道琼斯指数开始,道琼斯指数由以下30只股票组成。Gexompgutxmmmibmmrkaxmcdbakocatedisjpmjjjhdintcmsftpfevzvxcscortvunhgsnkevaapldwdpwmt将这些股票纳入我们的计划,从2010年1月1日至2014年的数据中,找到多元化投资组合的阈值(0.46),生成下图。最大的完整子图由原始30支股票中的10支组成。它们是通用电气(GE)、波音(BA)、可口可乐(KO)、英特尔(INTC)、辉瑞(Pfizer)、Verizon(VZ)、高盛(GS)、Visa(V)、苹果(AAPL)和杜邦(DWDP)。当模拟投资组合时,从图表和计算出的百分比都可以看出,多元化投资组合的表现大大优于其所依据的指数。-22-您的多元化投资组合,包括[\'GE\',\'BA\',\'KO\',\'INTC\',\'PFE\',\'VZ\',\'GS\',\'V\',\'AAPL\',\'DWDP\',在91.17%的时间内表现优于道琼斯工业指数。现在,我们对一个单一的投资组合也这样做。下图是使用相同基本标记和相同日期的输出,但这次的阈值为0.6。最接近完整图的子图由原始30支股票中的10支组成。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-7 17:02