量化交易:筹码理论的探索-筹码分布计算的实现

前言

很多朋友习惯了同花顺、大智慧等看盘软件,经常问到筹码分布如何计算。

说起来筹码分布的理论在庄股时代堪称是一个划时代产品,虽然历经level2数据、资金流统计、拆单算法与反拆单算法等新型技术的变革,庄股时代也逐渐淡出市场,但其背后的市场逻辑仍然具备一定的参考意义。

本篇就以BigQuant平台为基础,复现经典筹码理论的基础变量计算,为因子挖掘提供更多参考特征。

资金和筹码

资金是推动筹码移动的源动力,资金的强弱决定了筹码移动的方向。买入的资金强于卖出的筹码,说明筹码需求大于供应,股价就会上涨。相反,卖出的筹码强于买入的资金,说明筹码需求小于供应,股价就会下跌。当买入的力量和卖出的力量接近平衡时,说明供求相近,股价就会横盘震荡。

筹码理论背后的经典逻辑

  • 谁的筹码不抛
      在筹码价位较高,没有明显出货迹象时,试想一只股票下跌了30%以上,而从没有放量,高端和低端筹码都不动,这是不正常的,散户重在散,下跌到一定程度一定会有很多人止损和出局,而持续盘跌不放量,只能说明其中有主力被套了,因为主力一般无法止损出局,那样成本太高了。这种股最适用于擒庄操作
  • 谁的筹码不卖
      在筹码价位较低时,一只股票上涨了20%以上,而从不放量,底端密集筹码不动也是不正常的,散户一般很少有人经得起如此引诱而一致不出货,这只能说明其中有主力在运做,而多数主力没有30%以上的利润是不会离场的,因为那样除去费用纯利就太低了。这种股最适用于坐轿操作。
  • 机会和风险提示
      有些股票虽然高位无量,但其拉升时出现了放量或长时间盘整,使筹码出现了高位集中,这些股一般是主力离场了,后市风险会较大。有些股低位放量或长时间盘整,出现筹码低位密集,一般是有主力进行收集造成的,操作起来机会比较大。

 

筹码理论的关键参数

  • 筹码分布
      计算历史所有筹码的换手价位,类似分价表
  • 成本均线
      以成交量为权重的价格平均线,用来表示N日内的市场参与者平均建仓成本。无穷成本平均线是最重要的成本均线,反映上市以来所有交易者的平均建仓成本,是市场牛熊的重要分水岭。
  • 筹码集中度
      刻画主要筹码堆积的主要区域的幅度,数值越大表示筹码集中的幅度越大,筹码就越分散。
  • 活跃筹码
      价附近的筹码是最不稳定的,也是最容易参与交易的,因为在股价附近的股票持有者,最经受不住诱惑,盈利的想赶快把浮动盈利换成实际盈利;被套的想趁着亏损得还少赶快卖掉,利用资金买另外的股票,把亏损赶快挣回来。而远离股价,在下方的筹码,由于有了一定的利润,持股信心会增强;在上方的筹码,由于被套太深而不愿割肉,所以在股价附近的筹码是最活跃的,而在股价上下,远离股价的筹码是不太活跃的。活跃筹码的数值很小时是很值得注意的一种情况。比如,一只股票经过漫长的下跌后,活跃筹码的值很小(小于10),大部分筹码都处于被套较深的状态,这时多数持股者已经不愿意割肉出局了,所以这时候往往能成为一个较好的买入点;再比如:一只股票经过一段时间的上涨,活跃筹码很小(小于10),大部分筹码都处于获利较多的状态,如果这时控盘强弱的值较大(大于20),前期有明显的庄股特征,总体涨幅不太大,也能成为一个较好的买入点。所以,在股价运行到不同的阶段时,考虑一下活跃筹码的多少,能起到很好的辅助效果。

筹码理论的股价周期阐述

股价走势循环周期的四个阶段
A阶段:无穷成本均线由向下到走平;俗称筑底阶段;
B阶段:无穷成本均线由走平到向上;俗称拉升阶段,可称为上升阶段;
C阶段:无穷成本均线由向上到走平;俗称作头(顶)阶段;
D阶段:无穷成本均线由走平到向下;俗称派发阶段,可称作下降阶段;

1、筹码的价位分布计算

