六、numpy的常用函数


1. 读取文件

  • 逻辑上可被解释为二维数组的文本文件:

    • 数据项1<分隔符>数据项2<分隔符>...<分隔符>数据项n

      numpy.loadtxt(

      文件路径,

      delimiter=分隔符(缺省一个空格),

      usecols=列序列(缺省所有列),

      unpack=是否展开列(缺省False), # 返回一个二维数组(False)或多个一维数组(True)

      dtype=元素类型(缺省float),
      converters=转换器字典(缺省不做转换))
# k.py
import numpy as np
import datetime as dt
import matplotlib.pyplot as mp
import matplotlib.dates as md def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, opening_prices, highest_prices, lowest_prices, closing_prices \
= np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True, dtype='M8[D], f8, f8, f8, f8', \
converters={1: dmy2ymd}) mp.figure('Candlestick', dpi=150, facecolor='lightgray')
mp.title('Candlestick', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
ax = mp.gca()
# 设置水平坐标每个星期一为主刻度
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
# 设置每一天为次刻度
ax.xaxis.set_minor_locator(md.DayLocator())
# 设置水平坐标主刻度标签格式
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':') dates = dates.astype(md.datetime.datetime) rise = closing_prices - opening_prices >= 0.01 # 阳线掩码,为bool数组
fall = opening_prices - closing_prices >= 0.01 # 阴险掩码
# 填充色
fc = np.zeros(dates.size, dtype='3f4')
fc[rise], fc[fall] = (1, 1, 1), (0, 0.5, 0) # 设置红色和浅绿色
# 边缘色
ec = np.zeros(dates.size, dtype='3f4')
ec[rise], ec[fall] = (1, 0, 0), (0, 0.5, 0) # 设置红色和浅绿色 mp.bar(dates, highest_prices - lowest_prices, 0.01, lowest_prices, color=fc, edgecolor=ec)
mp.bar(dates, closing_prices - opening_prices, 0.6, opening_prices, color=fc, edgecolor=ec) # 自动调整水平坐标轴的日期标签
mp.gcf().autofmt_xdate()
mp.show()

2. 算数平均值

  • 样本:S = [s1, s2, ..., sn]
  • 算数平均值:m = (s1+s2+...+sn) / n

    测 误差

    s1 = s+d1

    s2 = s+d2

    ...

    sn = s+dn

    m =(s1+s2+...+sn) / n

    =(s+s+...+s) / n + (d1+d2+...+dn)/n

    =s + (d1+d2+...+dn)/n

    n->oo
  • 算数平均值表示对真值的无偏估计。

numpy.mean(S)->m

# mean.py
import numpy as np
def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, opening_prices, highest_prices, lowest_prices, closing_prices \
= np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True, dtype='M8[D], f8, f8, f8, f8', \
converters={1: dmy2ymd}) mean = 0
for cp in closing_prices:
mean += cp
mean /= closing_prices.size
print(mean) mean = np.mean(closing_prices)
print(mean)
351.03766666666667
351.0376666666667

3. 加权平均值

  • 样本:S = [s1, s2, ..., sn]
  • 权重:W = [w1, w2, ..., wn]
  • 加权平均值:

    a = (s1w1+s2w2+...+snwn)/(w1+w2+...+wn)

    numpy.average(S, weights=W)->a
  • VWAP - 成交量加权平均价格
  • TWAP - 时间加权平均价格
# VWAP.py
import numpy as np closing_prices, volumes = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(6, 7), unpack=True) # 原始计算方法
vwap, wsum = 0, 0
for closing_price, volume in zip(closing_prices, volumes):
vwap += closing_price * volume
wsum += volume
vwap /= wsum
print(vwap) vwap = np.average(closing_prices, weights=volumes)
print(vwap)
350.5895493532009
350.5895493532009
# TWAP.py
import numpy as np
import datetime as dt def dmy2days(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
days = (date - dt.date.min).days
return days dates, closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 6), unpack=True,
converters={1:dmy2days}) twap = np.average(closing_prices, weights=dates)
print(twap)
351.0377051146597

4. 最值

  • max/min:返回一个数组中最大/最小元素
  • argmax/argmin:返回一个数组中最大/最小元素的下标
  • maximum/minimum:将两个同维数组中对应位置元素中最大/最小元素构成一个新的数组
  • ptp:返回一个数组中最大值和最小值之差
