选定日期,筛选涨幅达到10%的股票,并画出K线图。观察涨停后股票走势。

由于创业板涨停板为20%,科创板20%,北交所30%。因此筛选出的涨停股票不完全准确。考虑到目前市场打板主要集中在10%的主板股票中,暂时先观察10%涨幅股票。

参考:
【python量化交易学习】pandas获取tushare股票交易数据,写入mysql数据库 或导出到excel。

从mysql中读取数据

strategy_select_share.py 筛选出涨停股票代码。

# 建立mysql数据库的连接
from sqlalchemy import create_engine
import pandas as pddef select_up_limit(tradedate):conn = create_engine('mysql+pymysql://root:123456@localhost:3306/qtrade', encoding='utf8')mysql_1 = "SELECT  * FROM dailytrade WHERE trade_date = '" + tradedate + "' "df1 = pd.read_sql(mysql_1, conn)list = []for i in range(len(df1)):high = df1["high"][i]low = df1["low"][i]close = df1["close"][i]pre_close = df1["pre_close"][i]# 涨停价10%up_limit = pre_close * 1.1 - 0.01up_limit2 = pre_close * 1.1 + 0.01#开板或者拉版if high != low and up_limit <= close < up_limit2:list.append(df1["ts_code"][i])return list
from typing import List, Union
from pyecharts.charts import Line, Bar, Grid, Page
import pandas as pd
from sqlalchemy import create_engine
from pyecharts import options as opts
from pyecharts.charts import Kline
from strategy_select_share import select_up_limit#从mysql获取数据
def get_data(input_share_code):# 建立mysql数据库的连接conn = create_engine('mysql+pymysql://root:123456@localhost:3306/qtrade', encoding='utf8')# "SELECT  * FROM dailytrade WHERE ts_code = '000001.SZ' "mysql = "SELECT  * FROM dailytrade WHERE ts_code = '" + input_share_code + "' order by trade_date"# 读取交易数据df = pd.read_sql(mysql, conn)# df[['a','b']]#取a、b列trade_values = df[['trade_date', 'open', 'close', 'low', 'high', 'amount', 'pre_close']]# 将格式转化成pyechart使用的格式trade_values_tolist = [trade_values.iloc[i].tolist() for i in range(len(trade_values))]# 解析数据return split_data(data=trade_values_tolist, share_code=input_share_code)#将mysql储存的tushare数据中,提前pyecharts需要的字段
def split_data(data, share_code):# 日期category_data = []# 日期,交易4个价格,交易量values = []# 序号,收盘价,涨跌序号,涨为1,跌为-1volumes = []for i, tick in enumerate(data):category_data.append(tick[0])values.append(tick)volumes.append([i, tick[5], 1 if tick[6] > tick[2] else -1])return {"categoryData": category_data, "values": values, "volumes": volumes, "share_code": share_code}# 计算移动均线。移动平均线(MA)计算方法就是求连续若干天的收盘价的算术平均
def calculate_ma(day_count: int, data):result: List[Union[float, str]] = []for i in range(len(data["values"])):if i < day_count:result.append("-")continuesum_total = 0.0for j in range(day_count):sum_total += float(data["values"][i - j][2])result.append(abs(float("%.3f" % (sum_total / day_count))))return result# 画图
def draw_charts(sharecode) -> Grid:chart_data = get_data(sharecode)share_code = chart_data["share_code"]# 获得数据kline_data = [data[1:-1] for data in chart_data["values"]]# 画K线kline = (Kline()# 加载x轴数据.add_xaxis(xaxis_data=chart_data["categoryData"])# 加载y轴数据.add_yaxis(# K线名称series_name=share_code,# 加载y轴数据y_axis=kline_data,# 设置y轴数据的颜色itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),)# 设置全局变量.set_global_opts(# 图例配置项,隐藏图例legend_opts=opts.LegendOpts(is_show=False, pos_bottom=10, pos_left="center"),# DataZoomOpts:区域缩放配置项。type_: str = "slider",组件类型,可选 "slider", "inside"。# is_show: bool = True, 是否显示 组件。如果设置为 false,不会显示,但是数据过滤的功能还存在。datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside",xaxis_index=[0, 1],range_start=98,range_end=100,),opts.DataZoomOpts(is_show=True,xaxis_index=[0, 1],type_="slider",pos_top="85%",range_start=98,range_end=100,),],yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type="cross",background_color="rgba(245, 245, 245, 0.8)",border_width=1,border_color="#ccc",textstyle_opts=opts.TextStyleOpts(color="#000"),),visualmap_opts=opts.VisualMapOpts(is_show=False,dimension=2,series_index=5,is_piecewise=True,pieces=[{"value": 1, "color": "#00da3c"},{"value": -1, "color": "#ec0000"},],),axispointer_opts=opts.AxisPointerOpts(is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"),),brush_opts=opts.BrushOpts(x_axis_index="all",brush_link="all",out_of_brush={"colorAlpha": 0.1},brush_type="lineX",),title_opts=opts.TitleOpts(title = chart_data["share_code"])))# 画 MA 移动均线图line = (Line().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="MA5",y_axis=calculate_ma(day_count=5, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA10",y_axis=calculate_ma(day_count=10, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA20",y_axis=calculate_ma(day_count=20, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA30",y_axis=calculate_ma(day_count=30, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))# 画交易量柱状图bar = (Bar().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="Volume",y_axis=chart_data["volumes"],xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category",is_scale=True,grid_index=1,boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),axislabel_opts=opts.LabelOpts(is_show=False),split_number=20,min_="dataMin",max_="dataMax",),yaxis_opts=opts.AxisOpts(grid_index=1,is_scale=True,split_number=2,axislabel_opts=opts.LabelOpts(is_show=False),axisline_opts=opts.AxisLineOpts(is_show=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),))# Kline And Lineoverlap_kline_line = kline.overlap(line)# Grid Overlap + Bargrid_chart = Grid(init_opts=opts.InitOpts(width="1000px",height="800px",animation_opts=opts.AnimationOpts(animation=False),))grid_chart.add(overlap_kline_line,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),)grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="63%", height="16%"),)return grid_chartdef page_draggable_layout():#选定某一天share_list = select_up_limit('20220228')page = Page(layout=Page.DraggablePageLayout)for i in range(0, len(share_list)):page.add(draw_charts(share_list[i]),)page.render("page_draggable_layout.html")if __name__ == "__main__":page_draggable_layout()

