原始文件下载地址:股票历史数据和K线图趋势线的绘制-VB文档类资源-CSDN下载

文章目录

前言

一、目标

二、方法

三、界面和使用说明

四、代码说明

1.查询历史数据

2.绘制K线图和趋势线

3.清除excel中除按钮外的所有图形

4.绘制K线图

总结


前言

虽然现在各种股票APP都可以轻松查看股票K线图,但是自动生成趋势图却常常需要收费,因此考虑自己用excel做一个股票K线和趋势图的表格,可以通过股票代码和简单的设置,生成股票K线图和趋势图。

一、目标

1、根据股票代码查询历史数据;

2、根据历史数据绘制K线图和高低点趋势图。

二、方法

1、通过VBA程序,从网络上获取股票的历史数据;

2、通过VBA程序,选取需要的天数的数据,绘制K线图和趋势线。

三、界面和使用说明

1、在代码后输入股票代码;

2、设定缩放比例(缩放比例应与估价对应,估价高时,比例低,估价低时,比例高,以便画出的K线图更好看);

3、选择需要绘制K线的天数;

4、点击“更新数据”按钮,自动运行VBA宏程序,查询历史数据并绘制K线图和趋势图。

四、代码说明

1.查询历史数据

代码如下:

Sub 历史数据查询()Dim tt = Timer  '计时开始Dim x As LongDim y As LongDim I As LongApplication.ScreenUpdating = False '关闭屏幕更新,提升速度[2:65536] = "" '清除3-65536行的数据x = Application.CountA(Worksheets("历史数据").Range("E1:E1"))  '计算代码的数量For I = 2 To x + 1'Worksheets("历史数据").Cells(1, (3 + I)) = "'" & Right(Worksheets("代码").Cells(I, 1), 6)y = Application.CountA(Worksheets("历史数据").Range("A1:A65536")) + 1 '计算已有内容的行的数量wy = IIf(Worksheets("历史数据").Cells(1, (3 + I)) < 600000, "1", "0") & Worksheets("历史数据").Cells(1, (3 + I)) '根据A列单元格中的代码查询历史数据wy = "http://quotes.money.163.com/service/chddata.html?code=" & wy   '组成网络地址With ActiveSheet.QueryTables.Add(Connection:="URL;" & wy, Destination:=Range("A" & (1 + y)))  '使用with函数获取历史数据.Refresh 0End WithNext ICells(2, 17) = "阶段低点"Cells(2, 18) = "阶段高点"[A:A].Replace "None", ""   '用空白替换NoneRange("a2:a65536").TextToColumns [a2], 1, , , , , 1   '数据分列显示[A:P].Columns.AutoFitCall 生成K线图Application.ScreenUpdating = True '打开屏幕更新MsgBox "   共耗时:" & WorksheetFunction.Text(Timer - t, "0.00秒")    '显示程序执行用时End Sub

(1)统计程序执行用时,并以弹窗形式显示

代码如下:

Dim t
t = Timer(程序主体)MsgBox "   共耗时:" & WorksheetFunction.Text(Timer - t, "0.00秒")    '显示程序执行用时

(2)数据分列和自动调整列宽

代码如下:

Range("a2:a65536").TextToColumns [a2], 1, , , , , 1   '数据分列显示
[A:P].Columns.AutoFit '自动调整A列到P列的列宽

2.绘制K线图和趋势线

代码如下:

Sub 生成K线图()'定义变量Dim X0, X1, I, Lx, Ly, k, Highprice, LowpriceDim Fy1, rFx1, rFy1Dim ArrDim shp As Object'清空单元格内的数据[Q3:Z400] = ""'确定数据源EndRow = Cells(1, 9)          '统计有数据的最后一行的行号Arr = Range("A1", Cells(EndRow, "I"))   '数据源'确定波段的高低点Highprice = Cells(3, 5)Lowprice = Cells(3, 6)If Cells(3, 4) > Cells(3, 7) Then       '如果最后一天的收盘价大于开盘价,则当天保留最高价,否则保留最低价Cells(3, 18) = HighpriceElseCells(3, 17) = LowpriceEnd IfFor j = 4 To EndRow'获取高点If (Cells(j, 5) > Cells(j - 1, 5)) * (Cells(j, 5) > Cells(j + 1, 5)) Then '如果当日最高点大于前一日和后一日的最高点Cells(j, 18) = Cells(j, 5)  '将当日数据填入对应高点数据列End IfIf (j > 8) Then'当日最高点为前2日到后3日的最高点时,将当日数据填入对应高点数据列,否则清除对应数据列单元格数据If (Cells(j, 5) = Application.WorksheetFunction.Max(Range(Cells(j - 2, 5), Cells(j + 3, 5)))) ThenCells(j, 18) = Cells(j, 5)ElseCells(j, 18) = ""End IfEnd If'获取低点If (Cells(j, 6) < Cells(j - 1, 6)) * (Cells(j, 6) < Cells(j + 1, 6)) ThenCells(j, 17) = Cells(j, 6)End IfIf (j > 8) ThenIf (Cells(j, 6) = Application.WorksheetFunction.Min(Range(Cells(j - 2, 6), Cells(j + 3, 6)))) ThenCells(j, 17) = Cells(j, 6)ElseCells(j, 17) = ""End IfEnd IfNext j'此处省略部分核心程序,需要请到我的资源下载源文件'开始绘制K线和趋势线'变量赋初值X0 = 1000                                'X0=距离表格最左侧的距离,表示第一条K线在水平方向上的起始位置k = Cells(1, 7)                         'k=Y轴的缩放比例Y0 = Application.WorksheetFunction.Max(Range(Cells(3, 5), Cells(EndRow, 5))) * k + 5 * k  'Y0=距离表格最顶部的距离,表示第一条K线在竖直方向上的起始位置'清除原有图形For Each S In ActiveSheet.ShapesIf S.Type <> 8 Then            '有插入一个窗体控件指定宏S.Delete                   '把不是窗体控件的shape(图片、图形等)清除End IfNext SFor I = 3 To EndRowX1 = 7 * I                          'X1表示K线之间的水平间距Lx = X0 + X1                        'Lx表示K线对应的水平坐标'绘制K线ActiveSheet.Shapes.AddLine Lx, Y0 - Arr(I, 6) * k, Lx, Y0 - Arr(I, 5) * k    'AddLine (BeginX、 BeginY、 EndX、 EndY),画一条从最低价Arr(I, 6)到最高价Arr(I, 5)的竖线ActiveSheet.Shapes.AddShape(msoShapeRectangle, X0 + X1 - 1.5, Y0 - WorksheetFunction.Max(Arr(I, 4), _Arr(I, 7)) * k, 3, Abs(Arr(I, 4) - Arr(I, 7)) * k).Select                '画一条从开盘价到收盘价的柱状线,并选中'添加形状指令AddShape (Type-msoShapeRectangle实心矩形、Left左上角相对于文档左侧的位置、Top顶部坐标、 Width矩形宽度、 Height矩形高度)'此处省略部分核心程序,需要请到我的资源下载源文件'绘制趋势线If Cells(I, 17) <> "" ThenFy1 = Y0 - Cells(I, 17) * kIf rFy1 > 0 Then ActiveSheet.Shapes.AddLine rFx1, rFy1, Lx, Fy1 'rFx1 = LxrFy1 = Fy1End IfIf Cells(I, 18) <> "" Then '分型顶Fy1 = Y0 - Cells(I, 18) * kIf rFy1 > 0 Then ActiveSheet.Shapes.AddLine rFx1, rFy1, Lx, Fy1   'rFx1 = LxrFy1 = Fy1End IfNext
End Sub

3.清除excel中除按钮外的所有图形

代码如下:

    '清除原有K线图形For Each S In ActiveSheet.ShapesIf S.Type <> 8 Then            '有插入一个窗体控件指定宏S.Delete                   '把不是窗体控件的shape(图片、图形等)清除End IfNext S

4.绘制K线图

代码如下:

       '绘制K线ActiveSheet.Shapes.AddLine Lx, Y0 - Arr(I, 6) * k, Lx, Y0 - Arr(I, 5) * k    'AddLine (BeginX、 BeginY、 EndX、 EndY),画一条从最低价Arr(I, 6)到最高价Arr(I, 5)的竖线ActiveSheet.Shapes.AddShape(msoShapeRectangle, X0 + X1 - 1.5, Y0 - WorksheetFunction.Max(Arr(I, 4), _Arr(I, 7)) * k, 3, Abs(Arr(I, 4) - Arr(I, 7)) * k).Select                '画一条从开盘价到收盘价的柱状线,并选中'添加形状指令AddShape (Type-msoShapeRectangle实心矩形、Left左上角相对于文档左侧的位置、Top顶部坐标、 Width矩形宽度、 Height矩形高度)With Selection.ShapeRange                           '为K线设置颜色If Arr(I, 4) - Arr(I, 7) >= 0 Then              '对于选中的矩形,当收盘价≥开盘价时,矩形为红色,否则为绿色.Fill.ForeColor.SchemeColor = 10.Line.DashStyle = msoLineSolid              '设置矩形的边线形式为长直线.Line.ForeColor.SchemeColor = 10Else.Fill.ForeColor.SchemeColor = 11.Line.DashStyle = msoLineSolid.Line.ForeColor.SchemeColor = 11End IfEnd With

总结

绘制K线图和趋势线是一个非常复杂的功能,程序也比较复杂,其中涉及很多算法的部分,这里就不一一讲解了,喜欢的话可以自己看注释。