# max.py
import numpy as np
# 产生9个[10, 100)区间的随机数
a = np.random.randint(10, 100, 9).reshape(3, 3)
print(a)
print(np.max(a),np.min(a))
print(np.argmax(a), np.argmin(a)) b = np.random.randint(10, 100, 9).reshape(3, 3)
print(b)
print(np.maximum(a, b))
print(np.minimum(a, b)) print(np.ptp(a))
[[70 48 99]
[85 78 99]
[97 41 86]]
99 41
2 7
[[40 66 28]
[34 11 90]
[59 88 24]]
[[70 66 99]
[85 78 99]
[97 88 86]]
[[40 48 28]
[34 11 90]
[59 41 24]]
58
# range.py
import numpy as np
dates, highest_prices, lowest_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 4, 5),
unpack=True, dtype='U10, f8, f8')
max_price = np.max(highest_prices)
min_price = np.min(lowest_prices)
print(min_price, 'to', max_price) max_index = np.argmax(highest_prices)
min_index = np.argmin(lowest_prices)
print(dates[max_index], 'and', dates[min_index]) # 波动范围
r = highest_prices - lowest_prices
highest_ptp = np.ptp(highest_prices)
lowest_ptp = np.ptp(lowest_prices)
print(highest_ptp, 'and', lowest_ptp)
333.53 to 364.9
16-02-2011 and 28-01-2011
24.859999999999957 and 26.970000000000027

5. 中位数

  • 将多个样本按照大小排序,取中间位置的元素。

  • np.median(无序样本)->中位数

    10 20 30 40 50

    ^ (a[(5-1)/2]+a[5/2])/2

    10 20 30 40 50 60

    ^ ^

    (a[(6-1)/2]+a[6/2])/2

  • (a[(s-1)/2]+a[s/2])/2

# med.py
import numpy as np
closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(6)) size = closing_prices.size
sorted_prices = np.msort(closing_prices)
median = (sorted_prices[int((size - 1)/ 2)] + sorted_prices[int(size / 2)]) / 2
print(median) median = np.median(closing_prices)
print(median)
[336.1  339.32 345.03 344.32 343.44 346.5  351.88 355.2  358.16 354.54
356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16
353.21 349.31 352.12 359.56 360. 355.36 355.76 352.47 346.67 351.99]
352.055
352.055

6. 标准差

  • 样本:S = [s1, s2, ..., sn]

  • 平均值:m = (s1+s2+...+sn)/n

  • 离差:D = [d1, d2, ..., dn], di = si-m

  • 离差方:Q = [q1, q2, ..., qn], qi = di^2

  • 总体方差:v = (q1+q2+...+qn)/n

  • 总体标准差:s = sqrt(v),方均根

  • 样本方差:v' = (q1+q2+...+qn)/(n-1)

    • ${s^2} = \frac{1}{{n - 1}}(\sum\limits_{n - 1}^n {({x_i} - \bar x){)^2}}$
    • numpy.std(S)
  • 样本标准差:s' = sqrt(v'),方均根

    • numpy.std(S, ddof=1)
    • ${s^2} = \frac{1}{{n - 1}}\sqrt {(\sum\limits_{n - 1}^n {({x_i} - \bar x){)^2}} }$
# var.py
import numpy as np
closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(6)) mean = np.mean(closing_prices) # 算术平均值
devs = closing_prices - mean # 离差
dsqs = devs ** 2 # 离差方
pvar = np.mean(dsqs) # 总体方差
pstd = np.sqrt(pvar) # 总体标准差 svar = np.sum(dsqs) / (dsqs.size - 1) # 样本方差
sstd = np.sqrt(svar) # 样本标准差
print(pstd, sstd) pstd = np.std(closing_prices)
sstd = np.std(closing_prices, ddof=1)
print(pstd, sstd)
7.080008325481608 7.201042876260849
7.080008325481608 7.201042876260849

7. 时间数据处理

  1. 按星期取平均值
