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 panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: