python金融量化分析入门

夏饭团子 2024-05-19 22:20:46
最佳回答
1使用**re包的get_k_data()函数来获取交易数据,具体可以通过命令help(ts.get_k_data)了解函数和参数含义。#先引入后面可能用到的包(package)import pandas as pd import numpy as npimport matplotlib.pyplot as plt#正常显示画图时出现的中文from pylab import mpl#这里使用微软雅黑字体mpl.rcparams['font.sans-serif']=['simhei']#画图时显示负号mpl.rcparams['axes.unicode_minus']=falseimport seaborn as sns #画图用的import **re as ts#jupyter notebook特有的magic命令#直接在行内显示图形%matplotlib inline 2获取上证指数自发布以来的数据sh=ts.get_k_data(code='sh',ktype='d', autype='qfq', start='1990-12-20')#code:代码,个股主要使用代码,如‘600000’#ktype:'d':日数据;‘m’:月数据,‘y’:年数据#autype:复权选择,默认‘qfq’前复权#start:起始时间#end:默认当前时间#查看下数据前5行sh.head(5)3能看到的第一列是索引,对于pandas的数据结构,最后将索引设置为时间序列,方便后面可视化分析。#将数据列表中的第0列'date'设置为索引sh.index=pd.to_datetime(sh.date) #画出上证指数收盘价的走势sh['close'].plot(figsize=(12,6))plt.title('上证指数1990-2018年走势图')plt.xlabel('日期')plt.show()4描述性统计#pandas的describe()函数提供了数据的描述性统计#count:数据样本,mean:均值,std:标准差sh.describe().round(2)结果如下表所示:5从上述结果可以看出,上证指数从1990年12月20日至2018年11月7日(最后交易日是当前运行时间),一共有6645个样本,均值为1937.52点,标准差为1079.51点(波动还是比较大的),最大值是6092.06点。#再查看下每日成交量 #2006年市场容量小,交易量比较小,我们从2007年开始看sh.loc["2007-01-01":]["volume"].plot(figsize=(12,6))plt.title('上证指数2007-2018年日成交量图')plt.xlabel('日期')plt.show()6均线分析#这里的平均线是通过自定义函数,手动设置20,52,252日均线#移动平均线:ma_day = [20,52,252]for ma in ma_day: column_name = "%s日均线" %(str(ma)) sh[column_name] =sh["close"].rolling(ma).mean()#sh.tail(3)#画出2010年以来收盘价和均线图sh.loc['2010-10-8':][["close","20日均线","52日均线","252日均线"]].plot(figsize=(12,6))plt.title('2010-2018上证指数走势图')plt.xlabel('日期')plt.show()7日收益率可视化#2005年之前的数据噪音太大,主要分析2005年之后的sh["日收益率"] = sh["close"].pct_change()sh["日收益率"].loc['2005-01-01':].plot(figsize=(12,4))plt.xlabel('日期')plt.ylabel('收益率')plt.title('2005-2018年上证指数日收益率')plt.show()8###这里我们改变一下线条的类型#(linestyle)以及加一些标记(marker)sh["日收益率"].loc['2014-01-01':].plot(figsize=(12,4),linestyle="--",marker="o",color="g")plt.title('2014-2018年日收益率图')plt.xlabel('日期')plt.show()9分析多只指数#分析下常见的几个指数stocks={'上证指数':'sh','深证指数':'sz','沪深300':'hs300', '上证50':'sz50','中小板指':'zxb','创业板':'cyb'}stock_index=pd.dataframe()for stock in stocks.values(): stock_index[stock]=ts.get_k_data(stock,ktype='d', autype='qfq', start='2005-01-01')['close']#stock_index.head()#计算这些指数每日涨跌幅tech_rets = stock_index.pct_change()[1:]#tech_rets.head()#收益率描述性统计tech_rets.describe()#结果不在此报告#均值其实都大于0tech_rets.mean()*100 #转换为%对上述指数之间的相关性进行可视化分析:#jointplot这个函数可以画出两个指数的”相关性系数“,或者说皮尔森相关系数sns.jointplot('sh','sz',data=tech_rets)10#成对的比较不同数据集之间的相关性,#而对角线则会显示该数据集的直方图sns.pairplot(tech_rets.iloc[:,3:].dropna())11returns_fig = sns.pairgrid(tech_rets.iloc[:,3:].dropna())###右上角画散点图returns_fig.map_upper(plt.scatter,color="purple") ###左下角画核密度图 returns_fig.map_lower(sns.kdeplot,cmap="cool_d") ###对角线的直方图 returns_fig.map_diag(plt.h**t,bins=30)12收益率与风险#构建一个计算收益率和标准差的函数#默认起始时间为'2005-01-01'def return_r**k(stocks,startdate='2005-01-01'): close=pd.dataframe() for stock in stocks.values(): close[stock]=ts.get_k_data(stock,ktype='d', autype='qfq', start=startdate)['close'] tech_rets = close.pct_change()[1:] rets = tech_rets.dropna() ret_mean=rets.mean()*100 ret_std=rets.std()*100 return ret_mean,ret_std#画图函数def plot_return_r**k(): ret,vol=return_r**k(stocks) color=np.array([ 0.18, 0.96, 0.75, 0.3, 0.9,0.5]) plt.scatter(ret, vol, marker = 'o', c=color,s = 500,cmap=plt.get_cmap('spectral')) plt.xlabel("日收益率均值%") plt.ylabel("标准差%") for label,x,y in zip(stocks.keys(),ret,vol): plt.annotate(label,xy = (x,y),xytext = (20,20), textcoords = "offset points", ha = "right",va = "bottom", bbox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5), arrowprops = dict(arrowstyle = "->", connectionstyle = "arc3,rad=0"))stocks={'上证指数':'sh','深证指数':'sz','沪深300':'hs300', '上证50':'sz50','中小板指数':'zxb','创业板指数':'cyb'}plot_return_r**k()stocks={'**平安':'601318','格力电器':'000651', '招商银行':'600036','恒生电子':'600570', '中信证券':'600030','贵州茅台':'600519'}startdate='2018-01-01'plot_return_r**k()13蒙特卡洛模拟分析df=ts.get_k_data('sh',ktype='d', autype='qfq', start='2005-01-01')df.index=pd.to_datetime(df.date)tech_rets = df.close.pct_change()[1:]rets = tech_rets.dropna()#rets.head()#下面的结果说明,我们95%的置信,一天我们不会损失超过0.0264...rets.quantile(0.05)-0.026496813699825043构建蒙特卡洛模拟函数:def monte_carlo(start_price,days,mu,sigma): dt=1/days price = np.zeros(days) price[0] = start_price shock = np.zeros(days) drift = np.zeros(days) for x in range(1,days): shock[x] = np.random.normal(loc=mu * dt, scale=sigma * np.sqrt(dt)) drift[x] = mu * dt price[x] = price[x-1] + (price[x-1] * (drift[x] + shock[x])) return price#模拟次数runs = 10000start_price = 2641.34 #今日收盘价days = 252mu=rets.mean()sigma=rets.std()simulations = np.zeros(runs)for run in range(runs): simulations[run] = monte_carlo(start_price, days,mu,sigma)[days-1]q = np.percentile(simulations,1)plt.figure(figsize=(8,6))plt.h**t(simulations,bins=50,color='grey')plt.figtext(0.6,0.8,s="初始价格: %.2f" % start_price)plt.figtext(0.6,0.7,"预期价格均值: %.2f" %simulations.mean())plt.figtext(0.15,0.6,"q(0.99: %.2f)" %q)plt.axvline(x=q,linewidth=6,color="r")plt.title("经过 %s 天后上证指数模拟价格分布图" %days,weight="bold")text(0.5,1,'经过 252 天后上证指数模拟价格分布图')14实际上蒙特卡洛模拟在期权定价里面还是很有用的。我们借用期权定价里对未来走势的假定来进行蒙特卡洛模拟。import numpy as npfrom time import timenp.random.seed(2018)t0=time()s0=2641.34t=1.0; r=0.05; sigma=rets.std()m=50;dt=t/m; i=250000s=np.zeros((m+1,i))s[0]=s0for t in range(1,m+1): z=np.random.standard_normal(i) s[t]=s[t-1]*np.exp((r-0.5*sigma**2)*dt+ sigma*np.sqrt(dt)*z)s_m=np.sum(s[-1])/itnp1=time()-t0print('经过250000次模拟,得出1年以后上证指数的 预期平均收盘价为:%.2f'%s_m)经过250000次模拟,得出1年以后上证指数的预期平均收盘价为:2776.85%matplotlib inlineimport matplotlib.pyplot as pltplt.figure(figsize=(10,6))plt.plot(s[:,:10])plt.grid(true)plt.title('上证指数蒙特卡洛模拟其中10条模拟路径图')plt.xlabel('时间')plt.ylabel('指数')plt.show()15plt.figure(figsize=(10,6))plt.h**t(s[-1], bins=120)plt.grid(true)plt.xlabel('指数水平')plt.ylabel('频率')plt.title('上证指数蒙特卡洛模拟')text(0.5,1,'上证指数蒙特卡洛模拟')end 20210311
汇率兑换计算器