# week.py
import numpy as np
import datetime as dt # 转换器函数:日月年格式的字符串转换成星期
def dmy2wday(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
wday = date.weekday() # 用0到6表示周一到周日
return wday wdays, closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 6), unpack=True,
converters={1: dmy2wday})
print(wdays) ave_closing_prices = np.zeros(5)
for wday in range(ave_closing_prices.size):
'''
ave_closing_prices[wday] = np.take(
closing_prices, np.where(wdays == wday)).mean()
'''
'''
ave_closing_prices[wday] = \
closing_prices[np.where(wdays == wday)].mean()
'''
ave_closing_prices[wday] = \
closing_prices[wdays == wday].mean()
for wday, ave_closing_price in zip(
['MON', 'TUE', 'WED', 'THU', 'FRI'],
ave_closing_prices):
print(wday, np.round(ave_closing_price, 2))
[4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 3. 4. 0. 1. 2. 3.
4. 0. 1. 2. 3. 4.]
MON 351.79
TUE 350.64
WED 352.14
THU 350.9
FRI 350.02
  1. 按星期汇总数据

    • 数组的轴向汇总
    • np.apply_along_axis(处理函数, 轴向, 数组)
    • 沿着数组中所指定的轴向,调用处理函数,并将每次调用的返回值重新组织成数组返回。
# axis.py
import numpy as np def foo(arg):
print('foo', arg)
return arg.sum() a = np.arange(1, 10).reshape(3, 3)
print(a)
b = np.apply_along_axis(foo, 0, a)
print(b)
c = np.apply_along_axis(foo, 1, a)
print(c)
[[1 2 3]
[4 5 6]
[7 8 9]]
foo [1 4 7]
foo [2 5 8]
foo [3 6 9]
[12 15 18]
foo [1 2 3]
foo [4 5 6]
foo [7 8 9]
[ 6 15 24]
# sum.py
import numpy as np
import datetime as dt def dmy2wday(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
wday = date.weekday()
return wday wdays, opening_prices, highest_prices, \
lowest_prices, closing_prices = np.loadtxt(
'../data/aapl.csv',
delimiter=',', usecols=(1, 3, 4, 5, 6),
unpack=True, converters={1: dmy2wday}) wdays = wdays[:16]
opening_prices = opening_prices[:16]
highest_prices = highest_prices[:16]
lowest_prices = lowest_prices[:16]
closing_prices = closing_prices[:16] # 第一个星期一的索引
first_monday = np.where(wdays == 0)[0][0]
last_friday = np.where(wdays == 4)[0][-1]
indices = np.arange(first_monday, last_friday + 1)
indices = np.split(indices, 3) def week_summary(indices):
opening_price = opening_prices[indices[0]]
highest_price = highest_prices[indices].max()
lowest_price = lowest_prices[indices].min()
closing_price = closing_prices[indices[-1]]
return opening_price, highest_price, \
lowest_price, closing_price summaries = np.apply_along_axis(
week_summary, 1, indices)
print(summaries)
np.savetxt('../data/summary.csv', summaries, delimiter=',', fmt='%g')
[[335.8  346.7  334.3  346.5 ]
[347.89 360. 347.64 356.85]
[356.79 364.9 349.52 350.56]]

8. 卷积

  • 卷积积分

  • 激励函数:$g(t)$

  • 单位激励下的响应函数:$f(t)$

  • 响应函数:$\int{g(t)f(t)dt}$

      a = [1 2 3 4 5]
    b = [6 7 8]
    c = numpy.convolve(a, b, 卷积类型) 40 61 82 - 有效卷积(valid)
    19 40 61 82 67 - 同维卷积(same)
    6 19 40 61 82 67 40 - 完全卷积(full)
    0 0 1 2 3 4 5 0 0
    8 7 6
    8 7 6
    8 7 6
    8 7 6
    8 7 6
    8 7 6
    8 7 6
# conv.py
import numpy as np
a = np.arange(1, 6) # 被卷积序列
b = np.arange(6, 9) # 卷积核序列
print(a, b)
c = np.convolve(a, b, 'full')
print(c)
d = np.convolve(a, b, 'same')
print(d)
e = np.convolve(a, b, 'valid')
print(e)
[1 2 3 4 5] [6 7 8]
[ 6 19 40 61 82 67 40]
[19 40 61 82 67]
[40 61 82]

9. 移动均线

简单平均
a b c d e f g h i j [1/5 1/5 1/5 1/5 1/5] 卷积核
(a+b+c+d+e)/5
(b+c+d+e+f)/5
(c+d+e+f+g)/5
...
(f+g+h+i+j)/5 指数平均,加权平均
[A, B, C, D, E]
S=A+B+C+D+E
(aA+bB+cC+dD+eE)/S
aA/S+bB/S+cC/S+dD/S+eE/S
[A/S, B/S, C/S, D/S, E/S] 卷积核
# smaema.py
import numpy as np
import datetime as dt
import matplotlib.pyplot as mp
import matplotlib.dates as md def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 6), unpack=True, dtype='M8[D], f8',
converters={1: dmy2ymd}) # SMA1普通方法
sma51 = np.zeros(closing_prices.size - 4)
for i in range(sma51.size):
sma51[i] = closing_prices[i:i+5].mean()
# SMA2卷积方法
sma52 = np.convolve(closing_prices, np.ones(5)/5, 'valid')
sma10 = np.convolve(closing_prices, np.ones(10)/10, 'valid') # EMA卷积方法
weights = np.exp(np.linspace(-1, 0, 5))
weights /= weights.sum()
ema5 = np.convolve(closing_prices, weights[::-1], 'valid')
weights = np.exp(np.linspace(-1, 0, 10))
weights /= weights.sum()
ema10 = np.convolve(closing_prices, weights[::-1], 'valid') mp.figure('Simple Moving Average', facecolor='lightgray')
mp.title('Simple Moving Average', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
ax = mp.gca()
# 设置水平坐标每个星期一为主刻度
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
# 设置每一天为次刻度
ax.xaxis.set_minor_locator(md.DayLocator())
# 设置水平坐标主刻度标签格式
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':') dates = dates.astype(md.datetime.datetime) mp.plot(dates, closing_prices, c='lightgray', label='Closing Price')
mp.plot(dates[4:], sma51, c='orange', label='SMA-5(1)')
mp.plot(dates[4:], sma52, c='green', label='SMA-5(2)', alpha=0.2, linewidth=4)
mp.plot(dates[9:], sma10, c='dodgerblue', label='SMA-10')
mp.plot(dates[4:], ema5, c='blue', label='EMA-5')
mp.plot(dates[9:], ema10, c='red', label='EMA-10') # 自动调整水平坐标轴的日期标签
mp.gcf().autofmt_xdate()
mp.legend()
mp.show()

