-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
310 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -105,4 +105,6 @@ data.tar.gz | |
|
||
# zen/ | ||
|
||
node_modules/ | ||
node_modules/ | ||
|
||
*running.ipynb |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,307 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"阅读下面文章前,请保证[**zvt**](https://github.com/zvtvz/zvt)的环境已经准备好。\n", | ||
"\n", | ||
">源码: \n", | ||
">https://github.com/zvtvz/zvt \n", | ||
">https://gitee.com/null_071_4607/zvt\n", | ||
"\n", | ||
">文档: \n", | ||
">https://zvtvz.github.io/zvt/ \n", | ||
">http://zvt.foolcage.com\n", | ||
"\n", | ||
"## 1. 什么是技术分析\n", | ||
"所谓技术分析,是以历史成交数据(量价)为基础的一种分析方法。 \n", | ||
"数据在时间上的排列,就有了图形(形态)。波浪,趋势,震荡,头肩顶,头肩底,压力线,支撑线等皆属此列。 \n", | ||
"而对数据进行各种维度的计算,便有了技术指标。ma,macd,kdj等皆属此列。 \n", | ||
"\n", | ||
"本质上,形态和指标并没有区别,都是对量价数据的一种计算,它是对真实的已经发生的买卖情况的不同角度的呈现.\n", | ||
"\n", | ||
"## 2. 技术分析有用吗?\n", | ||
"这个世界有很多不屑于技术分析而专注基本面的人,也有很多只看k线图而有意忽略其他因素的人,其中都有人能赚到钱,也有人亏损累累。 \n", | ||
"似乎,技术分析并不是那么必须。\n", | ||
"\n", | ||
"其实,从逻辑上,技术分析肯定是有用的。 \n", | ||
"因为,技术分析的因子里面最重要的就是价格,而连所谓价值投资派也必须重视价格。\n", | ||
"\n", | ||
"而往深层次看,已经发生的买卖情况很多时候有着明确的含义,比如高位的巨量顶分型往往是明确的上涨动力耗尽的信号。\n", | ||
"而清醒的投资者显然不能忽略这些信号。\n", | ||
"\n", | ||
"## 3. 经典论断\n", | ||
"技术分析的经典门派有道氏,艾略特波浪理论,江恩,k线形态等;其本质都是想从历史的成交数据中去寻找规律,其中夹杂着很多把或然当成必然的臆测,甚至缺少一个完整的成功率的统计,基本上都是朴素的经验主义,缺少逻辑上的严谨和统一。\n", | ||
"\n", | ||
"对此,缠中说禅曾经有过经典的论断:\n", | ||
"\n", | ||
">现在,问题的关键变成,如何去寻找这三个互相独立的程序。首先,技术指标,都单纯涉及价量的输入而来,都不是独立的,只需要选择任意一个技术指标构成一个买卖程序就可以。对于水平高点的人来说,一个带均线和成交量的K线图,比任何技术指标都有意义。其次,任何一个股票都不是独立的,在整个股票市场中,处在一定的比价关系中,这个比价关系的变动,也可以构成一个买卖系统,这个买卖系统是和市场资金的流向相关的,一切与市场资金相关的系统,都不能与之独立;最后,可以选择基本面构成一个甄别“早泄”男程序,但这个基本面不是单纯指公司赢利之类的,像本ID在前几期所说,国航李总当兵出身不会让自己的股票长期跌破发行价这么没面子,还有认沽权证基本不会让兑现等等,这才是更重要的基本面,这需要对市场的参与者、对人性有更多的了解才可能精通。\n", | ||
"\n", | ||
">技术分析,最核心的思想就是分类,这是几乎所有玩技术的人都搞不清楚的一点。技术指标发出买入信号,对于技术派来说,就以为是上帝给了暗示一般,抱着如此识见,几乎所有技术派都很难有大的成功。技术指标不过是把市场所有可能的走势进行一个完全的分类,为什么技术派事后都是高手,真正干起来就个个阳痿,就是这个原因。\n", | ||
"\n", | ||
">对于水平高点的人来说,一个带均线和成交量的K线图,比任何技术指标都有意义。\n", | ||
"\n", | ||
">有人可能要问,如果业绩突然不好或有什么坏消息怎么办?其实这种问题没什么意义,即使在成熟市场里,这类的影响都会事先反应在走势上,更不用说在中国社会里,什么消息可以没有任何人事先知道?你不知道不等于别人不知道,你没反应不等于别人没反应,而这一切,无论你知道与否,都必然会反应到走势上,等消息明朗,一切都晚了。走势是怎么出来的?是用钱堆出来的!在这资本的社会里,又有什么比用实在的钱堆出来的更可信?除了走势,又有什么是更值得相信的?而那些更值得相信的东西,又有哪样不是建筑在金钱之上的?资本市场就是一个金钱的游戏,除了钱,还是钱。只有钱是唯一值得信任的,而钱在市场上运动的轨迹,就是走势。这是市场中唯一可以观察与值得观察的东西。一切基本面、消息面等的分析,最终都要落实到走势上,要让实在的钱来说话,否则都是自渎而已。只要有钱的运动,就必然留下轨迹,必然在走势上反映出来。\n", | ||
"\n", | ||
"缠师这四段话明确了几点:\n", | ||
"* 技术分析是交易系统重要的一个部分,但不是全部\n", | ||
"* 好的技术分析是分类明确的评估系统,深陷进去是自找苦吃\n", | ||
"* 走势图有更深的含义\n", | ||
"\n", | ||
"## 4. 均线\n", | ||
"从不精确的角度,均线是所有技术分析里面最简单但也最实用的。\n", | ||
"甚至,技术分析有均线就够了。因为,技术分析只是一面,这一面无论你如何精确,都是不完美的,过于求精,反而可能一叶障目。\n", | ||
"\n", | ||
"那么均线的本质是什么?有什么必然的规律可循吗?\n", | ||
"\n", | ||
"先从均线的计算说起,其计算非常简单,就是一定时间窗口的收盘价的平均。\n", | ||
">指数移动平均之类根据离目前时间间隔的不同采取不同的权重,一般越近权重越大,差别不大。\n", | ||
"\n", | ||
"本质上,均线代表着大部分人的持仓成本,从而有一定的压力或者支撑的作用,但也仅此而已,臆测更多并无意义。\n", | ||
"\n", | ||
"而所谓的规律,在人们眼中无非是\"如果发生什么,就会发生什么\"的一种\"必然性\"。\n", | ||
"\n", | ||
"所有的主观投资或者量化投资,都在试图寻找这种\"必然性\",从而被这种“必然性”欺骗。\n", | ||
"\n", | ||
"如果真要说有什么必然性,那就是\"涨多了要跌\",为什么不说“跌多了要涨”呢?因为很多品种是有可能归0的。\n", | ||
"\n", | ||
"## 5. 统计学\n", | ||
"在统计学已经神话到机器学习的今天,不搞点统计学好像就不科学了。\n", | ||
"\n", | ||
"人类的尊严似乎正在被机器夺去,投资似乎正越来越依赖机器。\n", | ||
"\n", | ||
"那么,在巨头们的巨大算力面前,普通人还有机会吗?\n", | ||
"\n", | ||
"似乎还是有的,现象上看:\n", | ||
"* 巴菲特之类的价值投资活得挺好\n", | ||
"* 量化投资的收益目前并没有证明比主观投资优秀\n", | ||
"* 机器学习+高频交易并不一定能给金融市场带来什么好处\n", | ||
"\n", | ||
"从逻辑上看:\n", | ||
"* 机器的算力优势是明显的\n", | ||
"* 机器+复杂模型的代价也是巨大的\n", | ||
"\n", | ||
"那么,普通人的机会在哪里?\n", | ||
"* 常识\n", | ||
"* 市场规则的理解\n", | ||
"* 简单的统计学和自动化\n", | ||
"\n", | ||
"前面两点先不说,为什么是简单的统计学呢?首先,简单意味着容易理解,容易执行,容易验证,并且不需要很大的算力,一般的电脑即可。\n", | ||
"在一定级别上,简单的统计学的力量并不比复杂的模型差。而自动化能够让人从枯燥无味的重复劳动中解放出来,从而专注一些更有用和有趣的方面。\n", | ||
"而这一切,只要设计合理,是可以靠一般的电脑完成的。\n", | ||
"\n", | ||
"## 6. 均线统计学\n", | ||
"\n", | ||
"算法:取5,10日均线,定义两种状态\n", | ||
"\n", | ||
"* 5日均线>10日均线(up)\n", | ||
"\n", | ||
"* 5日均线<=10日均线(down)\n", | ||
"\n", | ||
"当前持续该状态的次数记为current_count,并单独记录每轮持续的total_count;状态1用正数表示,状态2用负数.\n", | ||
"\n", | ||
"[具体实现代码](https://github.com/zvtvz/zvt/blob/master/zvt/factors/ma/ma_stats.py)\n", | ||
"\n", | ||
"[全市场每天持续运算](https://github.com/zvtvz/zvt/blob/master/zvt/factors/ma/ma_stats_runner1.py)\n", | ||
"\n", | ||
"运算后的数据如下:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from zvt.api import *\n", | ||
"from zvt.domain import *\n", | ||
"import plotly.express as px" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"df = get_data(Stock1dMaStateStats,provider='zvt',entity_id='stock_sz_000001')\n", | ||
"df[df.current_count>0].describe()\n", | ||
"df[df.current_count<0].describe()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"这似乎不够直观,除了上下的次数差不多,看不出啥来,让我们用histogram来展示其分布:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"fig = px.histogram(df.loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"df = get_data(Stock1dMaStateStats,provider='zvt',entity_id='stock_sz_000002')\n", | ||
"fig = px.histogram(df.loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"df = get_data(Stock1dMaStateStats,provider='zvt',entity_id='stock_sz_300104')\n", | ||
"fig = px.histogram(df.loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"从中可以看出:\n", | ||
"* 无论是牛股还是垃圾股,up和down的次数和分布都是基本对称的\n", | ||
"* +-(1-10)占据了大部分的时间,其中+-(3-9)尤甚\n", | ||
"\n", | ||
"全市场的统计看一下(数据较大,导入需要比较长的时间):" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"df = get_data(Stock1dMaStateStats,provider='zvt')\n", | ||
"fig = px.histogram(df.loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"对称性更明显,+-(1-2)差不多,然后都是+-(3-5)递增,5之后逐步递减。而不管是个股,板块,全市场进行统计,都差不多。\n", | ||
"这说明了什么?对操作有什么帮助呢?\n", | ||
"这至少说明了:\n", | ||
"* 涨多了会跌,任何时候追涨都有极大的风险,特别是连涨(5-8)日后,变盘的概率太大了\n", | ||
"* 整体上,市场的涨跌是基本平衡的\n", | ||
"* 这种对称性及其变化说明,上涨,下跌,震荡(up和down的切换如果持续时间较短,一般就为震荡)是交替出现并有一定的周期性\n", | ||
"\n", | ||
"给操作的指导意义:\n", | ||
"* 没有什么股票是值得长期持有的,连续的上涨后,再好的股票也需要震荡来消化,而差的就可能永远回不去了\n", | ||
"\n", | ||
"现实的操作,显然知道这些是远远不够的,但连这些都不知道,那是肯定死都不知道怎么死的。\n", | ||
"\n", | ||
"看一看周线的情况如何:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"wk_df = get_data(Stock1wkMaStateStats,provider='zvt')\n", | ||
"fig = px.histogram(wk_df.loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"周线上也呈现出这种一致性,可见“股价就是随机漫步”不过是如\"股市是赌场\"般的人云亦云的无知显摆。\n", | ||
"\n", | ||
"限定短一点的时间周期看一看:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"fig = px.histogram(wk_df[wk_df.timestamp>='2015-01-01'].loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"fig = px.histogram(wk_df[wk_df.timestamp>='2019-01-01'].loc[:,['total_count']],x='total_count')\n", | ||
"fig.show()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"时间周期短一些后,这种对称性会有一定破坏,但以下几点依然有效\n", | ||
"\n", | ||
"* up和down的次数和分布都是基本对称的\n", | ||
"* +-(1-10)占据了大部分的时间,其中+-(3-9)尤甚" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## 7. 小结\n", | ||
"\n", | ||
"以上,我们对技术分析和如何利用zvt来进行均线统计有了一个初步的认识,那么如何根据均线来选股并做相应的通知呢?我们下一节见。\n", | ||
"\n", | ||
"## 扩展问题\n", | ||
"* 如何对数字货币进行相应的统计?其有相似的规律吗?\n", | ||
"* 期货呢?\n", | ||
"提示:只需要理解zvt系统对entity的定义,在[MaStateStas](https://github.com/zvtvz/zvt/blob/master/zvt/factors/ma/ma_stats.py#L103:7)输入相应的entity类别即可。\n", | ||
"* 如何利用up,down两种状态的变化来定义趋势,震荡?并以此设计交易的策略来进行回测和交易。\n", | ||
"\n", | ||
"---\n", | ||
"**知乎专栏**: \n", | ||
"https://zhuanlan.zhihu.com/automoney \n", | ||
"\n", | ||
"**公众号**: \n", | ||
"<img src=\"./imgs/gongzhonghao.jpg\" width=\"25%\" alt=\"公众号\">" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.6.4" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 4 | ||
} |