instruments = ['601700.SHA']
#这里尽量包含从上市日期开始到最后的数据
df = D.history_data(instruments, start_date='2005-01-02', end_date='2018-07-04',
fields=['open','close','adjust_factor','turn','volume']) #获取历史数据
df['real_close']=df['close']/df['adjust_factor']#获取真实收盘价
df['real_open']=df['open']/df['adjust_factor']#获取真实开盘价
df['turn']=df['turn']/100#获取换手率
df['avg_price']=np.round(df['real_close']+df['real_open'])/2#计算每日平均成本,这里按照0.5元一个价位做分析
df=df.sort_values(by='date',ascending=False).reset_index(drop=True)#日期按降序排列
df['turn_tomo']=df['turn'].shift(1) #计算明日的换手率
df['remain_day']=1-df['turn_tomo'] #计算当日的剩余筹码比例
#假设N日后,上市第一天的剩余筹码比率就是每日剩余比例的累乘即:剩余筹码比例=(1-明天换手率)*(1-后日换手率)*...*(1-最新日换手率),以此类推各日的剩余筹码
df['remain_his']=df['remain_day'].cumprod()*df['turn'] 
df['remain_his']=df['remain_his'].fillna(df['turn'])#最新一日的筹码就是当日的换手率
#关键统计,统计最后一天的各价位历史筹码堆积量(百分比)
ss=df.groupby('avg_price')[['remain_his']].sum().rename(columns={'remain_his':'筹码量'})
ss.head(10)
筹码量
avg_price
3.50.060804
4.00.044996
4.50.120760
5.00.120956
5.50.059544
6.00.149679
6.50.075149
7.00.073177
7.50.069574
8.00.141947
#检查一下各价位筹码总和是不是1
ss['筹码量'].sum()
1.0000001

2、筹码理论的Winner指标

#计算end_date时某一价位的获利比例
pp=ss.reset_index()
pp[pp.avg_price	<=3.5]['筹码量'].sum()
0.06080448
#计算end_date时收盘价的获利比例
pp[pp.avg_price	<=df['real_close'].iloc[-1]]['筹码量'].sum()
0.9996914

3、筹码理论的Cost指标

ss['筹码累积量']=ss['筹码量'].cumsum()
ss.head()
筹码量筹码累积量
avg_price
3.50.0608040.060804
4.00.0449960.105800
4.50.1207600.226561
5.00.1209560.347516
5.50.0595440.407060
#给定累计获利比率winner_ratio,计算对应的价位,表示在此价位上winner_ratio的筹码处于获利状态
winner_ratio=0.5
for i in range(len(ss)-1):if ss['筹码累积量'].iloc[i] < winner_ratio and ss['筹码累积量'].iloc[i+1]> winner_ratio:cost=ss.index[i]
cost
5.5

4、计算全市场各股票的winner指标

instruments = ['601700.SHA','601699.SHA']
#这里尽量包含从上市日期开始到最后的数据
df = D.history_data(instruments, start_date='2005-01-02', end_date='2018-02-14',
fields=['open','close','adjust_factor','turn','volume']) #获取历史数据
df['real_close']=df['close']/df['adjust_factor']#获取真实收盘价
df['real_open']=df['open']/df['adjust_factor']#获取真实开盘价
df['turn']=df['turn']/100
df['avg_price']=np.round(df['real_close']+df['real_open'])/2#计算每日平均成本,这里按照0.5元一个价位做分析
df=df.sort_values(by='date',ascending=False).reset_index(drop=True)#日期按降序排列
df['turn_tomo']=df.groupby('instrument')['turn'].apply(lambda x:x.shift(1)) #计算明日的换手率
df['remain_day']=1-df['turn_tomo'] #计算当日的剩余筹码比例
#假设N日后,上市第一天的剩余筹码比率就是每日剩余比例的累乘即:剩余筹码比例=(1-明天换手率)*(1-后日换手率)*...*(1-最新日换手率),以此类推各日的剩余筹码
df['remain_his']=df.groupby('instrument')['remain_day'].apply(lambda x:x.cumprod())
df['remain_his']=df['remain_his']*df['turn']
df['remain_his']=df['remain_his'].fillna(df['turn'])#最新一日的筹码就是当日的换手率
#关键统计,统计最后一天的各价位历史筹码堆积量(百分比)
ss=df.groupby(['instrument','avg_price'])[['remain_his']].sum().rename(columns={'remain_his':'筹码量'}).reset_index()
real_close=df.groupby('instrument')[['real_close']].apply(lambda x:x.iloc[0]).reset_index()
pp=ss.merge(real_close,on='instrument')
#计算end_date时收盘价的获利比例
winner=pp[pp.avg_price<=pp.real_close].groupby('instrument')[['筹码量']].sum().rename(columns={'筹码量':'winner'})
winner
winner
instrument
601699.SHA0.639122
601700.SHA0.817013
#检查各股票各价位的筹码总和是否为1
ss.groupby('instrument')['筹码量'].sum()
instrument
601699.SHA    1.0
601700.SHA    1.0
Name: 筹码量, dtype: float32