10. 布林带

  • 中轨:移动平均线
  • 上轨:中轨+2x标准差
  • 下轨:中轨-2x标准差
# ebb.py
import numpy as np
import datetime as dt
import matplotlib.pyplot as mp
import matplotlib.dates as md def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 6), unpack=True, dtype='M8[D], f8',
converters={1: dmy2ymd}) weights = np.exp(np.linspace(-1, 0, 5))
weights /= weights.sum()
medios = np.convolve(closing_prices, weights[::-1], 'valid')
stds = np.zeros(medios.size)
for i in range(stds.size):
stds[i] = closing_prices[i:i+5].std()
stds *= 2
lowers = medios - stds
uppers = medios + stds mp.figure('Simple Moving Average', facecolor='lightgray')
mp.title('Simple Moving Average', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
ax = mp.gca()
# 设置水平坐标每个星期一为主刻度
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
# 设置每一天为次刻度
ax.xaxis.set_minor_locator(md.DayLocator())
# 设置水平坐标主刻度标签格式
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':') dates = dates.astype(md.datetime.datetime) mp.plot(dates, closing_prices, c='lightgray', label='Closing Price')
mp.plot(dates[4:], medios, c='Dodgerblue', label='Medio')
mp.plot(dates[4:], lowers, c='limegreen', label='Lower')
mp.plot(dates[4:], uppers, c='orange', label='upper') # 自动调整水平坐标轴的日期标签
mp.gcf().autofmt_xdate()
mp.legend()
mp.show()

11. 线性模型

1    2   3    4      5
60 65 70 75 <80>
  1. 线性预测

    a b c d e f

    aA+bB+cC=d

    bA+cB+dC=e > -> 求A B C

    cA+dB+eC=f /

    dA+eB+fC -> ?

$\left( {\begin{array}{{20}{c}}

a&b&c\

b&c&d\

c&d&e

\end{array}} \right)\left( {\begin{array}{
{20}{c}}

A\

B\

C

\end{array}} \right) = \left( {\begin{array}{*{20}{c}}

d\

e\

f

\end{array}} \right)$

  • np.linalg.lstsq(a, b)[0]
