看k线卖股票pdf下载(股国投瑞银景气基金票k线战法 史蒂夫pdf)

先上终究作用图:终究作用便是期望生成一个pdf文件,包括多只股票的K线图以及买入卖出点(图中部分赤色方框为pdf软件的注释功用制作的),由于自己技能面剖析首要依托裸K,辅佐参阅成交量、振幅、MACD进行买卖,所以本文也仅仅抛砖引玉,给咱们一个思路方向,详细复盘目标可自行设计(其间股票历史数据依据tushare渠道,K线图依据mplfinance库,MACD目标的轮子是用的talib库)。

别的,为什么要用pdf,也是由于个人有一个pad,用pad复盘很简略去画画写写,搞一些技能面剖析的线十分便利,而且可以重复复盘,所以还用到了reportlab这个库来生成pdf文件。

本办法用到的数据是依据tushare渠道,里边数据许多都可以用,这儿我只用了最根底的获取日K的办法,可以将日K的历史数据悉数获取,详细办法后续会介绍到,假如想进一步得到股价当日实时数据,还调用了easyquotation库取得当日的分时数据,假如做长时刻复盘倒也不是很重要。

用到的一切引证如下:

import numpy as np\nimport pandas as pd\nimport tushare as ts\nimport mplfinance as mpf\nimport os\nimport easyquotation\nfrom reportlab.lib.pagesizes import A4, landscape\nfrom reportlab.pdfgen import canvas\nimport matplotlib.pyplot as plt\nimport datetime\nfrom talib import MACD\n\nquotation = easyquotation.use('sina') # 调用easyquotation接口\nts.set_token('***') # 进入tushare的钥匙\ndate1 = datetime.datetime.now().strftime('%Y%m%d') # 记载日期,生成文件名备用

为了确保后续中文显现正常,参加这两个

plt.rcParams['font.sans-serif'] = ['SimHei']\nplt.rcParams['axes.unicode_minus'] = False

首先是树立自己复盘股票信息表格。我这边里后续程序首要用到的是股票代码、股票称号、形状开端时刻、预设止损价、进场时刻、进场时刻。

使用pandas读取数据

orgdata = pd.read_excel('复盘股票.xlsx', converters={'代码': str, '形状开端': str, '进场': str, '进场': str})

之后,为了生成pdf,先初始化信息。

(w, h) = landscape(A4)\nf_pdf = "复盘图/复盘图_%s.pdf" % date1\nc = canvas.Canvas(f_pdf, pagesize=(w, h))\n\ndxx = (w-20)\ndyy = (h-20)\nxx = 10\nyy = h-10-dyy

简略解释一下,这几个参数首要用于将生成的K线图导入pdf的方位和巨细,以及文件目录。

之后,便是遍历自己的复盘股票信息表,完结读取数据,制作K线图,写入pdf,咱们就把循环里边的内容逐一介绍下。

for ind, ro in orgdata.iterrows():\n"""\n1. 获取数据\n2. 制作K线\n3. 写入pdf\n"""\nend

首先是获取数据

# 读取数据\n code = '%s.%s' % (ro['代码'][2:], ro['代码'][:2])\n stock_total = ts.pro_bar(ts_code=code, adj='qfq', start_date="20190101")[["trade_date", "open", "close", "high", 'low', 'vol']][::-1]\n\n # 弥补数据\n stock_add = quotation.real(code[:-3])[code[:-3]]\n nowdate = stock_add['date'].replace('-', '')\n if nowdate > stock_total['trade_date'].max():\n stock_total = stock_total.append({'trade_date': nowdate,\n 'open': stock_add["open"],\n 'close': stock_add["now"],\n 'high': stock_add["high"],\n 'low': stock_add["low"],\n 'vol': stock_add["turnover"]/100,\n }, ignore_index=True)\n _, _, macdhist = MACD(stock_total["close"], fastperiod=12, slowperiod=26, signalperiod=9)\n stock_total["MACD"] = macdhist * 2\n # 删选行情\n stock_total = stock_total[stock_total["trade_date"] >= ro["形状开端"]]\n\n stock = stock_total.copy()\n stock.rename(columns={'trade_date': 'date', 'vol': 'volume'}, inplace=True)\n\n stock["in"] = np.nan\n stock.loc[stock["date"] == ro["进场"], "in"] = stock.loc[stock["date"] == ro["进场"], "low"]\n stock["out"] = np.nan\n stock.loc[stock["date"] == ro["进场"], "out"] = stock.loc[stock["date"] == ro["进场"], "high"]

