量化编程技术—matplotlib与可视化
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(42)
# 采样个数500
n_samples = 500
dim = 3
# 先生成一组3维正态分布数据,数据方向完全随机
samples = np.random.multivariate_normal(
np.zeros(dim),
np.eye(dim),
n_samples
)
# 通过把每个样本到原点距离和均匀分布吻合得到球体内均匀分布的样本
for i in range(samples.shape[0]):
r = np.power(np.random.random(), 1.0/3.0)
samples[i] *= r / np.linalg.norm(samples[i])
upper_samples = []
lower_samples = []
for x, y, z in samples:
# 3x+2y-z=1作为判别平面
if z > 3*x + 2*y - 1:
upper_samples.append((x, y, z))
else:
lower_samples.append((x, y, z))
fig = plt.figure('3D scatter plot')
ax = fig.add_subplot(111, projection='3d')
uppers = np.array(upper_samples)
lowers = np.array(lower_samples)
# 用不同颜色不同形状的图标表示平面上下的样本
# 判别平面上半部分为红色圆点,下半部分为绿色三角
ax.scatter(uppers[:, 0], uppers[:, 1], uppers[:, 2], c='r', marker='o')
ax.scatter(lowers[:, 0], lowers[:, 1], lowers[:, 2], c='g', marker='^')
plt.show()
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
import matplotlib as mpl
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib import rc
from matplotlib.pylab import date2num
from datetime import datetime, timedelta
# 示例序列
demo_list = np.array([2, 4, 16, 20])
# 以三天为周期计算波动
demo_window = 3
std = pd.rolling_std(demo_list, window=demo_window, center=False) * np.sqrt(demo_window)
print(std)
today = datetime.now().strftime('%Y-%m-%d')
before = (datetime.now() - timedelta(days = 120)).strftime('%Y-%m-%d') #120自然日,大概80个交易日
#获取行情数据,格式: pandas.core.frame.DataFrame
code = '
tsla_df = ts.get_k_data(code, start = before, end = today)
tsla_df_copy = tsla_df.copy()
# 投资回报
tsla_df_copy['return'] = np.log(tsla_df['close'] / tsla_df['close'].shift(1))
# 移动收益标准差
tsla_df_copy['mov_std'] = pd.rolling_std(tsla_df_copy['return'],
window=20,
center=False) * np.sqrt(20)
# 加权移动收益标准差,与移动收益标准差基本相同,只不过根据时间权重计算std
tsla_df_copy['std_ewm'] = pd.ewmstd(tsla_df_copy['return'], span=20,
min_periods=20,
adjust=True) * np.sqrt(20)
tsla_df_copy[['close', 'mov_std', 'std_ewm', 'return']].plot(subplots=True, grid=True);
import numpy as np
import pandas as pd
import matplotlib as mpl
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib import rc
from matplotlib.pylab import date2num
from datetime import datetime, timedelta
today = datetime.now().strftime('%Y-%m-%d')
before = (datetime.now() - timedelta(days = 120)).strftime('%Y-%m-%d') #120自然日,大概80个交易日
#获取行情数据,格式: pandas.core.frame.DataFrame
code = '
tsla_df = ts.get_k_data(code, start = before, end = today)
tsla_df.close.plot()
# ma 30
# pd.rolling_mean(tsla_df.close, window=30).plot()
pd.rolling_mean(tsla_df.close, window=30).plot()
# ma 60
# pd.rolling_mean(tsla_df.close, window=60).plot()
pd.rolling_mean(tsla_df.close, window=60).plot()
# ma 90
# pd.rolling_mean(tsla_df.close, window=90).plot()
pd.rolling_mean(tsla_df.close, window=90).plot()
# loc='best'即自动寻找适合的位置
plt.legend(['close', '30 mv', '60 mv', '90 mv'], loc='best');
import warnings
warnings.filterwarnings("ignore")
import numpy as np
import pandas as pd
import matplotlib as mpl
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib import rc
from matplotlib.pylab import date2num
from datetime import datetime, timedelta
today = datetime.now().strftime('%Y-%m-%d')
before = (datetime.now() - timedelta(days = 120)).strftime('%Y-%m-%d') #120自然日,大概80个交易日
code = '
tsla_df = ts.get_k_data(code, start = before, end = today) #获取行情数据,格式: pandas.core.frame.DataFrame
# tsla_df = ts.get_hist_data(code, start = before, end = today)
def plot_trade(buy_date, sell_date):
# 找出2014-07-28对应时间序列中的index作为start
start = tsla_df[tsla_df.index == buy_date].key.values[0]
# 找出2014-09-05对应时间序列中的index作为end
end = tsla_df[tsla_df.index == sell_date].key.values[0]
# 使用5.1.1封装的绘制tsla收盘价格时间序列函数plot_demo
# just_series=True, 即只绘制一条曲线使用series数据
plot_demo(just_series=True)
# 将整个时间序列都填充一个底色blue,注意透明度alpha=0.08是为了
# 之后标注其他区间透明度高于0.08就可以清楚显示
plt.fill_between(tsla_df.index, 0, tsla_df['close'], color='blue',
alpha=.08)
# 标注股票持有周期绿色,使用start和end切片周期
# 透明度alpha=0.38 > 0.08
plt.fill_between(tsla_df.index[start:end], 0,
tsla_df['close'][start:end], color='green',
alpha=.38)
# 设置y轴的显示范围,如果不设置ylim,将从0开始作为起点显示,效果不好
plt.ylim(np.min(tsla_df['close']) - 5,
np.max(tsla_df['close']) + 5)
# 使用loc='best'
plt.legend(['close'], loc='best')
# 标注交易区间2014-07-28到2014-09-05, 图5-12所示
plot_trade('2018-01-01', '2018-01-30')
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tushare as ts
from datetime import datetime, timedelta
today = datetime.now().strftime('%Y-%m-%d')
before = (datetime.now() - timedelta(days = 240)).strftime('%Y-%m-%d') #120自然日,大概80个交易日
tsla_df = ts.get_k_data(", start = before, end = today) #获取行情数据,格式: pandas.core.frame.DataFrame
goog_df = ts.get_k_data(", start = before, end = today)
appl_df = ts.get_k_data(", start = before, end = today)
def plot_two_stock(tsla, goog, appl, axs=None):
# 如果有传递子画布,使用子画布,否则plt
drawer = plt if axs is None else axs
drawer.plot(tsla, c='r')
drawer.plot(goog, c='g')
drawer.plot(appl, c='b')
drawer.grid(True) # 显示网格
drawer.legend(['tsla', 'google','apple'], loc='best') # 图例标注
plot_two_stock(tsla_df.close, goog_df.close, appl_df.close)
plt.title('TSLA and Google CLOSE')
plt.xlabel('time') # x轴时间
plt.ylabel('close') # y轴收盘价格
import matplotlib as mpl
import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib import rc
from matplotlib.pylab import date2num
from datetime import datetime, timedelta
today = datetime.now().strftime('%Y-%m-%d')
before = (datetime.now() - timedelta(days = 90)).strftime('%Y-%m-%d') #120自然日,大概80个交易日
#获取行情数据,格式: pandas.core.frame.DataFrame
code = '
tsla_df = ts.get_k_data(code, start = before, end = today)
# print(tsla_df)
'''
蜡烛图的日期,不支持普通的YYYY-MM-DD格式
要使用matplotlib.finance.date2num进行转换为特有的数字值
'''
qutotes = []
for _, (d, o, c, h, l) in enumerate(
zip(tsla_df.date, tsla_df.open, tsla_df.close, tsla_df.high, tsla_df.low)):
d = mpf.date2num(datetime.strptime(d,'%Y-%m-%d'))
# 日期,开盘,收盘,最高,最低组成tuple对象val
val = (d, o, h, l, c)
# 加val加入qutotes
qutotes.append(val)
fig, ax = plt.subplots(figsize=(15,5)) #设置图片大小
fig.subplots_adjust(bottom=0.5) #调整画框的位置,用来消除白边
ax.xaxis_date() # X轴的刻度为日期
plt.xticks(rotation=45) # 设置日期刻度旋转的角度
plt.title(code) # 设置图片标题
plt.xlabel('Date') # 设置X轴标题
plt.ylabel('Price') # 设置Y轴标题
plt.grid(True) # 显示网格
mpf.candlestick_ohlc(ax, qutotes, width=0.6, colorup='g', colordown='r', alpha=1.0)
plt.show()
量化编程技术—matplotlib与可视化的更多相关文章
- 量化编程技术—itertools寻找最优参数
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: ''' 在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优 ...
- 量化编程技术—pandas与数据分析
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np stock_cnt = 200 view_day ...
- 量化编程技术—numpy与统计学
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np # 200支股票 stock_cnt = 200 ...
- 量化编程技术—pdb进行调试
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import pdb def gen_buy_change_list(): buy_c ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Atitit.异步编程技术原理与实践attilax总结
Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...
- Java Web编程技术学习要点及方向
学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...
- javascript学习 真正理解DOM脚本编程技术背后的思路和原则
本文学习来源于<javascriptDOM编程艺术>仅作笔记 学会怎样才能利用DOM脚本编程技术以一种既方便自己更体贴用户的方式去充实和完善你们的网页. 循序渐进:从最核心的内容开始,逐步 ...
- 转载--提高C++性能的编程技术
读书笔记:提高C++性能的编程技术 第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...
随机推荐
- ECHO命令输出空行的11种方法和效率
标题: 批处理技术内幕:ECHO命令作者: Demon链接: http://demon.tw/reverse/cmd-internal-echo.html版权: 本博客的所有文章,都遵守“署名-非商业 ...
- Could not resolve com.android.support:design 28.0.0
想试一试android的那个侧滑栏功能,需要用到 'com.android.support:design:28.0.0'建好之后一直报关于28.00的错误,一开始各种百度更改配置没吊用,最后感觉是网络 ...
- python基础语法8 叠加装饰器,有参装饰器,wraps补充,迭代器
叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 de ...
- 虚拟机将ip修改为静态
- Angular vs React---React-ing to change
这篇文章的全局观和思路一级棒! The Fairy Tale Cast your mind back to 2010 when users started to demand interactive ...
- springboot 打包插件spring-boot-maven-plugin打包机制及内部结构分析
今日思语:I miss you? 何解? 我错过你了?我想你了? 当下许多公司都会选择使用springboot作为服务应用开发框架,springboot框架提供了一套自己的打包机制,是通过spring ...
- (16)WiringPi库函数
8.WiringPi库函数 一.wiringPi简介 wiringPi是应用于树莓派平台的GPIO控制库函数,wiringPi中的函数类似于Arduino的wiringPi系统,wiringPi库包含 ...
- MongoDB索引存储BTree与LSM树(转载)
1.为什么 MongoDB 使用B-树,而不是B+树 MongoDB 是一种 nosql,也存储在磁盘上,被设计用在数据模型简单,性能要求高的场合.性能要求高,我们看B-树与B+树的区别: B+树内节 ...
- 通过日志解决问题的一个小例子-http换端口
这个例子是将http服务的监听端口改为8999后重启服务报错: 此时查看日志/var/log/message,显示如下: 如红笔所示轨迹得到设置端口类型的命令:semanage port -a -t ...
- ent 基本使用十七 分页与排序
ent 提供了方便的数据分页以及排序处理 limit 分页 users, err := client.User. Query(). Limit(n). All(ctx) offset 分页 users ...