结果:到出pdf再截图


等等

从excel中读取数据

main.py

from typing import List, Union
from pyecharts.charts import Kline, Line, Bar, Grid, Page
import pandas as pd
from pyecharts import options as opts
from share_selected_strategies import chuban# 从mysql获取数据
def get_data(input_share_code, df):# df[['a','b']]#取a、b列trade_values = df[['trade_date', 'open', 'close', 'low', 'high', 'amount', 'pre_close']]# 将格式转化成pyechart使用的格式trade_values_tolist = [trade_values.iloc[i].tolist() for i in range(len(trade_values))]# 解析数据return split_data(data=trade_values_tolist, share_code=input_share_code)# 将mysql储存的tushare数据中,提前pyecharts需要的字段
def split_data(data, share_code):# 日期category_data = []# 日期,交易4个价格,交易量values = []# 序号,收盘价,涨跌序号,涨为1,跌为-1volumes = []for i, tick in enumerate(data):category_data.append(tick[0])values.append(tick)volumes.append([i, tick[5], 1 if tick[6] > tick[2] else -1])return {"categoryData": category_data, "values": values, "volumes": volumes, "share_code": share_code}# 计算移动均线。移动平均线(MA)计算方法就是求连续若干天的收盘价的算术平均
def calculate_ma(day_count: int, data):result: List[Union[float, str]] = []for i in range(len(data["values"])):if i < day_count:result.append("-")continuesum_total = 0.0for j in range(day_count):sum_total += float(data["values"][i - j][2])result.append(abs(float("%.3f" % (sum_total / day_count))))return result# 画图
def draw_charts(sharecode, df_daily) -> Grid:chart_data = get_data(sharecode, df_daily)# 获得数据kline_data = [data[1:-1] for data in chart_data["values"]]# 画K线kline = (Kline().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name=sharecode,y_axis=kline_data,itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),).set_global_opts(legend_opts=opts.LegendOpts(is_show=False, pos_bottom=10, pos_left="center"),datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside",xaxis_index=[0, 1],range_start=0,range_end=100,),opts.DataZoomOpts(is_show=True,xaxis_index=[0, 1],type_="slider",pos_top="85%",range_start=98,range_end=100,),],yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type="cross",background_color="rgba(245, 245, 245, 0.8)",border_width=1,border_color="#ccc",textstyle_opts=opts.TextStyleOpts(color="#000"),),visualmap_opts=opts.VisualMapOpts(is_show=False,dimension=2,series_index=5,is_piecewise=True,pieces=[{"value": 1, "color": "#00da3c"},{"value": -1, "color": "#ec0000"},],),axispointer_opts=opts.AxisPointerOpts(is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"),),brush_opts=opts.BrushOpts(x_axis_index="all",brush_link="all",out_of_brush={"colorAlpha": 0.1},brush_type="lineX",),title_opts=opts.TitleOpts(title=sharecode)))line = (Line().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="MA5",y_axis=calculate_ma(day_count=5, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA10",y_axis=calculate_ma(day_count=10, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA20",y_axis=calculate_ma(day_count=20, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA30",y_axis=calculate_ma(day_count=30, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))bar = (Bar().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="Volume",y_axis=chart_data["volumes"],xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category",is_scale=True,grid_index=1,boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),axislabel_opts=opts.LabelOpts(is_show=False),split_number=20,min_="dataMin",max_="dataMax",),yaxis_opts=opts.AxisOpts(grid_index=1,is_scale=True,split_number=2,axislabel_opts=opts.LabelOpts(is_show=False),axisline_opts=opts.AxisLineOpts(is_show=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),))# Kline And Lineoverlap_kline_line = kline.overlap(line)# Grid Overlap + Bargrid_chart = Grid(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(animation=False),))grid_chart.add(overlap_kline_line,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),)grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="63%", height="16%"),)return grid_chartdef page_draggable_layout():# 选定某一天trade_date = 20220315df_read = pd.read_excel('/Users/PycharmProjects/0317.xlsx', sheet_name="1", engine="openpyxl",index_col=None)df = df_read.loc[df_read["trade_date"] == trade_date]share_list = chuban(df)page = Page(layout=Page.DraggablePageLayout)for i in range(0, len(share_list)):df_daily = df_read.loc[df_read["ts_code"] == share_list[i]]df_daily = df_daily.iloc[::-1]page.add(draw_charts(share_list[i], df_daily),)page.render(str(trade_date) + "日触板股票.html")if __name__ == "__main__":page_draggable_layout()

