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 = '000063' 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 = '000063' 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 = '000063' 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("000063", start = before, end = today) #獲取行情數據,格式: pandas.core.frame.DataFrame goog_df = ts.get_k_data("600036", start = before, end = today) appl_df = ts.get_k_data("000001", 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 = '000063' 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()