炒股有什么是谁叫你们炒股是哪个人讲的在用的?

最近炒股是买什么就跌,一直是亏损哎,哭,作为学过python的人来讲怎么能容忍,之前也炒过股票觉得用阳包阴这样的k线来选出来的股票还不错。于是说做就做,我可以用python来写一个选股的程序。 好!有了idea是第一步,要怎么实现呢,网上找了资料,大部分都是用tushare库来获取股票数据的。于是动起来写了一个直接通过接口获取数据的程序,从3504只股票里面选取出来我需要的股票,执行时间居然需要二十多分钟,太慢!差评!同样不能容忍。 因此,我想到了数据库。我就想能不能将所有的A股数据添加进数据库里面,我每次执行的时候直接从数据库里面去取数据,这样会大大加快了我的执行速度 于是说干就干,先理清楚思路。 1.需要获取到所有股票的代码跟名称等。于是有了write_allstock这个文件 2.需要从所有的股票里面找出阳包阴的股票,以及计算出它们的收益率的话,我需要所有股票的一段时间的行情 于是有了creat_everydatebase 3.有了这一段时间的数据,但是这些数据时死了,不会每天给我自动更新,因此我需要每天定时的将当天的数据加 进去。所以写了write_everyday 4.好了,所有的股票数据一段时间的行情而且会每天定时更新都存在我的数据库里面了,就需要去统计今天有哪些股票满足 阳包阴的情况于是产生了find_stock 5.虽然找到了当天满足阳包阴的股票了,但是我心里还是没有谱,我想对比一下这个股票之前出现这种情况的时候如果 第二天买入的话到底有多少收益,所以有了win_rates 6.好了整体框架和思路都出来了,那么有两个文件需要每个交易日都执行的,所以将它们绑在一起,而且每天的报告出来 之后也不一定都有时间打开电脑去看,所以加入了通过邮件自动发送当天报告到邮箱的功能。就有了run_all 至于其它的几个文件,打开看看下面都有解释和注释目前我的选股条件是阳包阴,而且当天要涨停。下面送上代码。执行代码的前提是,需要有python,需要安装本地mysql数据库,还需要导入mysql、tushare、pandas、lxml、bs4等需要支持的python库。另外:完整项目也可以访问我的github,地址:https://github.com/cat-steel/stock_pick整个架构就是这样子write_allstock.pyimport mysql.connector
import tushare as ts
#将所有的股票名称和股票代码、行业、地区写入到名为allstock的表中,这个文件只需要执行一次
#通过tushare库获取所有的A股列表
stock_info = ts.get_stock_basics()
#连接数据库
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
codes = stock_info.index
names = stock_info.name
industrys = stock_info.industry
areas = stock_info.area
#通过for循环遍历所有股票,然后拆分获取到需要的列,将数据写入到数据库中
for i in range(0,len(stock_info)):
cursor.execute('insert into allstock (code,name,industry,area) values (%s,%s,%s,%s)',(codes[i],names[i],industrys[i],areas[i]))
#统计所有A股数量
print('共获取到%d支股票'%a)
conn.commit()
cursor.close()
conn.close()creat_everydatebase.pyimport tushare as ts
import mysql.connector
import re,time
#创建所有股票的表格以及插入每支股票的近段时间的行情,这个文件只需要执行一次!!!
#想要写入哪一段时间的数据只需要修改starttime,endtime的时间就可以了
def everdate(starttime,endtime):
#获取所有有股票
stock_info = ts.get_stock_basics()
#连接数据库
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
codes = stock_info.index
#通过for循环以及获取A股只数来遍历每一只股票
for x in range(0,len(stock_info)):
#匹配深圳股票(因为整个A股太多,所以我选择深圳股票做个筛选)
if re.match('000',codes[x]) or re.match('002',codes[x]):
#以stock_加股票代码为表名称创建表格
cursor.execute('create table stock_' + codes[x] + ' (date varchar(32),open varchar(32),close varchar(32),high varchar(32),low varchar(32),volume varchar(32),p_change varchar(32),unique(date))')
#利用tushare包获取单只股票的阶段性行情
df = ts.get_hist_data(codes[x],starttime,endtime)
print('%s的表格创建完成'%codes[x])
#这里使用try,except的目的是为了防止一些停牌的股票,获取数据为空,插入数据库的时候失败而报错
#再使用for循环遍历单只股票每一天的行情
for i in range(0,len(df)):
#获取股票日期,并转格式(这里为什么要转格式,是因为之前我这样的格式写入数据库的时候,通过通配符%之后他居然给我把-符号当做减号给算出来了查看数据库日期就是2000百思不得其解想了很久最后决定转换格式)
times = time.strptime(df.index[i],'%Y-%m-%d')
time_new = time.strftime('%Y%m%d',times)
#插入每一天的行情
cursor.execute('insert into stock_'+codes[x]+ ' (date,open,close,high,low,volume,p_change) values (%s,%s,%s,%s,%s,%s,%s)' % (time_new,df.open[i],df.close[i],df.high[i],df.low[i],df.volume[i],df.p_change[i]))
print('%s这股票目前停牌'%codes[x])
conn.close()
cursor.close()
#统计总共插入了多少张表的数据
print('所有股票总共插入数据库%d张表格'%a)
everdate('','')write_everyday.py#每天下午三点之后进行股票数据添加到数据库,这个文件一般只需要每天执行一次,也可以用来补行情,如果数据库缺少那天的数据的话,只需修改new_time就行,如下示例
import tushare as ts
import mysql.connector
import re,time
#每天行情出来了之后,插入当天的行情到每支股票的每个表格中
def everystock():
#获取所有股票列表
stock_info = ts.get_stock_basics()
#获取股票代码列
codes = stock_info.index
#连接数据库
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
#获取当前时间
new_time = time.strftime('%Y-%m-%d')
#new_time = ''
##使用for循环遍历所有的股票
for x in range(0,len(stock_info)):
if re.match('000',codes[x]) or re.match('002',codes[x]):
#获取单只股票当天的行情
df = ts.get_hist_data(codes[x],new_time,new_time)
#将时间转换格式
times = time.strptime(new_time,'%Y-%m-%d')
time_new = time.strftime('%Y%m%d',times)
#将当天的行情插入数据库
cursor.execute('insert into stock_'+codes[x]+ ' (date,open,close,high,low,volume,p_change) values (%s,%s,%s,%s,%s,%s,%s)' % (time_new,df.open[0],df.close[0],df.high[0],df.low[0],df.volume[0],df.p_change[0]))
print('%s的数据插入完成'%codes[x])
print('%s无行情或者数据库已经存在当天的数据'%codes[x])
#统计当天插入数据库的股票数量
dir_log = 'D:\\python\\work\\stock\\WD\\run\log\\'
filename = dir_log + new_time +'.log'
flog = open(filename,'w')
flog.write('今天的行情插入完成%s条'%a)
# print('今天的行情插入完成%s条'%a)
flog.close()
conn.commit()
conn.close()
cursor.close()
#everystock()
find_stock.pyimport mysql.connector
import re,time
import datetime,os
#从数据库获取股票数据,统计想要查找日期的满足阳包阴并且当天涨停的股票
def valid_stock(dates):
#载入日志,好查错(因为之前统计出来的股票我去实时查了一下完全不满足条件,所以想到了加入日志好定位是哪个地方出错了)
dir_log = 'D:\\python\\work\\stock\\WD\\run\log\\'
filename = dir_log + dates +'.log'
flog = open(filename,'w')
# 先将字符串格式的时间转换为时间格式才能计算昨天的日期
now = datetime.date(*map(int,dates.split('-')))
oneday = datetime.timedelta(days=1)
yestody = str(now - oneday)
#将昨天日期转换为规定的字符串格式
times = time.strptime(yestody,'%Y-%m-%d')
str_yestoday = time.strftime('%Y%m%d',times)
flog.write('执行的时间前一天是%s\n'%str_yestoday)
#将想要查找的日期转换为规定的字符串格式
str_today = time.strptime(dates,'%Y-%m-%d')
today = time.strftime('%Y%m%d',str_today)
flog.write('执行的时间是%s\n'%today)
#连接数据库
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
#查找allstock表获取所有股票代码
cursor.execute('select code from allstock')
value_code = cursor.fetchall()
count = []
#遍历所有股票
for i in range(0,len(value_code)):
if re.match('000',value_code[i][0]) or re.match('002',value_code[i][0]):
#查询所有匹配到的股票,将今天与昨天的数据对比
cursor.execute('select * from stock_'+ value_code[i][0]+ ' where date=%s or date =%s order by date desc'%(today,str_yestoday))
#cursor.execute('select * from stock_'+ value_code[i][0]+ ' where date=%s or date =%s'%('',''))
value = cursor.fetchall()
#1是昨天,2是今天
#今天的开盘价
opens1 = float(value[0][1])
#今天的收盘价
close1 = float(value[0][2])
#今天的涨幅
p_change1 = float(value[0][6])
#昨天的。。。。。
opens2 = float(value[1][1])
close2 = float(value[1][2])
p_change2 = float(value[1][6])
#加入这两天的数据满足昨天下跌超过2%,而且今天的开盘价低于昨天的收盘价,且今天的收盘价高于昨天的收盘价,就满足阳包阴的条件
if opens2&close1 and close2&opens1 and p_change2&-2 and p_change1&9.8:
flog.write('%s票%s的开盘价是%s\n'%(value_code[i][0],today,opens1))
flog.write('%s票%s的收盘价是%s\n'%(value_code[i][0],today,close1))
flog.write('%s票%s的涨幅是%s\n'%(value_code[i][0],today,p_change1))
flog.write('%s票%s的开盘价是%s\n'%(value_code[i][0],str_yestoday,opens2))
flog.write('%s票%s的收盘价价是%s\n'%(value_code[i][0],str_yestoday,close2))
flog.write('%s票%s的涨幅是%s\n'%(value_code[i][0],str_yestoday,p_change2))
#将满足条件的股票代码放进列表中,统计当天满足条件的股票
count.append(value_code[i][0])
#之前有次sql语句出错了,order by后面没加date,每次寻找都是0支,找了半个多小时才找出来是sql语句的问题
flog.write('%s停牌无数据,或者请查看sql语句是否正确\n'%value_code[i][0])#一般不用管,除非执行好多天的数据都为0时那可能输sql语句有问题了
print('总共找到%d支满足条件的股票'%a)
flog.close()
conn.close()
cursor.close()
return count,a
#valid_stock('')win_rates.py#这个文件可以联合find_stock单独运行,输入todays的日期可以直接查找当天出现过的股票
import mysql.connector
import re,time
import datetime
import find_stock
#统计当天满足阳包阴所有股票,在设置的这段时间里面有没有出现过类似的行情,并且计算如果出现过,那么那天之后的5天收益率是多少
def rate(todays):
print(todays)
#将满足阳包阴的这些股票,以及它们之前满足的时候收益率都写到报告里面方便查看整体情况
count,a = find_stock.valid_stock(todays)
dir_repor = 'D:\\python\\work\\stock\\WD\\run\\report\\'
filename = dir_repor + todays +'.txt'
fp = open(filename,'w')
fp.write('总共找到%d支满足条件的股票分别是\n%s\n'%(a,count))
#连接数据库
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
#遍历满足条件的这些股票
for x in count:
#从数据库里挑出它们的行情
cursor.execute('select * from stock_'+x+' order by date desc')
value = cursor.fetchall()
# print(value)
for i in range(0,len(value)):
#遍历这支股票的所有天数
dates = value[i][0]
opens2 = float(value[i][1])
#第i行的第一列
opens1 = float(value[i+1][1])
close2 = float(value[i][2])
#第i行的第二列
close1 = float(value[i+1][2])
p_change1 = float(value[i+1][6])
#第i行的第六列
p_change2 = float(value[i][6])
if opens2&close1 and close2&opens1 and p_change1&-2 and p_change2&9.8:
#这一句很重要,就是在出现阳包阴之后得有5天的数据区统计,否则就会变成-5就会从开始统计的那天去取数据,结果就导致当天的这些股票统计收益的时候也有不过都是错的
wins = (float(value[i-6][2])-float(value[i-1][1]))/float(value[i-1][1])*100
print('%s的%s之后5天收率为百分之%d'%(x,dates,wins))
fp.write('%s在%s之后5天收率为百分之%d\n'%(x,dates,wins))
fp.write('%s在%s之前没有满足条件的行情\n'%(x,dates))
print('%s前3个月无满足条件的情况'%x)
fp.close()
conn.close()
cursor.close()
#rate('')run_all.py#总的运行文件,实现将统计报告发送邮件到自己的邮箱,将这个文件放到Jenkin上每个交易日下午3点之后运行就可以收到当天满足行情的股票了
import win_rates
import write_everyday
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
#获取最新的文件
def new_file(test_report_dir):
lists = os.listdir(test_report_dir)
lists.sort(key = lambda fn:os.path.getmtime(test_report_dir + fn))
file_path = os.path.join(test_report_dir,lists[-1])
return file_path
def send_email():
f = open(new_file(test_report_dir),'rb')
mail_body = f.read()
# print(mail_body)
#设置邮件服务器和账号密码
smtpserver = 'smtp.163.com'
password = '*****'
#设置接收邮箱和主题
sender = user
receiver = ''
subject = '今天的股票行情来啦'
msg = MIMEMultipart('mixed')
att = MIMEText(mail_body,'txt','utf-8')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = ' filename = "%s.txt"'%todays
msg.attach(att)
msg['From'] = user
msg['To'] = receiver
msg['Subject'] =Header(subject,'utf-8')
smtp = smtplib.SMTP()
smtp.connect(smtpserver,25)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()
if __name__ == '__main__':
test_report_dir = 'D:\\python\\work\\stock\\WD\\run\\report\\'
#如果执行的不是当天的日期的话请将第一个todays注释掉,最好也将write_everyday.everystock()注释掉,用第二个todays
todays = time.strftime('%Y-%m-%d')
# todays = ''
#如果不是交易日执行的话write_everyday会报错,会报tushare获取不到行情,所以请手动输入日期并将下面一行注释掉
write_everyday.everystock()
time.sleep(3)
win_rates.rate(todays)
send_email()delete_stock.pyimport mysql.connector
import re,time
import datetime,os
def delete(dates):
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
cursor.execute('select code from allstock')
value_code = cursor.fetchall()
for i in range(0,len(value_code)):
if re.match('000',value_code[i][0]) or re.match('002',value_code[i][0]):
cursor.execute('delete from stock_'+ value_code[i][0]+ ' where date=%s'%(dates))
#删除重复的数据
print('%s已删除'%value_code[i][0])
print('共删除%d支股票的数据'%a)
conn.commit()
conn.close()
cursor.close()
delete('')
add_sql_unique.pyimport mysql.connector
import re,time
import datetime,os
#因为之前创建表格的时候没加唯一性约束,容易插入重复的数据,导致最后计算记过不准确,所以穿件一个函数给之前没加约束的加上去
def addunique():
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
cursor.execute('select code from allstock')
value_code = cursor.fetchall()
for i in range(0,len(value_code)):
if re.match('000',value_code[i][0]) or re.match('002',value_code[i][0]):
cursor.execute('alter table stock_'+ value_code[i][0]+ ' add unique (date)')
#删除重复的数据
print('%s已添加唯一性约束完成'%value_code[i][0])
conn.close()
cursor.close()
addunique()
可以选股了,拿去赚钱吧,亏钱了可不要赖我哦。效果如图:哦,最后还得说,需要将执行文件run_all.py放入Jenkins,每天收盘之后定时执行就行了,这样,每天收盘之后就可以收到,送过来的好股票了。 赚钱去咯,欢迎各位大神提意见,帮忙完善。
用 Python 写了个简单的股票量化交易框架
原文链接:用python写了个简单的股票量化交易框架摘抄他人的文章,方便存个底。集成了以前写的 [easytrader](http://github.com/shidenggui/easytrader...
一个用Python编写的股票数据(沪深)爬虫和选股策略测试框架
一个股票数据(沪深)爬虫和选股策略测试框架,数据基于雅虎YQL和新浪财经。
根据选定的日期范围抓取所有沪深两市股票的行情数据。
根据指定的选股策略和指定的日期进行选股测试。
计算选股测试实际结果(包括...
Python股票处理之四_股票筛选
本例实现了股票筛选功能。
前一半是过滤出市盈率在0-30倍之间,且今日换手率&1%,涨幅超2%的股票。
后一半统计今日涨停和接近涨停的股票。
#! usr/bin/pyt...
实战 | 用 Python 选股票,据说可以多挣个20%
本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略。数据导入这里将股票数据存储在stockData.txt文本文件中,我们使用pa...
基于Python预测股价的那些人那些坑,请认真看完!
前几天我们已经看过此文,@爱可可发过一次,今天AI科技大本营又翻译了此文。这篇文章真的很不错,不是在于模型的好坏,而是在于作者对预测股价的一些心得和体会,编辑部觉得大家应该好好的看一下这篇...
Python股市数据分析教程——学会它,或可以实现半“智能”炒股 (Part 2)
本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。
以下为译文
本篇文章是&Python股市数据分析&两部曲中的第二部分(第一部分的文章在这里),内容基于我在犹他州立大学MAT...
Python量化选股框架
量化选股就是采用数量的方法判断某个公司是否值得买入的行为。根据某个方法,如果该公司满足了该方法的条件,则放入股票池,如果不满足,则从股票池中剔除。量化选股的方法有很多种,总的来说,可以分为公司估值法、...
Python获取国内股票数据
安装支持库
$ pip install panda
$ pip install tushare
Pandas是数据分析工具包
TuShare是国内股票数据...
没有更多推荐了,到底什么样的炒股技术才是有用的技术?
你们很多人可能都有这个感受,在市面上买了很多书读了,一看就懂,一做就错。老佟的感觉也是这样。这是为什么呢?你反过来想想,你如果有很好的技术,会出书几十元一本卖给别人吗?何况,你的书一出来马上就有人盗版。所以,老佟说,市面上的书扫盲可以,作为实战远远是不行的。
除了上面一个原因外,还有一种重要的原因。市面上的书根本跟实战不沾边。大多数书都是讲均线理论、形态理论、波浪理论的。这些东西有用吗?老佟认为没用。因为他们一是互相脱节;二是没有和庄家的行为结合起来。
那么什么样的技术才是好技术呢?回答这个问题,要从股市实战来解答。
你们想想,你们买一只股票最关心的是什么?有的可能是关心基本面,有的可能关心技术面。这是实质性的吗?不是,实质性的是什么呢?就是这个股里面有没有庄家?为什么有的基本面和技术面都好,股价不涨或者说没按你的预期涨?就是因为庄家不作为;有的股票为什么基本面和技术面都不行,但是股价为什么疯涨?就是因为庄家的因数。所以,决定一个股票涨还是不涨,唯一的因数就是庄家。
个股如此,大盘同样如此,中外股市,无一例外。我们还可以列举很多股市是庄家的乐园的例子,比如:
许多人喜欢研究什么顶背离,底背离,你想想看,大盘和个股多少顶背离之后继续涨,多少底背离之后继续跌?这是什么原因,不就是庄家的原因么?
再比如,你们看见MACD死叉了,不能买或者说赶快出局。结果呢?一根阳线马上金叉。你看见均线死叉了,吓的不得了,结果呢,一根长阳或者几根小阳马上就金叉了。这是为什么?这死叉金叉跟庄家有关系吗?
所以,凡是你们看得懂的技术庄家都是用来诱骗散户的。
。。。。。如此等等,不一而足。原因何在?庄家使然啊。
总结以上我们得出一个结论,只有研究庄家的技术才是真正的好技术。
那么怎样研究庄家呢?那么我们从庄家行为开始:庄家要做一只股票,首先要干什么?是不是要收集筹码?,所以,研究庄家必须从筹码开始。筹码的变化导致什么呢?会导致盘面成交增加,但是成交放大之后到底是庄家收集筹码还是庄家对敲出货,那怎么区分呢?这也非常简单,成交放大了股价涨,那庄家肯定是筹集筹码。如果成交放大之后股价下跌,就是是庄家对敲出货。这个反应的是什么呢?当然是趋势了。所以,筹码之后就是趋势了。第三个问题,庄家做庄是有路线图的,是要采取欺骗手段的。
老佟把上面综合起来,就形成了一个有用技术的核心:筹码、趋势、结构(路线图)、行为(心理)。所以,一个成熟的研究庄家的技术应该是“筹码、趋势、结构和行为”四合一,才能算得上真正的好技术。
老佟的粉丝们,你们不仅要着眼于当前做好股票,更要着眼于未来的股票期权,从现在开始打好坚实的技术基础,一旦股票期权的门槛降低,你就能进入这个领域,以小博大快速致富,从此改变自己的一生,也改变你孩子将来的命运!
----------------------------
你关注的人决定了你关注的世界。如果感觉我的文章对您有所帮助或者喜欢我的文章,欢迎关注我的微信公众账号。此公众号不是万能的,但日后定可协助解决股票上的许多问题。
微信号:ltnczx
或者点击即可。
这里要打造一个真实的直播战场!如果喜欢文章,希望您能推荐给身边的朋友,持续关注。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
联系老师QQ
个股咨询点击这里
今日搜狐热点股票价值线有什么用?
最初研究上市公司财务报表,分析财务报表数据、指标用以辅助股票投资,在这个过程中,我发现用财报数据来引导投资很靠谱,比市场上的技术面、消息面更让人淡定,不必纠结于量价关系,是否有利空消息出来,也不用常常盯着股价,最后收成也不错。
&于是,我们把财报的研究,设立了一家公司,创建了爱股说这样一个网站,将这种研究成果转化为可以让大家看得到的量化信息,帮助大家提高收益,减少损失。但可惜的是,财报数据分析对很多人来说,还是太专业,宁可听电视里黑嘴的股评,也不愿弄懂枯燥的数据,所以一直在研究如何降低财报的阅读门槛,让更多的人可以入门。
&但就是依靠这些分析数据,公司的同事在2015年股灾里,都顺利逃过,并且买入了分级A产品,获得了比别人更多的收益。同时我们也总结出来,真正让人败家的事,不是吃吃喝喝,而是投资。
一、发现股价与财报间的规律
&&在当初发现爱股说的价值线计算模型,是因为长期跟踪,发现上市公司的股价与净资产收益率(ROE)直接相关,一旦公司净资产收益率出现掉头上升,股价长期来看必然上升,而净资产收益率掉头向下时,股价亦会走出相同的趋势。
这是中国巨石的净资产收益率的趋势图(年化,数据来源于爱股说网站),而同期,中国巨石的股价K线走势是这样的:
在ROE持续上升这一段过程中,中国巨石接近上涨了5倍,时间大概是20个月,中间一段遇上2015年的股灾。而在2015年10月后股价的回落,并不是公司的盈利停止了增长,而是公司非公开发行新股,融资47.43亿,导致净资产大幅增长,从而以净资产衡量的净资产收益率(ROE)降低,进一步引起股价下挫。
当然,ROE下降,股价随之下跌的相反的例子也有,如大秦铁路。
大秦铁路净资产收益率在2015年Q3起,明显回落,恰逢股灾,所以,此后走出来的股价趋势是这样的。
&大秦铁路没能象中国巨石一样,在股灾股价遭遇重挫,回到了杠杆牛市起来前的价位,没能象中国巨石一样幸运,还能爬起来,原因就是在于净资产收益率出现了滑坡。
&&&&&比较中国巨石与大秦铁路,我们发现这两家公司后期股价下跌的根本原因是净资产收益率下降,但是前一家由于增发形成净资产大幅增长,而后一家是由于业绩下滑造成的。中国巨石所融资金在投产后,有可能获得更大的增长与更高的收益,而大秦铁路没有这种机会。
&&&&&同样道理下,我们还发现了伊利股份、小天鹅A、济川药业等等好的公司,但也发现有例外的情况。
二、从股价趋势与净资产收益率发现相关性
&&&&大部分股票短期内看不出股价与ROE的关系,但中长期还是可以看出是相关的。不过也有那么一些股票,中长期也感觉二者关联性不大,如东华能源,不妨一看。
&&&&&东华能源在爱股说的个股分析数据上,其实净资产收益率自2015年后,一直呈现上升的趋势,特别是2015年四季度有一个大幅上升的趋势。但是,我们看东华能源股票的价格却是这样的:
&&&&&&&对于这种原因,用净资产收益率是无法诠释的。所以,我觉得一定还有其他的原因,比如说,2015年时的股价就高估了,导致公司的股价与净资产收益率走出了完全不一样的走势,下面我们会验证。
&&&&&&&我再进一步研究公司股价与净资产收益率的确切的量化关系后发现,股价除了跟净资产收益率有关,还跟公司的每股净资产、当下的市场利率相关。
&&&&&&如果我们投资一盘生意,如果投入资本是100万元,每年赚10%,那么第一年末,这100万投资就会变成110万,第二年末就是121万,到第十年末,就是259.37万,这就应该是这盘生意的价格或者股价。但是,这假设是当时的市场利率是10%的情况下,如果市场利率低于10%,如当下一年期定期存款利率仅1.5%,一年期贷款利率仅5%的情况下,这盘生意肯定有投资者愿意出更多的钱投资或买入,这样,第一年末就不止110万的价格,第二年也不止121万,到第十末末就更不止259.37万了,因为那只是帐面价值,或者说是净资产的价格,市场会给出更高的价格,那就是市值或股价了。
&&&&&&所以,在正常情况下,当企业稳定的净资产收益率高于市场平均利率或回报率的时候,我们给出企业的估值或股票的股价往往是高于其净资产的,俗称溢价。这个市值或每股股价的算法总结后如下:
&&&&&以这个模型,如果低于市场平均回报率或者亏损的企业,其股价应该低于每股净资产,但实际上大多情况不是,因为市场还有流动性溢价,还有中国A股上壳公司资源的稀缺性,这是无法量化的,这不在我们讨论之列,也是价值线模型不能解决的。
&&&&&其实,这个模型改变一下也适用在债券或其他持有过程可以产生回报的投资品上,利率定价高于市场利率的,其交易价格一定会超过面值,不过,这不在今天我讨论的范围,略过。
&&&&&有了这个模型,我就比较容易解释东华能源的这种情况了。以东华能源当前的每股净资产及净资产收益率,利用爱股说的价值线模型,市场可以给预东华能源的价值线是13.15元。而这还是2016年Q3的净资产收益率,前几季的价值线应该更低。所以东华能源股价在2015年以来不跟ROE表现出相关性的原因,是当时东华能股价高估了,无怪乎东华能源净资产收益率一升再升,股价还是不怎么涨。
&&&&&&&而目前东华能源的价格与价值线已经很接近了,如果未来东华能源的净资产收益率进一步提升的话,那么此时公司股价中长线上涨可期。
三、价值线在什么情况下不适用
&&&&&虽然价值线在大多数情况下,是可以用来作为对股票估值的参考,但它也存在一定的局限性,它只适合稳定盈利的企业,无论是稳定增长或不增长(下滑)。但是,对于盈利突然暴涨的企业,尤其是反向收购的企业(借壳上市),由于业绩一两期变化导致年化的净资产收益率大幅上升,因此,容易给计算出一个不切实际的价格,但这种情况,价值线会随着重组后报告的逐季充实,新的财务报告数据会对年化净资产收益率进行自动修正,所以,对这样的公司,观察一段时间其实更好。
&&&&&&如牧原股份及益生股份,分别由于2015年以来猪肉价格与祖代鸡价格上涨,导致短期内盈利暴增,或如分众传媒这样的借壳公司,短期业绩影响到净资产收益率短期内畸高不下,因此,在这种情况下,需要往后两期更多一些财务数据,价值线就会更合理。因此,多一点耐心,前瞻性地展望下,就不会产生太大的偏差。
四、价值线运用的难点是什么?
&&&&&&&很多朋友在用价值线时,亦会自己复核一遍,然后反过头来问我,你取的回本周期为什么是8年?
&&&&&&&对此,我在这里给大家一个回复。价值线计算时的回本周期取8年,一是因为当前市场利率在于低位,抛弃了我以往5年翻一倍的想法,理性点,改为8年翻一倍;第二个原因是因为股票的风险相对比较大,因此需要与其风险相适应的回报率。
&&&&&&&我们对股票回报率的要求,自然要超过一年期定期存款、超过国债收益率和不违约的企业债公司债收益率、超过融资融资的利率,但低于期货期权等衍生产品的收益率,所以按风险排序,股票回报率应该定在与融资融券利率接近但稍高一点,大约在12.5%,按单利计算也就在8年时间,而当前融资的利率是8.5%,融券约是10.5%。
&&&&&当然,这个回报周期不是一成不变的,当市场利率发生变化时,我们要学会适当修正,如果央行调增基准利率,那么回本周期相应要缩短;反之,回本周期需要适当延长。
&&大家也可以建立一个自己的回本年限,这个并不复杂,只需要符合客观、合理就可以,即不要订个1~2年的回本周期,也要要去订个15~10年的回本周期,这些,最终市场会让你修正。因为,回本周期短,市场价格根本跌不到这个位置,而回本周期太长,你低算出的价格买到股票没问题,想按这个价格卖出就难了。
五、爱股说的回本年限是什么?
&&&&除了回本周期外,很多人问我爱股说上的回本年限是什么,不是8年吗?其实,回本周期与回本年限是两个概念。
&&&&回本周期是按市场平均收益率计算的翻一倍需要多少年的指标,对所有的投资品,应该都是趋同的,否则,资金都会往回报周期短的产品上涌,同样也会把它拉平。
&&&&而回本年限,是根据股票当前的股价,以及公司的净资产收益率,计算的公司的每股的净资产,需要多少年才到当前的股价。大家当然明白,这个回本年限越长,越是不利。
六、在价值线附近买入,8年才回本,那不是没赚钱?
&&&&在价值线附近买的,大概是8年后公司按当前净资产收益率计算的每股净资产,换句话说,你早了8年按8年后的每股净资产价值买到了公司股票。
&&&&但赚不赚到钱,那要看8年后公司的净资产收益率和当时的市场平均回本周期,换句话说,就要看市净率(PB)的倍数。如果到时市场给2倍的PB,你就赚一倍,如果给一倍的PB,你保本。你不要以为市净率是市场随便给的,它的计算公司就是:
&&&&&&&所以,届时公司如果能有20%的净资产收益率,而利率跟当前一样,那么市场按8年的回本周期可以有4.3倍的市净率,即你可以赚到3.3倍。
七、同行业的市盈率与市净率应该超同吗?
&&很多分析师写文章分析公司时,一般会参考同行业上市公司的股票估值,即市盈率多少多少倍,所以应该线分析的公司也多少多少倍。而实际上,上市公司的市盈率与市净率差距很大,如:
&&&&&&&这是化学制药行业的市盈率与市净率,大家觉得会趋同吗?
&&&&&&&实际上,根据上面第六点中关于市盈率与市净率的推导公式,真正决定市盈率与市净率的,其实就是企业的净资产收益率(ROE)和市场利率决定的回本周期。
八、运用价值线公式计算合理股价时的注意事项
&不少喜欢钻研的股友,总是会动手,用价值线算一下自己手头的股票到底估值多少合理?不轻易相信爱股说个股空间页上的计算结果,所以经常会在微信或雪球上问我有关计算公司的细节的事情,这个习惯很好。我在这里收集了归纳一下有关的内容:
1、运用价值线公式计算的时候,可以用EXCEL的POWER函数帮你运算,计算回本年限可以用ln函数,这样很方便就可以获得结果;
2、在取计算净资产收益率(ROE)的时候,一定要取年化数据,不要取半年或九个月的数据,没有满一个年度,是不准确的;或者你可以取上一年度年报的净资产收益率的数据;
3、对于计算时有关净利润的取数,不要取企业年化的净利润、年化归属上市公司股东的净利润,一定要取年化归属于上市公司股东的扣除非经常性损益的净利润来计算;否则,估值就会不准确。它们之间的关系如下:
& &年化归属于上市公司股东的净利润=年化净利润-年化少数股东损益
&年化归属于上市公司股东的扣除非经常性损益的净利润=年化归属于上市公司股东的净利润-年化的非经常性损益
&因为我们只给上市公司做生意得来的净利润去估值,那此炒股所得、卖资产收益、政府补贴,这次有,下次就没有下次了,我是不会给出几倍估值去买的。
4、 回本周期要适时根据央行对于基准利率的调整适时作出改变。
九、价值线还有什么作用?
&&&&&当有了价值线参考后,我们很容易判断,哪些是价值股,哪些是投机股,这样,就可以适合于不同的人群。价值线20%以上一般是投机股,价值线以下,一般是价值股。有些人喜欢高抛低吸,投机炒作,那就适合做投机股;有些人长期持股不动,那就适合做价值股。所以,一旦有了价值线以后,我们很容易掌握自己的风格,把长处发挥到极致。
&&&&我在一般情况下,股价低于价值线基本可视为价值股,如果有20%以上的空间,那对价值投资者来说,是难得的机会;而那些股价高于价值线20%或者更高的,当然可视为投机股,上下波动很大,不时伴有涨停跌停,是一些短线人士的心头所好。
&&所以,价值线的应用因人而异,最主要取决于使用者的风格。
数据来源爱股说(igushuo.com),财报数据可视化的网站.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 炒股如何开户 的文章

 

随机推荐