share_selected_strategies.py

import pandas as pddef chuban(df):df1 = dflist = []for i in range(0, len(df1)):up_10 = '%.2f' % (df1["pre_close"].iloc[i] * 1.1)high = '%.2f' % (df1["high"].iloc[i])# 选出触板if high == up_10:list.append(df1["ts_code"].iloc[i])return listdef tradeamount_5yi(df):# 交易额过5亿df1 = dflist = []# 交易额大于5亿的股票for i in range(0, len(df1)):amount = df1["amount"].iloc[i] / 100000# 选出触板if amount > 5:list.append(df1["ts_code"].iloc[i])return list

结果:
(ma线没出来,不知道问题在哪里?)

等等,太多了,不一一截图了

【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。相关推荐

  1. 【python量化交易学习】pandas获取mysql数据,使用pyecharts画K线图,ma移动均线。

    将pyecharts官方提供的数据源,替换成已经存在mysql中的数据.画出专业的k线图(k线+ma移动均线+交易额柱状图(单位是千)) 参考: [python量化交易学习]pandas获取tusha ...

  2. python画出K线图及技术指标

    目录 安装mplfinance及Ta-lib 画图 安装mplfinance及Ta-lib mplfinance是基于matplotlib的金融数据可视化分析模块,前身是mpl_finance,比起m ...

  3. Python量化交易学习笔记(1)

    Python量化交易学习笔记(1) http://zwpython.com/ http://www.topquant.vip/?p=2275 [更多参见] <zwPython,目前最好的py开发 ...

  4. Python量化交易学习笔记(36)——backtrader多股回测避坑3

    本文继续记录多股回测时可能遇到的异常情况. 坑描述 多股回测时,当日期达到所有股票的技术指标都能够计算出有效值后,backtrader才开始进行回测.由于这种逻辑的存在,如果某些股票在回测周期的最后几 ...

  5. Python数据可视化:pyecharts库绘制K线图

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于菜J学Python ,作者王小王-123 Python爬虫.数据分析.网站开发等案例 ...

  6. 《Python数据可视化之Matplotlib与Pyecharts》之K线图

    10.5.1  K线图及其参数配置 K线图又称蜡烛图,股市及期货市场中的K线图的画法包含四个数据,即开盘价.最高价.最低价.收盘价,所有的k线都是围绕这四个指标展开,反映股票的状况.如果把每日的K线图 ...

  7. Python量化交易学习入门

    量化交易-Python实现 一.量化交易的流程和概念 1.数据分析I2O流程 2.量化交易和高频交易.自动交易的区别 3.量化交易的流程 二.量化交易的分类 三:常用量化框架 四.一个完整的策略 五. ...

  8. Python量化交易学习笔记(21)——A股股票列表更新

    在zwPython2020中,股票数据下载更新时,所读取的股票列表文件的目录位置为"zwPython\TQDat\TQDown2020v1\data\tq_wrk_code.csv" ...

  9. Python量化交易学习笔记(46)——通达信日线数据获取

    序 从2020年初开始接触量化,马上就要满一年了.在这一年里,想过去做量化,想过去做机器学习,想过去做少儿编程教育.就这样大概折腾了小半年时间,最后在CSDN上看到这样一句话:"你把时间投在 ...