这儿就涉及到tushare的用法了,由于我只用到裸K数据,所以一行代码就搞定了,当然,tushare许多获取数据办法也都是一行搞定,咱们如有需求可以去其官网找找。

代码中还用到了弥补数据,依据easyquotation获取数据进行的添加当日实时信息。

再便是生成了macdhist即MACD技能目标,后边绘图时会用到。

删去行情便是将不想显现的历史数据进行过滤掉。

stock中"in" 和 "out"字段,则代表进场和进场点,可画出如下所示的图样。这儿有一个小问题,便是在自己的股票信息表中,一行只记载了一只股票的进场进场时刻,也便是假如写了同一只股票屡次进进场的话只会生成多个K线图,假如想放到同一张K线图里,我这边做了一点小处理。

if code in olddict:\n for temp in olddict[code]:\n stock.loc[stock["date"] == temp["进场"], "in"] = stock.loc[stock["date"] == temp["进场"], "low"]\n stock.loc[stock["date"] == temp["进场"], "out"] = stock.loc[stock["date"] == temp["进场"], "high"]\n else:\n olddict[code] = []\n\n olddict[code].extend([ro])\n \n if ro["同只股"] == -1:\n continue

在股票信息股中参加“同只股”字段,并引进olddict变量贮存股票信息,假如碰到同一只股,且“同只股”为-1,说并不想制作,只记载信息不进行制作,使用continue完结该轮循环,之后下次再碰到相同股将之前的股进进场信息汇总制作于当时K线图中,终究可以构成如下款式,即有了多个进出点接下来是,使用K线图,这儿K线图就默认为蜡烛图了,使用mplfinance可以制作林林总总的K线图,详细也可自行探究。

stock['date'] = pd.to_datetime(stock['date'], format='%Y%m%d')\n stock.set_index("date", inplace=True)\n add_plot = [\n mpf.make_addplot((stock['high'] - stock['low']) / stock['open'], panel=1, color='y'),\n mpf.make_addplot(stock["MACD"], panel=2, color='r'),\n ]\n if stock["in"].isnull().sum() < len(stock["in"]):\n add_plot.append(mpf.make_addplot(stock["in"], scatter=True, markersize=20, marker='^', color='r'))\n if stock["out"].isnull().sum() < len(stock["out"]):\n add_plot.append(mpf.make_addplot(stock["out"], scatter=True, markersize=20, marker='v', color='g'))\n\n fname = '复盘图/%s.png' % str(index).zfill(6)\n index += 1\n save = dict(fname=fname, dpi=600, bbox_inches='tight')\n mpf.plot(stock, figsize=(12, 10), type='candle', title='%s-%s' % (ro['称号'], ro['进场'][:6]), datetime_format='%Y-%m-%d',\n addplot=add_plot, volume=True, tight_layout=False, savefig=save, ylabel='Profit Rate')

这儿便是mplfinance的一些根本用法,全体逻辑便是将日期作为数据索引,后直接调用plot函数制作K线图和成交量,附加一些其他目标,如MACD、进进场点,就使用addplot的办法,

这儿需求留意的是,由于咱们后需求生成pdf文件,所以这儿先保存生成png图片格式到本地目录中。

终究便是让之前初始化生成的pdf读取该图像文件,终究不断循环将图片导入

# 存入pdf\n c.drawImage(fname, xx, yy, dxx, dyy)\n # 换页\n c.showPage()

循环完毕后,生成终究的复盘pdf文件:

c.showPage()\nc.save()\nos.startfile(os.path.join(os.getcwd(), "复盘图/复盘图_%s.pdf" % date1))

这样就完毕了。

再次着重一下,本文仅仅做了一点简略思路的阐明,仅仅针对我个人的买卖战略中技能面剖析树立的一个复盘思路,假如咱们也有相似的需求,且可以协助到咱们我就十分高兴了,究竟现在网络上仍是有许多轮子可认为咱们所用,终究祝咱们牛年牛运来,满是大牛股!完好源码我也放这了,咱们自行取用~

