python、talib选股:自动工具介绍以及倒锤头形态搜索并可视化显示

本文主要是介绍python、talib选股:自动工具介绍以及倒锤头形态搜索并可视化显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 前言

2 工具介绍

1.1 界面

 3 测试搜索倒锤头形态


1 前言

本来想研究金融,可是看到代码就烦,难道还要特意去学习python编程?那样岂不浪费好多发cai的时间?估计很多股友跟我的经历很相似。想从网上找个好的python工具,但是在网上找来找去都没找到特别中意的,全都是一堆代码,没法直接拿来主义。没办法还是边学习编程边炒gu养家吧。

2 工具介绍

这个工具的特点是,一是不用安装,直接运行;二是后台集成了python,功能强大;三是扩展性强,后面需要什么功能模块直接安装就行;四是不用敲代码,一行代码都不用敲,点几下鼠标就出结果了;五是后面会不断扩充功能,因为我要用它炒gu挣钱养家糊口,功能不强大不行;六是增加了功能我会马上发布新程序来。股友们拿来主义随便用;七是。。。。。。

1.1 界面

刚开始界面有点简陋啊,将就吧。

 

 3 测试搜索倒锤头形态

选中一个已经导出的代码,然后点击“搜:倒锤头”,几秒钟后浏览器显示结果。下面的滑块可以左右平移、放大缩小。

 

记录一下实际使用的python代码:

from typing import List, Union
import talib
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Grid
import os
import pandas as pd'''
def net_split_data(data):category_data = []values = []volumes = []for i, tick in enumerate(data):category_data.append(tick[0])values.append(tick)volumes.append([i, tick[4], 1 if tick[1] > tick[2] else -1])return {"categoryData": category_data, "values": values, "volumes": volumes}def net_get_data():response = requests.get(url="https://echarts.apache.org/examples/data/asset/data/stock-DJI.json")json_response = response.json()# 解析数据return net_split_data(data=json_response)
'''def split_data(data):category_data = []values = []volumes = []# flags = []for i, tick in enumerate(data.values.tolist()):category_data.append(tick[0])values.append(tick)volumes.append([i, tick[5], 1 if tick[1] > tick[2] else -1])# flags.append([i, 0])open_p = pd.DataFrame(values)[1]close_p = pd.DataFrame(values)[2]low_p = pd.DataFrame(values)[3]high_p = pd.DataFrame(values)[4]array_cdl2c = talib.CDLINVERTEDHAMMER(open_p, high_p, low_p, close_p) # 倒锤头# l_array_cdl2c = array_cdl2c.values.tolist()# 由于不知道如何在k线图中叠加标记,使用这种变通方法,即替换成交量图中# 的成交量为乌鸦标记# 即:用 array_cdl2c 的值替换 df_volumes 中的成交量# 列表转化为DataFrame方便列操作df_volumes = pd.DataFrame(volumes)df_volumes[1] = array_cdl2cdf_volumes[2] = 1 # 2只乌鸦标志颜色统一设置为绿色volumes = df_volumes.values.tolist()return {"categoryData": category_data, "values": values, "volumes": volumes}def get_data(code):# df_tdx = pd.read_feather(r'./dataout/tdx/'+code+r'.day.feather')# df_tdx.index=pd.to_datetime(df_tdx.Date, format = '%Y%m%d')# df_tdx_b=df_tdx.truncate(before=start_date, after = end_date)# df_tdx_b['Openinterest']=0# df_tdx_b.rename(columns={'vol':'volume'}, inplace = True)# df_tdx_b=df_tdx_b[['Open','High','Low','Close','Volume','Openinterest']]# return split_data(data=df_tdx_b)df_tdx = pd.read_feather(r'./data/tdx/'+code+r'.day.feather')df_tdx.drop('Amout', axis=1, inplace=True)df_tdx.Date=pd.to_datetime(df_tdx.Date, format = '%Y%m%d')df_tdx.Date=df_tdx.Date.map(lambda x:x.strftime('%Y-%m-%d'))# df_tdx.index=pd.to_datetime(df_tdx.Date, format = '%Y%m%d')# 调整列顺序df_tdx = df_tdx.loc[:,['Date', 'Open', 'Close', 'Low', 'High', 'Volume']]# df_tdx_b=df_tdx.truncate(before=start, after = end)# df_tdx_b['Openinterest']=0# df_tdx.rename(columns={'vol':'Volume'}, inplace = True)# df_tdx_b=df_tdx_b[['Open','High','Low','Close','Volume','Openinterest']]return split_data(data=df_tdx)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][1])result.append(abs(float("%.3f" % (sum_total / day_count))))return resultdef draw_charts():kline_data = [data[1:-1] for data in chart_data["values"]]kline = (Kline().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="stock index",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=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",),))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="1400px",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%"),)grid_chart.render("render.html")# 打开网页os.system("render.html")if __name__ == "__main__":'''df_tdx = pd.read_feather(r'./dataout/tdx/bj871396.day.feather')df_tdx.drop('Amout', axis=1, inplace=True)df_tdx.Date=pd.to_datetime(df_tdx.Date, format = '%Y%m%d')df_tdx.Date=df_tdx.Date.map(lambda x:x.strftime('%Y-%m-%d'))# df_tdx.index=pd.to_datetime(df_tdx.Date, format = '%Y%m%d')# df_tdx.Date = df_tdx.astype({'Date':'str'})# df_tdx.Date = df_tdx.Date.map(lamda x:)# df_tdx.rename(columns={'vol':'Volume'}, inplace = True)# df_tdx_b=df_tdx_b[['Open','High','Low','Close','Volume','Openinterest']]# print(df_tdx.dtypes)# print(list(df_tdx))df_tdx = df_tdx.loc[:,['Date', 'Open', 'Close', 'Low', 'High', 'Volume']]# print(list(df_tdx))d_category_data = []d_values = []d_volumes = []# d_flags = []for i, tick in enumerate(df_tdx.values.tolist()):d_category_data.append(tick[0])d_values.append(tick)d_volumes.append([i, tick[5], 1 if tick[1] > tick[2] else -1])# d_flags.append([i, 0])open_p = pd.DataFrame(d_values)[1]close_p = pd.DataFrame(d_values)[2]low_p = pd.DataFrame(d_values)[3]high_p = pd.DataFrame(d_values)[4]array_cdl2c = talib.CDLINVERTEDHAMMER(open_p, high_p, low_p, close_p)# array_cdl2c 与 d_volumes合并,# 然后用 array_cdl2c 的之替换 df_volumes 中的成交量# 列表转化为DataFrame方便列操作df_volumes = pd.DataFrame(d_volumes)df_volumes[1] = array_cdl2c# l_array_cdl2c = array_cdl2c.values.tolist()''''''response = requests.get(url="https://echarts.apache.org/examples/data/asset/data/stock-DJI.json")json_response = response.json()# 解析数据category_data = []values = []volumes = []for i, tick in enumerate(json_response):category_data.append(tick[0])values.append(tick)volumes.append([i, tick[4], 1 if tick[1] > tick[2] else -1])# return {"categoryData": category_data, "values": values, "volumes": volumes}'''# net_chart_data = net_get_data()chart_data = get_data('bj430198')# chart_data = net_get_data()draw_charts()

程序有点大,近90M:

谁想用用试试程序就在评论区留下邮箱吧,我直接发你邮箱。

有什么建议请在评论区留言,不接受其他交流方式,有合适的建议我就加到程序里。

这篇关于python、talib选股:自动工具介绍以及倒锤头形态搜索并可视化显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278085

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子