计算全市场各股票每日的winner指标

instruments = ['601700.SHA','601699.SHA']
#这里尽量包含从上市日期开始到最后的数据
df_all = D.history_data(instruments, start_date='2005-01-02', end_date='2018-02-14',
fields=['open','close','adjust_factor','turn','volume']) #获取历史数据
def cal_winner_day(df_all):winner=[]for k in list(df_all.date):df=df_all[df_all.date<=k]df['real_close']=df['close']/df['adjust_factor']#获取真实收盘价df['real_open']=df['open']/df['adjust_factor']#获取真实开盘价df['turn']=df['turn']/100#获取换手率df['avg_price']=np.round(df['real_close']+df['real_open'])/2#计算每日平均成本,这里按照0.5元一个价位做分析df=df.sort_values(by='date',ascending=False).reset_index(drop=True)#日期按降序排列df['turn_tomo']=df['turn'].shift(1)#计算明日的换手率df['remain_day']=1-df['turn_tomo'] #计算当日的剩余筹码比例#假设N日后,上市第一天的剩余筹码比率就是每日剩余比例的累乘即:剩余筹码比例=(1-明天换手率)*(1-后日换手率)*...*(1-最新日换手率),以此类推各日的剩余筹码df['remain_his']=df['remain_day'].cumprod()df['remain_his']=df['remain_his']*df['turn']df['remain_his']=df['remain_his'].fillna(df['turn'])#最新一日的筹码就是当日的换手率#关键统计,统计最后一天的各价位历史筹码堆积量(百分比)ss=df.groupby('avg_price')[['remain_his']].sum().rename(columns={'remain_his':'筹码量'}).reset_index()ss['real_close']=df['real_close'].iloc[0]#计算end_date时收盘价的获利比例winner_day=ss[ss.avg_price<=ss.real_close]['筹码量'].sum()winner.append(winner_day)result=pd.DataFrame({'winner':winner},index=df_all.date)return result
winner_all=df_all.groupby('instrument').apply(cal_winner_day)
winner_all.reset_index().sort_values(by='date',ascending=False).head()
instrumentdatewinner
4497601700.SHA2018-02-140.817013
2773601699.SHA2018-02-140.639122
2772601699.SHA2018-02-130.518967
4496601700.SHA2018-02-130.816618
2771601699.SHA2018-02-120.530768

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握3个Mock工具,轻松玩转单元测试

公司要求提升单元测试的质量&#xff0c;提高代码的分支覆盖率和行覆盖率&#xff0c;安排我研究单元测试&#xff0c;指定方案分享并在开发部普及开。 单元测试中的Mock的目的 Mock的主要目的是让单元测试Write Once, Run Everywhere. 即编写一次后&#xff0c;可以在任意时…

第十九章 解读利用pytorch可视化特征图以及卷积核参数(工具)

介绍一种可视化feaature maps以及kernel weights的方法 推荐可视化工具TensorBoard&#xff1a;可以查看整个计算图的数据流向&#xff0c;保存再训练过程中的损失信息&#xff0c;准确率信息等 学习视频&#xff1a; 使用pytorch查看中间层特征矩阵以及卷积核参数_哔哩哔哩…

Calling PeopleTools APIs 调用PeopleTools API

Calling PeopleTools APIs 调用PeopleTools API You can call all of the PeopleTools APIs from an Application Engine program. When using APIs, remember that: 您可以从应用程序引擎程序调用所有PeopleTools API。使用API时&#xff0c;请记住: All the PeopleTools …

【机器学习】算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

计算两个经纬度之间的实际距离(Haversine公式)----c++

来源:https://www.open-open.com/lib/view/open1430573897802.html 原理亦可参考:https://blog.csdn.net/gaocuisheng/article/details/126060795 #include <cmath> #define EARTH_RADIUS 6371.0;// 地球半径&#xff0c;单位千米static double HaverSin(double theta…

文献速递:人工智能在新生儿重症监护室:现在是时候了

人工智能在新生儿重症监护室&#xff1a;现在是时候了 01 文献速递介绍 文章介绍了AI的多学科特性&#xff0c;包括计算机科学、数学、神经科学和哲学。AI的目标是通过各种计算和算法技术创建智能机器。尽管早期对人类水平AI的预测未能实现&#xff0c;但对AI的期待仍然强烈…

