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与可视化的更多相关文章

  1. 量化编程技术—itertools寻找最优参数

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: ''' 在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优 ...

  2. 量化编程技术—pandas与数据分析

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np stock_cnt = 200 view_day ...

  3. 量化编程技术—numpy与统计学

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np # 200支股票 stock_cnt = 200 ...

  4. 量化编程技术—pdb进行调试

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import pdb def gen_buy_change_list(): buy_c ...

  5. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  6. Atitit.异步编程技术原理与实践attilax总结

    Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...

  7. Java Web编程技术学习要点及方向

    学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...

  8. javascript学习 真正理解DOM脚本编程技术背后的思路和原则

    本文学习来源于<javascriptDOM编程艺术>仅作笔记 学会怎样才能利用DOM脚本编程技术以一种既方便自己更体贴用户的方式去充实和完善你们的网页. 循序渐进:从最核心的内容开始,逐步 ...

  9. 转载--提高C++性能的编程技术

    读书笔记:提高C++性能的编程技术   第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...

随机推荐

  1. 201671030106 何启芝 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十四 团队项目评审&课程学习总结 课程学习目 ...

  2. 项目Beta冲刺(团队)——05.27(5/7)

    项目Beta冲刺(团队)--05.27(5/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第5 ...

  3. Zipkin 知识点

    在Spring Cloud D版本,zipkin-server通过引入依赖的方式构建工程,自从E版本之后,这一方式改变了,采用官方的jar形式启动. 出处:https://juejin.im/post ...

  4. 【Hadoop】新建hadoop用户以及用户组,给予sudo权限(转)

    1.首先新建用户,adduser命令 sudo adduser hadoop passwd hadoop 输入密码之后,一路 y 确定. 2.添加用户组 在创建hadoop用户的同时也创建了hadoo ...

  5. 2019年12月份关于Android Studio 需要了解的知识总结

    因为期末项目答辩的原因,我和我的小组成员一起写了个作品展示app 就是用AndroidStudio写的  具体功能呢还加上了云服务器,bmob,等等 我是不知道那个云服务器要怎么配置啊,也不会用,都是 ...

  6. base64文件隐写脚本

    base64文件隐写脚本 base64 可以在文件中隐藏信息,记录一下提取脚本 ''' base64文件隐写脚本 import re import base64 b64chars = 'ABCDEFG ...

  7. Django3 的服务器搭建

    进入python虚拟环境 执行以下 命令 source env/bin/active 激活并切换虚拟环境 安装 pip3 install django 创建django项目 django-admin ...

  8. ES6 - 开篇

    一些关于es6简单的介绍与了解.初始认知有限,循序完善. ES6: 又叫ES2015,是2015年推出的JavaScript新版本. 相应的,后边推出的ES7.8.9.10等都依次是上一版本发出后一年 ...

  9. cocos: 链接错误: _lz_adler32 in liblibquickmac.a

    错误: Undefined symbols for architecture x86_64: "_adler32", referenced from: _lz_adler32 in ...

  10. Content-type解析

    一.是什么? 是Http的实体首部字段,用于说明请求或返回的消息主体是用何种方式编码,在request header和response header里都存在. Content-Type(内容类型),一 ...