# ebb.py
import numpy as np
import datetime as dt
import pandas as pd
import matplotlib.pyplot as mp
import matplotlib.dates as md def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, closing_prices = np.loadtxt('../data/aapl.csv', delimiter=',', usecols=(1, 6), unpack=True, dtype='M8[D], f8',
converters={1: dmy2ymd}) N = 5
pred_prices = np.zeros(
closing_prices.size - 2 * N + 1)
for i in range(pred_prices.size):
a = np.zeros((N, N))
for j in range(N):
a[j, ] = closing_prices[i + j:i + j + N]
b = closing_prices[i + N:i + N * 2]
x = np.linalg.lstsq(a, b)[0]
pred_prices[i] = b.dot(x)
mp.figure('Linear Prediction',
facecolor='lightgray')
mp.title('Linear Prediction', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
ax = mp.gca()
# 设置水平坐标每个星期一为主刻度
ax.xaxis.set_major_locator(md.WeekdayLocator(
byweekday=md.MO))
# 设置水平坐标每一天为次刻度
ax.xaxis.set_minor_locator(md.DayLocator())
# 设置水平坐标主刻度标签格式
ax.xaxis.set_major_formatter(md.DateFormatter(
'%d %b %Y'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices, 'o-', c='lightgray',
label='Closing Price')
dates = np.append(dates,
dates[-1] + pd.tseries.offsets.BDay())
mp.plot(dates[2 * N:], pred_prices, 'o-',
c='orangered', linewidth=3,
label='Predicted Price')
mp.legend()
mp.gcf().autofmt_xdate()
mp.show()
/Users/haoen110/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:25: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.
To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.
/Users/haoen110/miniconda3/lib/python3.7/site-packages/pandas/plotting/_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters. To register the converters:
>>> from pandas.plotting import register_matplotlib_converters
>>> register_matplotlib_converters()
warnings.warn(msg, FutureWarning)

  1. 线性拟合

    kx + b = y

    kx1 + b = y1

    kx2 + b = y2

    ...

    kxn + b = yn

    / x1 1 \ / k \ / y1

    | x2 1 | X | b | = | y2 |

    | ... | \ / | ...|

    \ xn 1/ \ yn /

    a x b

    = np.linalg.lstsq(a, b)[0]

    y = kx + b

    kx1 + b = y1' - y1

    kx2 + b = y2' - y2

    ...

    kxn + b = yn' - yn

    [y1 - (kx1 + b)]^2 +

    [y2 - (kx2 + b)]^2 + ... +

    [yn - (kxn + b)]^2 = loss = f(k, b)

    k, b? -> loss ->min
import datetime as dt
import numpy as np
import matplotlib.pyplot as mp
import matplotlib.dates as md def dmy2ymd(dmy):
dmy = str(dmy, encoding='utf-8')
date = dt.datetime.strptime(
dmy, '%d-%m-%Y').date()
ymd = date.strftime('%Y-%m-%d')
return ymd dates, opening_prices, highest_prices, \
lowest_prices, closing_prices = np.loadtxt(
'../data/aapl.csv', delimiter=',',
usecols=(1, 3, 4, 5, 6), unpack=True,
dtype='M8[D], f8, f8, f8, f8',
converters={1: dmy2ymd})
trend_points = (highest_prices + lowest_prices +
closing_prices) / 3
spreads = highest_prices - lowest_prices
resistance_points = trend_points + spreads
support_points = trend_points - spreads
days = dates.astype(int)
a = np.column_stack((days, np.ones_like(days)))
x = np.linalg.lstsq(a, trend_points)[0]
trend_line = days * x[0] + x[1]
x = np.linalg.lstsq(a, resistance_points)[0]
resistance_line = days * x[0] + x[1]
x = np.linalg.lstsq(a, support_points)[0]
support_line = days * x[0] + x[1]
mp.figure('Trend', facecolor='lightgray')
mp.title('Trend', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
ax = mp.gca()
ax.xaxis.set_major_locator(md.WeekdayLocator(
byweekday=md.MO))
ax.xaxis.set_minor_locator(md.DayLocator())
ax.xaxis.set_major_formatter(md.DateFormatter(
'%d %b %Y'))
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
dates = dates.astype(md.datetime.datetime)
rise = closing_prices - opening_prices >= 0.01
fall = opening_prices - closing_prices >= 0.01
fc = np.zeros(dates.size, dtype='3f4')
ec = np.zeros(dates.size, dtype='3f4')
fc[rise], fc[fall] = (1, 1, 1), (0.85, 0.85, 0.85)
ec[rise], ec[fall] = (0.85, 0.85, 0.85), (0.85, 0.85, 0.85)
mp.bar(dates, highest_prices - lowest_prices, 0,
lowest_prices, color=fc, edgecolor=ec)
mp.bar(dates, closing_prices - opening_prices, 0.8,
opening_prices, color=fc, edgecolor=ec)
mp.scatter(dates, trend_points, c='dodgerblue',
alpha=0.5, s=60, zorder=2)
mp.plot(dates, trend_line, c='dodgerblue',
linewidth=3, label='Trend')
mp.scatter(dates, resistance_points, c='orangered',
alpha=0.5, s=60, zorder=2)
mp.plot(dates, resistance_line, c='orangered',
linewidth=3, label='Resistance')
mp.scatter(dates, support_points, c='limegreen',
alpha=0.5, s=60, zorder=2)
mp.plot(dates, support_line, c='limegreen',
linewidth=3, label='Support')
mp.legend()
mp.gcf().autofmt_xdate()
mp.show()
/Users/haoen110/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:28: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.
To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.
/Users/haoen110/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:30: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.
To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.
/Users/haoen110/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:32: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.
To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.


numpy_basic2的更多相关文章

随机推荐

  1. POJ 3014:Asteroids(二分匹配,匈牙利算法)

    id=3041">Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14399   Acce ...

  2. linux和unix的对照

    在之前的博客中说到,linux是一个单一内核的操作系统,但它与传统的单一内核UNIX操作系统不同. 在普通单一内核系统中,全部内核代码都是被静态编译和链接的. 而在linux中,能够动态的装入和卸载内 ...

  3. USACO2002 Open:雄伟的山峦

    简要题意: 奶牛们在落基山下避暑,从它们的房子向外望去,可以看到N 座山峰构成的山峦,奶牛发现每座山峰都是等腰三角形,底边长度恰好是高度的两倍.所以山峰的顶点坐标可由两个底部端点求出.设i 座第山峰的 ...

  4. 如何测试WCF Rest

    使用SoapUI 1.新建一个rest项目 2.双击上图中的Request1 查询的时候,Method选择post resource的地方要调整到对应的方法 查询的内容是用json格式发送 查询的的结 ...

  5. ps切图时常用的操作与快捷键

    一:两种切片方法 第一种: 1.使用切片工具划分好你要切的模块 2.点击'存储为web所有格式',在存储之前可以修改图片的品质来改变文件的大小. 3.在存储时切片有三种选择方式,按照自己的需要选择. ...

  6. 动态调用WebService-获取天气

    string url = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; string[] args ...

  7. VirtualBox内刚刚安装完CentOS6.9和7系统,无法调整屏幕的分辨率,也无法设置共享文件夹。解决的方法就是安装VirtualBox客户端增强包。

    VirtualBox内刚刚安装完CentOS6.9和7系统,无法调整屏幕的分辨率,也无法设置共享文件夹.解决的方法就是安装VirtualBox客户端增强包. 1.若直接安装客户端增强包会得到如下提示: ...

  8. DELL T110 II 系统安装总结

    DELL T110 II  系统安装总结 1.RAID制作:https://jingyan.baidu.com/article/a3aad71ac4ce98b1fb0096bc.html 2.系统安装 ...

  9. 光纤收发器TR-962D/932D的面板指示灯及开关代表的含义?

    指示灯含义说明:POWER(绿色):“常亮”表明光纤收发器处于通电状态:LFP指示灯: “常亮”表明LFP功能开启,“常灭”表示LFP功能关闭:FX_LINK/ACT(绿色):“常亮”表明光纤端口连接 ...

  10. 威联通NAS 网站无法登录,可以ssh情况下重启设备方法

    步骤: 1.VPN登录NAS 2.PUTTY SSH登录设备 3.reboot设备 等待重启约5分钟.