当前位置:主页 > 氦柯四 >

用python量化分析股市:画K线图

  为了方便查看数据分析结果可视化,我们可以画出K线图。

  股市及期货市场中的K线图的画法包含四个数据,即开盘价、最高价、最低价、收盘价,所有的k线都是围绕这四个数据展开,反映大势的状况和价格信息。如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可画出周K线图、月K线图。

  K线图这种图表源处于日本德川幕府时代,被当时日本米市的商人用来记录米市的行情与价格波动,后因其细腻独到的标画方式而被引入到股市及期货市场。目前,这种图表分析法在我国以至整个东南亚地区均尤为流行。由于用这种方法绘制出来的图表形状颇似一根根蜡烛,加上这些蜡烛有黑白之分,因而也叫阴阳线图表。通过K线图,我们能够把每日或某一周期的市况表现完全记录下来,股价经过一段时间的盘档后,在图上即形成一种特殊区域或形态,不同的形态显示出不同意义。我们可以从这些形态的变化中摸索出一些有规律的东西出来。K线图形态可分为反转形态、整理形态及缺口和趋向线等。

  mplfinance是python画K线图的扩展库,来自matplotlib.pyplot的扩展,版本改名升级多次。最新版本为'0.12.8b9' pip安装命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mplfinance

  import mplfinance as mpfimport pandas as pd# 导入DataFrame数据,处理日期格式问题import stock #导入股票数据接口模块,查看系列文章,源码文件附文后

  def 读取数据(股票代码,天数,截止日期):# 导入股票数据 df = stock.读取csv数据(股票代码,天数,截止日期) df.index.name='Date' #mplfinace默认索引名为'Date',这里需要改下索引名称 #默认绘K线图能识别的列表名为['Open','High','Low','Close','Volume'],这里对列名称分别改名。

  df.rename( columns={'开盘价': 'Open', '最高价': 'High', '最低价': 'Low', '收盘价': 'Close', '成交量': 'Volume'}, inplace=True) # 索引转换为绘图能识别的日期格式 df.index = pd.to_datetime(df.index) return df

  # 导入数据股票代码='000001'天数 = 100截止日期="20220312"df = 读取数据(股票代码,天数,截止日期)print(df)

  # type:绘制图形的类型,有candle, renko, ohlc, line等# 此处选择candle,即K线图# mav(moving average):均线参数,此处设置5,10,20日线# volume:布尔类型,设置是否显示成交量,默认False# datetime_format,设置日期显示格式# title:设置标题# y_label:设置纵轴主标题# y_label_lower:设置成交量图一栏的标题# figratio:设置图形纵横比# figscale:设置图形尺寸(数值越大图像质量越高)

  #绘图参数设置

  绘图参数= dict(type='candle', mav=(5, 10, 20), volume=True, datetime_format="%Y-%m-%d",title=" 股票代码 %s K线图" % (股票代码), ylabel='股票蜡烛价格', ylabel_lower='成交量', figratio=(15, 10), figscale=10)

  # 设置marketcolors# up:设置K线线柱颜色,up意为收盘价大于等于开盘价# down:与up相反,这样设置与国内K线颜色标准相符# edge:K线线柱边缘颜色(i代表继承自up和down的颜色),下同。详见官方文档)# wick:灯芯(上下影线)颜色# volume:成交量直方图的颜色# inherit:是否继承,选填mc = mpf.make_marketcolors( up='red', down='black', edge='i', wick='i', volume='in', inherit=True)# 设置图形风格# gridaxis:设置网格线位置# gridstyle:设置网格线线型# y_on_right:设置y轴位置是否在右s = mpf.make_mpf_style(gridaxis='both', gridstyle='-.', y_on_right=True, marketcolors=mc)

  # 图形绘制# show_nontrading:是否显示非交易日,默认False# savefig:导出图片,填写文件名及后缀mpf.plot(df, **绘图参数,style=s, show_nontrading=False)mpf.show()

  代码运行效果:

  画K线图

  源码格式如下:

  stock.py数据接口源码:

  import pandas as pdcode="002191" #股票代码dayss=100 #截止日期之前天数dayend="20220211" #截止日期dbfile="E:炒股软件项目股票数据采集csvtodb20220312.db" #sqlite数据库存放位置path="E:炒股软件项目股票数据采集沪深个股历史日线数据" #csv文件目录myini={"用户名":"root","密码":"rootlizigushi","域名ip":"127.0.0.1","端口号":23306,"数据库名":"stockx"} #mysql数据库配置文件def 读取csv数据(code,dayss,dayend): date_end_str=dayend[0:4]+'-'+dayend[4:6]+'-'+dayend[6:8] date_end = datetime.datetime.strptime(date_end_str, "%Y-%m-%d") date_start = (date_end + datetime.timedelta(days=-dayss)).strftime("%Y-%m-%d") date_end = date_end.strftime("%Y-%m-%d") stock_X=pd.read_csv(path+code+".csv",usecols=["日期","开盘价","收盘价","最高价","最低价","成交量"],index_col='日期',encoding='gbk') stock_X=stock_X.loc[(stock_X.index >= date_start) & (stock_X.index <= date_end )] stock_X=stock_X.sort_index() return stock_Xdef 读取mysql数据(code,dayss,dayend): date_end_str=dayend[0:4]+'-'+dayend[4:6]+'-'+dayend[6:8] date_end = datetime.datetime.strptime(date_end_str, "%Y-%m-%d") date_start = (date_end + datetime.timedelta(days=-dayss)).strftime("%Y-%m-%d") date_end = date_end.strftime("%Y-%m-%d") pymysql.install_as_MySQLdb() dbstring="mysql+mysqldb://%(用户名)s:%(密码)s@%(域名ip)s:%(端口号)d/%(数据库名)s?charset=utf8" %(myini) engine=create_engine(dbstring) sql="select 日期,开盘价,收盘价,最高价,最低价,成交量 from eb_%s where 日期 >= '%s' and 日期 <= '%s'" %(code,date_start,date_end) stock_X=pd.read_sql(sql,engine,index_col='日期') stock_X=stock_X.sort_index() return stock_Xdef 读取sqlite数据(code,dayss,dayend): date_end_str=dayend[0:4]+'-'+dayend[4:6]+'-'+dayend[6:8] date_end = datetime.datetime.strptime(date_end_str, "%Y-%m-%d") date_start = (date_end + datetime.timedelta(days=-dayss)).strftime("%Y-%m-%d") date_end = date_end.strftime("%Y-%m-%d") conn=sqlite3.connect(dbfile) sql="select 日期,开盘价,收盘价,最高价,最低价,成交量 from eb_%s where 日期 >= '%s' and 日期 <= '%s'" %(code,date_start,date_end) stock_X=pd.read_sql(sql,conn,index_col='日期') stock_X=stock_X.sort_index() conn.close() return stock_X

  stock.py源码格式如下:

  举报/反馈