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. DRF序列化和反序列化(二:ModelSerializer)

    一: rest_framework 中 serializers.Serializer的不方便之处(以下简称Serializer) a:需要定义每一个字段,并且这个字段是和models字段及其类似. b ...

  2. 项目Beta冲刺(团队)--6/7

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称:葫芦娃队 作业目标:进行新一轮的项目冲刺,尽力完成并完善项目 团队博客 队员学号 队员昵称 博客地址 04160242 ...

  3. Spring Cloud 之 Hystrix 知识点:隔离、熔断、降级

    Hystrix 是隔离.熔断以及降级的一个框架. Hystrix 的隔离: Hystrix 会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线 ...

  4. 20180523模拟赛T1——前缀?

    (a.cpp/c/pas) Time Limit:1 Sec Memory Limit:128 MB 简化版题意 jyt毒瘤,写了超长的题面,要看完整题面的翻到最后-- 老太太认为一个长度为 N 的仅 ...

  5. solr中特殊字符的处理

    如查询的条件为:params.add("fq", "jiucaiyun_brand:Double A" ),这样是查不出带有空格的条件,需要把空格转义 if(b ...

  6. 简要总结selenium四个工具组

    selenium 是基于WEB的自动化测试工具. 由以下几个工具组组成 1.selenium IDE: 一个火狐插件 点击这个插件就进入录制界面,能够记录用户的操作,并且将其导出为可重复使用的测试脚本 ...

  7. svn命令(转)

    参考资料: 1. http://os.51cto.com/art/200908/143157_all.htm2. https://www.jianshu.com/p/d3ebfa27b3ba3. ht ...

  8. 《OKR工作法》| 一次说太多等于什么都没说

    在<OKR工作法>中,作者用汉娜和杰克一起创造TeaBee的故事来为我们讲解OKR可以解决的问题以及如何去实践OKR.给我印象最深的他们用OKR目标管理失败的时候埋怨这种管理方法是有问题的 ...

  9. 用于C#的极速序列化/反序列工具 MessagePack

    MessagePack 比MsgPack-Cli快10倍,并且优于其他C#序列化器.MessagePack for C#还内置了对LZ4压缩的支持 - 一种极快的压缩算法.对于性能追求很重要,特别是在 ...

  10. P1005 矩阵取数

    题目链接 看完题可能第一时间并没有清晰的思路.让我们一步一步的来考虑这道题目. 题目中描述操作为每次从所有的行中选取,这样做有些麻烦.仔细思考一下可以发现行与行之间互不干涉,所以我们可以对每行操作到底 ...