OpenGL 图元赋色(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里同样对OpenGL中的顶点赋色相关功能进行封装,便于我们后续的使用,具体内容可以阅读代码。 二、实现代码 这里我们需要改造一下我们之前的Drawable基类,这样后续的所有图元都可以通过它来进行顶点赋色。 Drawable.h #i…

ubuntu20.04配置OpenCV的C++环境

ubuntu20.04配置OpenCV的C环境 这里以opencv-3.4.16为例 复现https://github.com/raulmur/ORB_SLAM2此项目&#xff0c;需安装opencv及其他依赖&#xff0c;可见README.md详情 1.下载opencv源代码 https://opencv.org/releases/ 2.下载OpenCV的扩展包opencv_contrib&#x…

python安装redis库

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

杂货铺 | Windows系统上解压缩tgz文件

文章目录 &#x1f4da;快速终端打开实现 & 解压缩实现步骤&#x1f4da;环境变量的一般配置步骤 & 问题解决思路 &#x1f4da;快速终端打开实现 & 解压缩实现步骤 将对应的tgz文件放入对应的文件夹。快速在指定文件夹下打开终端 打开对应的路径 双击地址栏 然后…

计算机视觉面试题-01

计算机视觉面试通常涉及广泛的主题&#xff0c;包括图像处理、深度学习、目标检测、特征提取、图像分类等。以下是一些可能在计算机视觉面试中遇到的常见问题&#xff1a; 图像处理和计算机视觉基础 图像是如何表示的&#xff1f; 图像在计算机中可以通过不同的表示方法&…

Ansible的错误处理

环境 管理节点&#xff1a;Ubuntu 22.04控制节点&#xff1a;CentOS 8Ansible&#xff1a;2.15.6 ignore_errors 使用 ignore_errors: true 来让Ansible忽略错误&#xff08;运行结果是 failed &#xff09;&#xff1a; --- - hosts: alltasks:- name: task1shell: cat /t…

新手如何买卖可转债,可转债投资基础入门

一、教程描述 什么是可转债&#xff1f;可转债是可转换债券的二次简称&#xff0c;原始全称是可转换公司债券&#xff0c;这是一种可以在特定时间、按特定条件&#xff0c;转换为普通股票的特殊企业债券&#xff0c;可转换债券兼具债权和股权的特征&#xff0c;其英文为conver…

[网鼎杯 2020 朱雀组]Nmap

启动环境 结合题目首先就是要知道关于关于nmap命令 相关的命令-oN 标准保存 -oX XML保存 -oG Grep保存 -oA 保存到所有格式 -iL 读取文件内容&#xff0c;以文件内容作为搜索目标 -o 输出到文件 -sP Ping 扫描 还有许多 nmap命令https://blog.csdn.net/weixin_735627…

基于OGG实现Oracle实时同步MySQL

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

学习Pandas 二(Pandas缺失值处理、数据离散化、合并、交叉表与透视表、分组与聚合)

文章目录 六、高级处理-缺失值处理6.1 检查是否有缺失值6.2 缺失值处理6.3 不是缺失值NaN&#xff0c;有默认标记的 七、高级处理-数据离散化7.1 什么是数据的离散化7.2 为什么要离散化7.3 如何实现数据的离散化 八、高级处理-合并8.1 pc.concat实现合并&#xff0c;按方向进行…

安卓用SQLite数据库存储数据

什么是SQLite&#xff1f; SQLite是安卓中的轻量级内置数据库&#xff0c;不需要设置用户名和密码就可以使用。资源占用较少&#xff0c;运算速度也比较快。 SQLite支持&#xff1a;null&#xff08;空&#xff09;、integer&#xff08;整形&#xff09;、real&#xff08;小…

Linux基本指令(前篇)

目录 1.ls指令 2.pwd指令 3.cd 指令 4.touch指令 5.mkdir指令&#xff08;重要&#xff09; 6.rmdir指令 && rm 指令&#xff08;重要&#xff09; 7.man指令&#xff08;重要&#xff09; 1.ls指令 ls 选项 目录或文件 对于目录&#xff0c;该命令列出该目录下的所…

【SpringCloud】微服务的扩展性及其与 SOA 的区别

一、微服务的扩展性 由上一篇文章&#xff08;没看过的可点击传送阅读&#xff09;可知&#xff0c; 微服务具有极强的可扩展性&#xff0c;这些扩展性包含以下几个方面&#xff1a; 性能可扩展&#xff1a;性能无法完全实现线性扩展&#xff0c;但要尽量使用具有并发性和异步…

OD机考真题搜集:查字典

题目 输入一个单词前缀和一个字典,输出包含该前缀的单词 输入 单词前缀+字典长度+字典字典是一个有序单词数组 输入输出都是小写 输出 所有包含该前缀的单词,多个单词换行输出若没有则返回-1 示例 1 输入: b 3 a b c 输出: b示例 2 输入: abc 4 a ab abc abcd 输出: …