Skip to content

Commit

Permalink
add research
Browse files Browse the repository at this point in the history
  • Loading branch information
foolcage committed Nov 10, 2019
1 parent 79dc0a8 commit 98d2a8b
Show file tree
Hide file tree
Showing 3 changed files with 310 additions and 1 deletion.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,6 @@ data.tar.gz

# zen/

node_modules/
node_modules/

*running.ipynb
Binary file added research/imgs/gongzhonghao.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
307 changes: 307 additions & 0 deletions research/technical1.ipynb
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
}

0 comments on commit 98d2a8b

Please sign in to comment.