最新文章

  1. 油品调和计算软件_油品调合利器——中控supBlend油品在线优化调合解决方案
  2. linux 屏幕输出 高亮_如何设置SecureCRT窗口输出代码关键字高亮设置
  3. SQL—已更新或删除的行值要么不能使该行成为唯一行。。。
  4. Linux:nice函数
  5. 分析决策树算法和逻辑回归算法的不同之处
  6. 公共界面_小区公共区域广告收益究竟归谁?
  7. 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
  8. Range回源和视频拖拽播放
  9. (网页)中的简单的遮罩层
  10. Android清理设备内存具体完整演示样例(二)
  11. Shell命令-文件及内容处理之grep(egrep)、join
  12. Linux 小知识翻译 - 「/proc 文件夹」
  13. SpringCloud系列研究---Eureka服务消费Feign
  14. 【Oracle】重置参数
  15. drools规则拼接_Drools-规则层次结构和条件执行
  16. 计算机蓝屏代码0x0000007b,win7系统开机蓝屏提示STOP:0X0000007B错误代码怎么办
  17. 户外运动装备新品--云息智能定位胸牌
  18. 11个免费高清图片下载站
  19. 关于 如何写批处理文件
  20. bitbucket基本操作

热门文章

  1. 分区函数Partition By的用法
  2. WMS系统学习之ModernWMS
  3. java 设置utc时间格式_UTC时间和北京时间(Java处理)
  4. 手机里的照片导入计算机的方法,如何把iphone照片导入电脑 四种方法分享【图文】...
  5. kass中lisp文件_Lisp之文件操作
  6. 电影与幸福感期末答案和平时测试答案
  7. 序列模型与注意力机制总结
  8. msk 频偏_基于MSP430的MSK调制解调实现.doc
  9. ::before和::after伪元素的使用及优惠券案例
  10. Bambook 稍后阅读 V1.01 发布