本文讲述K线图绘制的相关基础模拟,包括数据模拟和清洗,以及K线图的简单绘制。(本文重点是数据模拟和清洗,下一篇是K线图实战。)
1.数据模拟
模拟的数据为2021.9.1至2021.9.30一共三十天的数据,数据范围合理性参照上证综指,以2500-2700为最低价范围,2700-3000为最高价范围,2500-3000为交易量(亿元)范围。
import pandas as pd #用于数据处理
import numpy as np #用于数据运算
import random #用于数据模拟
a=2500 #最低价下限(和成交量下限)
b=2700 #最高和最低价间隔
c=3000 #最高价上限(成交量上限)
open=np.linspace(0,1,30) #生成开盘价数组盒子
high=np.linspace(0,1,30) #生成最高价数组盒子
low=np.linspace(0,1,30) #生成最低价数组盒子
close=np.linspace(0,1,30) #生成收盘价数组盒子
volume=np.linspace(0,1,30) #生成交易量数组盒子
for i in range(len(high)): #随机模拟数据并放入数组盒子
high[i]=random.randint(b*100,c*100)/100
low[i]=random.randint(a*100,b*100)/100
open[i]=random.randint(int(low[i]*100),int(high[i]*100))/100 #int把数据类型转化为整数型,属于必要操作
close[i]=random.randint(int(low[i]*100),int(high[i]*100))/100
volume[i] = random.randint(a * 100, c * 100) / 100
date=pd.date_range('20210901','20210930').strftime("%Y-%m-%d").tolist() #模拟生成日期
2.数据整理
把数据按照OHLC的顺序整理成表格,并保存到电脑Excel。在保存时取消行索引,就不会出现第一列是自然数1-30序列的数据。
names=['date','open','high','low','close','volume'] #定义数据标签名字
dataframe=pd.DataFrame([date,open,high,low,close,volume],
index=names) #把数据装入列表
aDataframe=pd.DataFrame(dataframe.values.T,columns=names) #把列表数据行和列转置
aDataframe.to_excel('C:/Users/putongqi/Desktop/data3.xlsx', #把数据存到电脑Excel,
index=None) #取消行索引
3.数据导入和清洗
数据导入时,需要用日期作为行索引,并转为时间序列格式。
data=pd.read_excel('C:/Users/putongqi/Desktop/data3.xlsx', #读取Excel数据
index_col='date') #把日期列作为行索引
data.index=pd.DatetimeIndex(data.index) #把日期索引转为时间序列格式
4.绘制简易K线图
因本文为模拟数据,数据方面没有很大参考性,所以绘制K线图未设定更精修的参数,关于mplfinance.plot的具体参数设定,可参考官网文件。
import mplfinance as mpf #用于K线图绘制
import matplotlib.pyplot as plt #用于K线图展示
mpf.plot(data,type='candle', #选择绘制K线图
volume=True) #选择同时展示交易量柱状图
plt.show() #展示图像
完整代码:
import pandas as pd #用于数据处理
import numpy as np #用于数据运算
import random #用于数据模拟
a=2500 #最低价下限(和成交量下限)
b=2700 #最高和最低价间隔
c=3000 #最高价上限(成交量上限)
open=np.linspace(0,1,30) #生成开盘价数组盒子
high=np.linspace(0,1,30) #生成最高价数组盒子
low=np.linspace(0,1,30) #生成最低价数组盒子
close=np.linspace(0,1,30) #生成收盘价数组盒子
volume=np.linspace(0,1,30) #生成交易量数组盒子
for i in range(len(high)): #随机模拟数据并放入数组盒子
high[i]=random.randint(b*100,c*100)/100
low[i]=random.randint(a*100,b*100)/100
open[i]=random.randint(int(low[i]*100),int(high[i]*100))/100
close[i]=random.randint(int(low[i]*100),int(high[i]*100))/100
volume[i] = random.randint(a * 100, c * 100) / 100
date=pd.date_range('20210901','20210930').strftime("%Y-%m-%d").tolist() #模拟生成日期
names=['date','open','high','low','close','volume'] #定义数据标签名字
dataframe=pd.DataFrame([date,open,high,low,close,volume],
index=names) #把数据装入列表
aDataframe=pd.DataFrame(dataframe.values.T,columns=names) #把列表数据行和列转置
aDataframe.to_excel('C:/Users/putongqi/Desktop/data3.xlsx', #把数据存到电脑Excel,
index=None) #取消行索引
data=pd.read_excel('C:/Users/putongqi/Desktop/data3.xlsx', #读取Excel数据
index_col='date') #把日期列作为行索引
data.index=pd.DatetimeIndex(data.index) #把日期索引转为时间序列格式
import mplfinance as mpf #用于K线图绘制
import matplotlib.pyplot as plt #用于K线图展示
mpf.plot(data,type='candle', #选择绘制K线图
volume=True) #选择同时展示交易量柱状图
plt.show() #展示图像