类似问答
  • 用什么数据量化分析**证券公司金融科技现状?
    • 2024-05-19 10:50:01
    • 提问者: 未知
    最近查找**证券公司金融科技相关的数据,发现相关性大的数据很少(比如研发投入),很难找,看一百多份…
  • python金融大数据分析 怎么样
    • 2024-05-19 20:32:32
    • 提问者: 未知
    你是想说书还是什么书的话,没有一点数学和python基础不太好学
  • 量化分析是什么意思
    • 2024-05-19 01:28:02
    • 提问者: 未知
    量化分析就是将一些不具体,模糊的因素用具体的数据来表示,从而达到分析比较的目的。从研究范式的特征和视角来划分,股票市场的分析方法主要有如下三种:基本分析法,技术分析法、演化分析法,其中基本分析主要应用于投资标的物的选择上,技术分析和演化分析则主要应用于具体投资操作的时间...
  • 用 python 进行股票分析,有什么好的入门书籍或者课程吗?
    • 2024-05-19 10:16:23
    • 提问者: 未知
    由于最近发现通达信自带的专家系统已经无法满足我的模拟需求,想进行更自由的模拟环境,所以学了点python,但是学得一头雾水,完全没有方向,所以想问问各位大侠,有没有稍微有点针对股票分析方面的python网络课程或者书籍,谢谢。或者其他关于c、r或者matlab等仍和编程类语言也可以~
  • 学python入门应该先学什么?
    • 2024-05-19 00:31:44
    • 提问者: 未知
    学python应先python开发基础部分入手,如学习python语绍、环境安装、 python基本语法、基本数据、 二进制运算、流程控制、 字符编码、文件处理、 数据类型、用户认证、函数、 **菜单程序、购物车程序开发、 员工信息表开发、内置方法、 递归、迭代器、装饰器、 模块的跨目录导入、 b加密\re正则\logging日志模块、 常用标准库学习、 软件开发规范学习、 计算器程序、 atm程...
  • 量化交易如何入门?
    • 2024-05-19 04:54:16
    • 提问者: 未知
    值得总结的是数学、计算机、分析框架等工具都只是量化投资的形,优质投资想法才是灵魂。...“通向财务自由之路”“打开量化交易的黑箱”比较易读,有个基本的了解。...
  • 如何零基础入门 python?
    • 2024-05-19 14:26:52
    • 提问者: 未知
    题主 it 零基础,想从零开始学习 python,求大鸟推荐教程或论坛,感激不尽啊。
  • 入门python量化交易需要准备什么?
    • 2024-05-19 18:36:42
    • 提问者: 未知
    入门python量化交易需要准备什么?随着各种宽客**的上线,量化交易的门槛已经越来越低了。要想实现最基本的量化交易策略,首先你要对交易的种类(股票、期货、基:-python...
  • 初中文化能学金融分析吗
    • 2024-05-19 16:18:35
    • 提问者: 未知
    不能学习
  • python自学入门?
    • 2024-05-19 13:35:18
    • 提问者: 未知
    python怎么自学入门,需要准备啥?
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。