import numpy as np\nimport pandas as pd\nimport tushare as ts\nimport mplfinance as mpf\nimport os\nimport easyquotation\nfrom reportlab.lib.pagesizes import A4, landscape\nfrom reportlab.pdfgen import canvas\nimport matplotlib.pyplot as plt\nimport datetime\nfrom talib import MACD\n\nplt.rcParams['font.sans-serif'] = ['SimHei']\nplt.rcParams['axes.unicode_minus'] = False\n\nts.set_token('***')\n\ndate1 = datetime.datetime.now().strftime('%Y%m%d')\nolddict = {}\n# 看盘:1,复盘:0\nlook_re = 0\n# 读取数据\norgdata = pd.read_excel('复盘股票.xlsx', converters={'代码': str, '形状开端': str, '进场': str, '进场': str})\n\n# 当日弥补信息\nquotation = easyquotation.use('sina')\n\n# 生成pdf信息\n(w, h) = landscape(A4)\nf_pdf = "复盘图/复盘图_%s.pdf" % date1\nc = canvas.Canvas(f_pdf, pagesize=(w, h))\n\ndxx = (w-20)\ndyy = (h-20)\nxx = 10\nyy = h-10-dyy\n\nindex = 0\n\nfor ind, ro in orgdata.iterrows():\n\n print(ind+1, len(orgdata), ro["称号"])\n # 读取数据\n code = '%s.%s' % (ro['代码'][2:], ro['代码'][:2])\n stock_total = ts.pro_bar(ts_code=code, adj='qfq', start_date="20190101")[["trade_date", "open", "close", "high", 'low', 'vol']][::-1]\n\n # 弥补数据\n stock_add = quotation.real(code[:-3])[code[:-3]]\n nowdate = stock_add['date'].replace('-', '')\n if nowdate > stock_total['trade_date'].max():\n stock_total = stock_total.append({'trade_date': nowdate,\n 'open': stock_add["open"],\n 'close': stock_add["now"],\n 'high': stock_add["high"],\n 'low': stock_add["low"],\n 'vol': stock_add["turnover"]/100,\n }, ignore_index=True)\n _, _, macdhist = MACD(stock_total["close"], fastperiod=12, slowperiod=26, signalperiod=9)\n stock_total["MACD"] = macdhist * 2\n # 删选行情\n stock_total = stock_total[stock_total["trade_date"] >= ro["形状开端"]]\n\n stock = stock_total.copy()\n stock.rename(columns={'trade_date': 'date', 'vol': 'volume'}, inplace=True)\n\n stock["in"] = np.nan\n stock.loc[stock["date"] == ro["进场"], "in"] = stock.loc[stock["date"] == ro["进场"], "low"]\n stock["out"] = np.nan\n stock.loc[stock["date"] == ro["进场"], "out"] = stock.loc[stock["date"] == ro["进场"], "high"]\n\n # 假如之前有此股票,则增参加场\n if code in olddict:\n for temp in olddict[code]:\n stock.loc[stock["date"] == temp["进场"], "in"] = stock.loc[stock["date"] == temp["进场"], "low"]\n stock.loc[stock["date"] == temp["进场"], "out"] = stock.loc[stock["date"] == temp["进场"], "high"]\n else:\n olddict[code] = []\n\n olddict[code].extend([ro])\n\n if ro["预设止损价"] == -1:\n continue\n\n stock['date'] = pd.to_datetime(stock['date'], format='%Y%m%d')\n stock.set_index("date", inplace=True)\n add_plot = [\n mpf.make_addplot((stock['high'] - stock['low']) / stock['open'], panel=1, color='y'),\n mpf.make_addplot(stock["MACD"], panel=2, color='r'),\n ]\n if stock["in"].isnull().sum() < len(stock["in"]):\n add_plot.append(mpf.make_addplot(stock["in"], scatter=True, markersize=20, marker='^', color='r'))\n if stock["out"].isnull().sum() < len(stock["out"]):\n add_plot.append(mpf.make_addplot(stock["out"], scatter=True, markersize=20, marker='v', color='g'))\n\n fname = '复盘图/%s.png' % str(index).zfill(6)\n index += 1\n save = dict(fname=fname, dpi=600, bbox_inches='tight')\n mpf.plot(stock, figsize=(12, 10), type='candle', title='%s-%s' % (ro['称号'], ro['进场'][:6]), datetime_format='%Y-%m-%d',\n addplot=add_plot, volume=True, tight_layout=False, savefig=save, ylabel='Profit Rate')\n # 存入pdf\n c.drawImage(fname, xx, yy, dxx, dyy)\n # 换页\n c.showPage()\n\nc.showPage()\nc.save()\nos.startfile(os.path.join(os.getcwd(), "复盘图/复盘图_%s.pdf" % date1))

发布于 2023-12-21 06:12:12
收藏
分享
海报
75
目录

    推荐阅读