通过VBA在excel中实现股票历史数据查询和K线趋势图绘制(完整的excel原件可以在我的资源中下载)相关推荐

  1. python蜡烛图预测_python tushare股票K线蜡烛图绘制

    序言:学着学着就学到股票图形绘制了,尝试了下,入门蛮简单的,后面就不知道了,现在好像mplfinance更换了新版本,老版本不支持了.以下代码能实现单个股票K线蜡烛图图形输出,不过我用的是tushar ...

  2. 如何把股票数据导出excel?导出股票历史数据到Excel的方法

    共享一个可以把股票数据导出Excel的方法,是一个在线下载股票历史数据,目前可以下载A股.港股.美股所有个股的历史数据,数据是Excel的方便分析查看.做表,最主要是免费... 只要两步就能下载: 填 ...

  3. 股票历史数据-股票历史数据查询怎么查?怎么查股票历史数据?

    股票历史数据-股票历史数据查询怎么查?怎么查股票历史数据? 共享一个股票历史数据查询工具,可以在线股票历史数据查询,查询的股票历史数据是:A股所有股票从成立到最近一天的所有股票历史数据,亲测手机在线就 ...

  4. 股票历史数据-股票历史数据查询网站

    股票历史数据-股票历史数据查询网站 共享一个在线股票历史数据查询网站,可以在线股票历史数据查询,查询的股票历史数据是:A股所有股票从成立到最近一天的所有股票历史数据,亲测手机在线就能股票历史数据查询( ...

  5. 使用Sina API获取新浪财经的证券股票数据接口(时价 K线等)

    从网上找到的Sina API的财经API说,Mark一下,以供以后参考 http://market.finance.sina.com.cn/downxls.php?date=2011-07-08&am ...

  6. 使用Yahoo API获取雅虎的证券股票数据接口(时价 K线等)

    从网上搜索到的Yahoo 财经API接口,基本可以取到世界各个市场的股票,指数,外汇等数据 但是测试下来好像日本国内数据没有,不过调查之后发现可以使用其他方式获取,获取的方法会在随后的博文再附上. 1 ...

  7. 读取excel数据 画k线 成交量图

    # -*- coding: utf-8 -*- """ Created on Tue Mar 23 18:32:15 2021@author: ""& ...

  8. python k线图和指标_量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  68 ...

  9. 量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】

    之前有次直播的时候给大家演示过一个我们内部使用的工具 -- 择时策略查看器. 择时策略查看器 在查看器的界面上,不仅可以清楚地看到K线图.均线等各类技术指标,还能显示出择时策略交易信号的买点.卖点. ...

最新文章

  1. 白噪音和粉红噪音煲机_白噪音真的有助于睡眠?这款可以自定义的应用给你答案...
  2. 吴恩达机器学习笔记31-梯度检验(Gradient Checking)
  3. 说说Keepalived的脑裂
  4. 解决input[type=number]无法显示非数字字符的问题
  5. db2 CLP中如何换行啊
  6. kicad绿油开窗_GitHub - OS-Q/S05: KiCad EDA
  7. linux下搭建基于python的vim,Linux下搭建基于python的VIM-Go语言中文社区
  8. python中函数可以赋值给一个变量_python中函数赋值给变量时的问题注意详解
  9. [CDA数据分析师学习之路] 【CDA就业班独家发布】学习之路
  10. 如何查看mysql默认字符集_如何找出MySQL中的默认服务器字符集?
  11. 【渗透】浅谈webshell隐藏
  12. Matlab深度学习——安装deep learning toolbox工具箱
  13. dnf搬砖代码Python_dnf自动搬砖脚本怎么写宝app
  14. matlab实现图像的拼接,MATLAB实现图像拼接算法(求助)
  15. 【QT】信号和槽机制
  16. ios查看ipa是否函数特定字符_利用strings 检测iOS ipa包是否调用私有api
  17. iPhone屏幕尺寸、statusBar、navigationBar、tabBar高度对比
  18. 支付宝二维码支付文档,找了好久,记在这里
  19. HTML中的5种空格表示
  20. SpringCloud Gateway 构建全局缓存 Request 解决 body 不可重复读问题

热门文章

  1. 困扰许久的文泉驿显示慢问题终于解决了
  2. Dictionary Learning
  3. 51单片机笔记:中断系统
  4. RBA验厂咨询,RBA验厂及BSCI验厂对ICTI验厂和SEDEX验厂影响
  5. 【Unity】工具类系列——UI刘海屏适配
  6. 软件测试周刊(第40期):大部分的恐惧与懒惰有关
  7. python爬取网页某一个a标签_Python爬虫获取某个网页所有的a标签中的超链接网址...
  8. 魔兽争霸3地图(WarIII Maps):神魔之井
  9. 可观测宇宙思维导图,结构图
  10. ABB变电站非自耦变压器