文章目录

  • 前言
  • 一、k 线 图 是 什 么 ?
  • 二、K 线 图 结 构
    • (1) 影 线 和 实 体
    • (2) 十 字 线
  • 四、 双 均 线 策 略
    • (一)、金叉
    • (二)、死叉
    • (三)、均 线 策 略 的 特 点
  • 五、通 道 突 破 策 略
    • (一)唐 奇 安 通 道 策 略
      • (1)上阻力线、中心线、下支撑线
      • (2)唐 奇 安 通 道 买 入 策 略
      • (2)唐 奇 安 通 道 卖 出 策 略
    • (二)、布 林 带 策 略
      • (1) 压 力 线 、 价 格 平 均 线 、 支 撑 线
    • (三)、布 林 带 策 略 与 唐 奇 安 通 道 策 略 的 关 系
  • 三、绘 图 步 骤
    • (1)导入相关模块
    • (2)处理数据
    • (3)绘制k线图
    • (4)代码
    • (5)效果呈现
      • 1)蜡烛图
      • 2)均线图
      • 3)布 林 带 策 略 图
      • 4)唐奇德策略图
      • 4)数据图汇总

前言

`利用数据绘制K线图


一、k 线 图 是 什 么 ?

K线图又称蜡烛图,起源于十八世纪德川幕府时代的米市交易市场,用来计算米价每天的涨跌走势,由开盘价、收盘价、最高价、最低价绘制而成的一条柱状的线条,它由影线和实体组成,基本用途是寻找买卖点。

K线图由股票的最高价,最低价,收盘价,开盘价组成。红色代表阳线:收盘价高于开盘价,俗称看多。绿色代表阴线:收盘价低于开盘价,俗称看空。
注意⚠️:在欧美股市则是相反的,即红色代表阴线,绿色代表阳线。

二、K 线 图 结 构

(1) 影 线 和 实 体

(2) 十 字 线

⚠️:反映买卖双方的博弈

四、 双 均 线 策 略

双均线策略,就是同时考虑短周期和长周期的趋势,它由一个短周期趋势和长周期趋势构成。长周期均线 捕捉股票行情趋势,而短周期均线起到的是择时的作用。
在考虑长周期趋势的同时,兼顾比较敏感的小周期趋势,是解决简单移动平均线滞后性弱点的一项有效方法。

(一)、金叉

(二)、死叉

(三)、均 线 策 略 的 特 点

双均线策略虽然可以弥补一些滞后性,但均线策略都是基于:“利用固定长度的价格均线作为交易趋势的判断”
均线随着时间的变化是相对连续的,即使是价格发生猛涨或者急跌也很难直接造成均线方向的变化。因此使用均线侧率作为交易信号,会有滞后性。

五、通 道 突 破 策 略

通道策略就是选定价格区间,当价格突破选定价格区间时就进行交易,因此没有滞后性。

(一)唐 奇 安 通 道 策 略

唐奇安通道策略由三条线组成,分别是上阻力线、下支撑线、中心线。一般来说,唐奇安通道的宽度越宽,市场波动就越大,而唐奇安通道越窄,市场波动性就越小。

(1)上阻力线、中心线、下支撑线

⚠️ 上阻力线: 是由过去N天的最高价的最大值组成的

⚠️ 中心线: 是由过去最高价与最低价的平均值组成的,即(最大值**+**最小值)÷2

⚠️ 下支撑线: ** 是由过去N天的最低价的最小值组成的

(2)唐 奇 安 通 道 买 入 策 略

买入:当价格跌破下支撑线,则执行买入的操作

(2)唐 奇 安 通 道 卖 出 策 略

卖出:当价格突破上阻力线,则执行卖出的操作

(二)、布 林 带 策 略

布林带策略,也是由3条轨道线组成:其中上下两条线分别可以看成是价格的压力线和支撑线,在两条线之间是一条价格平均线,一般情况价格线在上下轨道组成的带状区间游走,而且随价格的变化而自动调整轨道的位置。布林带通道宽度有4个标准差,因此95%的价格都将包含在内,可以展示大部分价格的波动情况。

(1) 压 力 线 、 价 格 平 均 线 、 支 撑 线

⚠️ 压力线: 就是20日均线加上N倍标准差,N为可调参数,一般设置为2。【压力线 = ma20 + n * std

⚠️ 价格平均线: 就是20日均线

⚠️ 支撑线: 20日均线减去N倍标准差,N为可调参数,一般设置为2。【压力线 = ma20 - n * std

(三)、布 林 带 策 略 与 唐 奇 安 通 道 策 略 的 关 系

联系:
外观上两个策略的线图相似
.
区别:
布林带的波动比较灵敏
唐奇安通道则相对迟缓,直上直下。

三、绘 图 步 骤

(1)导入相关模块

代 码 如 下 :

# 数据分析辅助模块
import numpy as np
# 读取数据模块
import pandas as pd
# 绘图基本模块
import matplotlib.pyplot as plt
# 日期转换模块
from matplotlib.dates import date2num
# 绘制蜡烛图模块
from mplfinance import original_flavor as mpf
print('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<')

(2)处理数据

1)读取交易时间、开盘价、收盘价、最高价、最低价,并把交易时间设定位字符串
2)交易时间转换时间数据形式
2)设置时间戳:在数据时间中提取
3)设置特定蜡烛图绘图数据
4)设置移动平均线数据
5)设置金叉死叉位
6)回测金叉死叉策略收益

(3)绘制k线图

1)设置文字与符号识别
2)设置画布,添加子图,并把子图x轴设为时间轴
3)绘制K线图
4)绘制5,、10、20移动平均线
5)标记金叉死叉点位

(4)代码

代 码 如 下 :

# 数据分析辅助模块
import numpy as np
# 读取数据模块
import pandas as pd
# 绘图基本模块
import matplotlib.pyplot as plt
# 日期转换模块
from matplotlib.dates import date2num
# 绘制蜡烛图模块
from mplfinance import original_flavor as mpf
print('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<')
"""======================== 设置数据 ========================"""
# # 数据处理
# 读取特定数据数据,设定交易时间为字符数按
path = r'F:\\601398.SH.xlsx'
data = pd.read_excel(path,usecols=['trade_date','open','close','high','low'],dtype={'trade_date':object})
# 数据时间处理
data['trade_date'] = pd.to_datetime(data['trade_date'])
# 设置时间戳:在数据时间中提取
data['time'] = date2num(data['trade_date'])
# 数据排序整理
data.sort_values(by = 'trade_date',ascending = True,inplace=True )
# 重置行索引
data.reset_index(inplace = True)
# 删除旧行索引
data.drop(columns = 'index',inplace = True)# # 设置蜡烛图数据
# 提取时间戳、开盘价、收盘价、最高价、最低价数据
k = data[['time','open','close','high','low']].values# # 设置移动平均线数据
# 设置5日移动平均线
data['ma5'] = data['close'].rolling(window = 5,min_periods = 5).mean()
# 设置10日移动平均线
data['ma10'] = data['close'].rolling(window = 10,min_periods = 10).mean()
# 设置20日移动平均线
data['ma20'] = data['close'].rolling(window =20,min_periods = 20).mean()
# 设置30日移动平均线
data['ma30'] = data['close'].rolling(window = 30,min_periods = 30).mean()# # 设置布林带压力线、布林带支撑线
# 设置20日收盘价标准差
data['std'] = data['close'].rolling(window = 20,min_periods = 1).std()
# 设置布林带压力线
data['up_B'] = data['ma20'] + 2 * data['std']
# 设置布林带支持线
data['down_B'] = data['ma20'] - 2 * data['std']# # 设置唐奇安通道阻力线、支撑线、中心线
# 设置唐奇安通道阻力线
data['up_T'] = data['high'].rolling(window = 15,min_periods = 15).max()
# 设置唐奇安通道中心线
data['median_T'] = (data['high'] + data['low'])/2
# 设置唐奇安通道支撑线线
data['down_T'] = data['low'].rolling(window = 15,min_periods = 15).min()"""======================== 策略买卖点 ========================"""
# # 金叉死叉(1)
# 设置买卖信号
# model = ma5['close'] > ma20['close']
# # 设置买点模块
# def get_buy_date(w):
#     return w[0] == True and w[1] == False
# # 设置卖点模块
# def get_sale_date(v):
#     return v[0] == False and v[1] == True
# # 标记买点
# se_buy = model.rolling(2).apply(get_buy_date).fillna(0)
# # 标记卖点
# se_sale = model.rolling(2).apply(get_sale_date).fillna(0)
# # 转变买点标记形式
# se_buy_bool = se_buy.astype(bool)
# # 转换卖点标记形式
# se_sale_bool = se_sale.astype(bool)
# # 筛选买点位置
# buy_price = df[se_buy_bool]
# # 筛选卖点位置
# sale_price = df[se_sale_bool]
# # # 利润计算
# # profit = sale_price.values - buy_price.values
# # print(profit)# # 金叉死叉(2)
# 设置金叉时间容器
golden_cross = []
# 设置死叉时间容器
death_cross =[]
# 筛选金叉死叉时间
for i in range(0,len(data)):# 设置金叉条件if (data['ma5'][i] >= data['ma30'][i]) and (data['ma5'][i-1] < data['ma30'][i-1]):golden_cross.append(data['trade_date'][i])# 设置死叉条件elif (data['ma5'][i] <= data['ma30'][i]) and (data['ma5'][i-1] > data['ma30'][i-1]):death_cross.append(data['trade_date'][i])else:continue
# 设置金叉信号
data['golden_cross'] = np.where((data['trade_date'].isin(golden_cross)),1,0)
# 设置死叉信号
data['death_cross'] = np.where((data['trade_date'].isin(death_cross)),-1,0)
# 合并金叉死叉信号
data['GD'] = data['golden_cross'] + data['death_cross']
# 设置金叉数据
golden_cross = data[data['golden_cross'] == 1]
# 设置死叉数据
death_cross = data[data['death_cross'] == -1]# # 布林带策略
# 设置布林带策略买入容器
B_buy_order = []
# 设置布林带策略卖出容器
B_sale_order =[]
# 遍历数据,筛选布林带策略买卖点
for i in range(0,len(data)):# 设置布林带策略买入时间if data['close'][i] < data['down_B'][i]:B_buy_order.append(data['trade_date'][i])# 设置布林带策略卖出时间elif data['close'][i] > data['up_B'][i]:B_sale_order.append(data['trade_date'][i])else:continue
# 标记布林带策略买入点位
data['B_buy_order'] = np.where((data['trade_date'].isin(B_buy_order)),1,0)
# 标记布林带策略卖出点位
data['B_sale_order'] = np.where((data['trade_date'].isin(B_sale_order)),-1,0)
# 合拼布林带策略买卖点位
data['B_order'] = data['B_buy_order'] + data['B_sale_order']
# 筛选布林代策略买卖信号数据
Bb = data[data['B_order'] != 0]
# 设置布林带策略买入数据
B_buy_order = Bb[Bb['B_buy_order'] == 1]
# 设置布林带策略卖出数据
B_sale_order = Bb[Bb['B_sale_order'] == -1]# # 唐奇德通道策略
# 设置唐奇德通道买入策略时间容器
T_buy_order = []
# 设置唐奇德通道卖出策略时间容器
T_sale_order = []
# 遍历数据,筛选奇德通道策略买卖点
for i in range(0,len(data)):# 设置奇德通道买入策略时间if data['close'][i] < data['down_T'][i]:T_buy_order.append(data['trade_date'][i])# 设置奇德通道卖出策略时间elif data['close'][i] > data['up_T'][i]:T_sale_order.append(data['trade_date'][i])else:continue
# 标记布林带策略买入点位
data['T_buy_order'] = np.where((data['trade_date'].isin(T_buy_order)),1,0)
# 标记布林带策略卖出点位
data['T_sale_order'] = np.where((data['trade_date'].isin(T_sale_order)),-1,0)
# 合拼布林带策略买卖点位
data['T_order'] = data['T_buy_order'] + data['T_sale_order']
# 筛选布林代策略买卖信号数据
Dc = data[data['T_order'] != 0]
# 设置布林带策略买入数据
T_buy_order = Dc[Dc['T_buy_order'] == 1]
# 设置布林带策略卖出数据
T_sale_order = Dc[Dc['B_sale_order'] == -1]"""======================== 策略画图 ========================"""data.set_index('time',inplace=True)# # 绘制k线图
# 设置汉语识别
plt.rcParams['font.sans-serif'] = ['SimHei']# 符号识别
plt.rcParams['axes.unicode_minus'] = False# 设置画布
fig = plt.figure()# 添加子图
ax = fig.add_subplot(111,facecolor='lightgrey')# 子图x轴设为时间轴
ax.xaxis_date()# 绘制蜡烛图
mpf.candlestick_ochl(ax,k,colorup = 'red', colordown = 'green')# 绘制5日移动平均线
plt.plot(data.index,data['ma5'],color = 'darkviolet',label='5日移动平均线')# 绘制10日移动平均线
plt.plot(data.index,data['ma10'],color = 'gold',label='10日移动平均线')# 绘制唐奇安通道阻力线
plt.plot(data.index,data['up_T'],color = 'mediumspringgreen',label = '唐奇安通道')# 绘制布林带压力线
plt.plot(data.index,data['up_B'],color = 'slategrey',label = '布林带通道【2倍】')# 绘制唐奇安通道中心线
plt.plot(data.index,data['median_T'],color = 'cadetblue',label = '唐奇安通道中位线')# 绘制20日移动平均线【布林带中线】
plt.plot(data.index,data['ma20'],color = 'orange',label='20日移动平均线【布林带中线】')# 绘制布林带支撑线
plt.plot(data.index,data['down_B'],color = 'slategrey',label = '布林带通道【2倍】' )# 绘制唐奇安通道支撑线
plt.plot(data.index,data['down_T'],color = 'mediumspringgreen',label = '唐奇安通道' )# 绘制30日移动平均线
plt.plot(data.index,data['ma30'],color = 'dodgerblue',label='30日移动平均线')# 绘制金叉点位
plt.scatter(golden_cross['time'],golden_cross['open'],color = 'yellow',label = '金叉点位')# 绘制死叉点位
plt.scatter(death_cross['time'],death_cross['open'],color = 'black',label = '死叉点位')# 绘制布林带策略买入点
plt.scatter(B_buy_order['time'],B_buy_order['open'],color = 'darkred',marker = '+',label = '布林带买入点')# 绘制布林带策略卖出点
plt.scatter(B_sale_order['time'],B_sale_order['open'],color = 'darkgreen',marker = 'x',label = '布林带卖出点')# 绘制唐奇德策略买入点
plt.scatter(T_buy_order['time'],T_buy_order['open'],color = 'orangered',marker = '+',label = '唐奇德买入点')# 绘制唐奇德策略卖出点
plt.scatter(T_sale_order['time'],T_sale_order['open'],color = 'lightgreen',marker = 'x',label = '唐奇德卖出点')# 设置抬头
plt.title('601398.SH(未复权)策略提醒行情图',fontsize = 25)
# 设置y轴标签
plt.ylabel('收盘价\n(元)\n\n\n\n\n\n\n\n\n\n\n',fontsize = 15,rotation = 0)
# plt.xticks(ma5.index)
plt.tight_layout()
plt.legend()
plt.show()

(5)效果呈现

1)蜡烛图

2)均线图

3)布 林 带 策 略 图

4)唐奇德策略图

⚠️ 主要用于日行情

4)数据图汇总


金 融 量 化 分 析 • 外 篇 • 绘 制 行 情 数 据 数 据 图相关推荐

  1. 金 融 量 化 分 析 • JoinQuant • 第 一 篇

    第 一 篇 一.聚宽模块安装.更新方法 二.聚宽模块登录 三.获取股票行情数据方法 (一).获取单个股票多天每分钟行情数据的获取函数:get_price(参数) (二).获取单个股票基本信息 ( 1 ...

  2. 金 融 量 化 分 析 • JoinQuant • 第 四 篇

    第 四 篇 一.股 票 评 估 实 践 (一)风险指标 (1)最大回测 (2)夏普比率 (3)波动比率 二.使用步骤 一.股 票 评 估 实 践 根据过往数据评估平安银行.比亚迪.宁德时代.隆基股份 ...

  3. 金 融 量 化 分 析 • JoinQuant • 第 五 篇

    文章目录 前言 一.策 略 可 靠 性 检 测 方 法 (一).评 估 指 标 1)胜 率 2)年 化 收 益 率 3)最 大 回 测 4)夏 普 比 率 (二).假 设 验 证 二.周 期 策 略 ...

  4. 金 融 量 化 分 析 • JoinQuant • 第 六 篇

    文章目录 一. 动 量 策 略 (一).动 量 正 向 策 略 (二).动 量 反 向 策 略 (三). 实 现 步 骤 (1)确定交易对象:股票池.考虑流动性(沪深300/创业板) (2)选定业绩评 ...

  5. 金 融 量 化 分 析 • JoinQuant • 第 二 篇

    第 二 篇 一.自定义数据处理模块 (一).自定义获取所有A股列表模块 (二).自定义获取单个股票行情行情数据模块 (三).自定义导出股票相关数据模块 (四).自定义初始化股票行情数据库 (五).自定 ...

  6. 番外篇 齐老湿面试计

    番外篇 老齐面试计 这次,老齐冒充软件行业的新人,带着隐形录音笔去公司面试,希望大家能够学习其中的套路,"旁白君"是我当时的内心独白,以后我会经常更新类似的内容,打开微信扫描二维码 ...

  7. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...

  8. 番外篇2.3 图像处理与深度学习 - 模式识别

    在谈R-CNN之前,应该要先总结一下模式识别. 模式识别主要是对已知数据样本的特征发现和提取,比如人脸识别.雷达信号识别等,强调从原始信息中提取有价值的特征,在机器学习里面,好的特征所带来的贡献有时候 ...

  9. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

最新文章

  1. Spicy Spring:动态创建自己的BeanDefinition
  2. 常用于单片机的接口适配器模式C语言实现
  3. .NET 开发系统 -知识 点
  4. 循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier
  5. java常用的日期类介绍
  6. springcloud问题
  7. SQL Server2000的安装
  8. 2021牛客暑期多校训练营2,签到题CDFKI
  9. 决胜新能源汽车战场:价格拖死战、舆论声量战、产业兼并战
  10. 信息论与编码冯桂周林著答案_信息论与编码技术+(冯桂+林其伟+陈东华+著)+清华大学出版社+课后答案.pdf...
  11. 明尼苏达双城计算机科学硕士申请截止日期,明尼苏达大学双城分校计算机科学理学硕士研究生申请要求及申请材料要求清单...
  12. 为什么我们需要表明身份:EV证书的价值
  13. maven复习 (进阶+高级)
  14. 技能设计漫谈 ——从游戏性和流畅角度来看技能的设计要点。
  15. 麒麟820鸿蒙,华为最强千元机:绝版麒麟820+首升鸿蒙2.0+完美全屏!
  16. css画扇形的几种实现方式
  17. qgridlayout 滚动时固定第一行_固定轴承内外圈,哈尔滨轴承小编为您支几招!
  18. fancybox iframe
  19. 一节计算机课英语,电脑课的英语
  20. Infopath入门到精通系列-4 Infopath myschema.xsd文件 解析

热门文章

  1. dedecms织梦模板文件名介绍与说明
  2. 被加班逼到要用猝死换休息的程序员们
  3. pip安装包时报错WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status =None))
  4. 百度飞桨入选2019世界互联网大会领先科技成果
  5. 数字标牌/广告机无线组网方案
  6. 微信小程序-豆瓣电影
  7. 核电站问题转载自saltless原创
  8. word用尾注插入参考文献—删除横线,空格等
  9. Power BI基础知识——转换表和列
  10. CocosCreator发布微信子域