钻石的营销案例
钻石被誉为二十世纪最精彩的营销骗局,它提供了现代营销史上教科书般的经典案例:商品服务消费者只是一种低端的理念,商品教育消费者才是最高的成就。
一、钻石营销的奥秘
钻石在被发现以后很长一段时间只是皇家和贵族炫耀财富的饰品,产地固定而且产量稀缺。十九世纪后期发生改变,因为南非居然神奇地发现了一座钻石矿,产量有几千万克拉。
这一下不得了,那些投资钻石的商人彻底懵逼。如果这些钻石进入市场,钻石的价值将大打折扣,于是,一个叫罗兹的英国商人在1988年创建了大名鼎鼎的戴比尔斯公司,从此钻石营销拉开了它的世纪大幕。
戴比尔斯一咬牙买下了整个钻石矿,之后小心翼翼地控制钻石出量,垄断了整个钻石的供货市场。最高时候戴比尔斯掌控着市场上90%的交易量。
如果买了钻石的人要出售掉,钻石的价格体系也会崩溃,所以要想稳定价格除了让别人买,还得不让他卖钻石。这怎么可能呢?可是神通广大的戴比尔斯就是做到了,这个超级难题的解决方案催生了这个世界最不要脸的组合,那就是把爱情同钻石紧紧结合在一起。
因为钻石=美好+永恒,而爱情=美好+永恒,所以,钻石=爱情。
1938年以后,戴比尔斯的实际控制者奥本海默家族花费了巨额的广告费用开始打造所谓的钻石文化。宣称坚硬的钻石象征的正是忠贞不渝的爱情,而只有钻石才是各地都接受的订婚礼物。通过各种手段铺天盖地的广告,强化钻石和美好爱情的联系。婚纱照上新娘身着美丽的婚纱,一脸幸福的微笑,手上的钻戒闪瞎大家的眼。
1950年,戴比尔斯更提出了丧心病狂的广告语,“A DIAMOND IS FOREVER”,钻石恒久远,一颗永流传。通过这个营销,戴尔比斯一石三鸟。
1.男人都认为只有更大更美的钻石才能表达最强烈的爱意,恋爱中的男人为了女人什么事都做的出来,买钻石比送命门槛低得多
2.女人都认为钻石是求爱的必需,你连钻石都不舍得买,你还好意思说你爱我,什么,你以为我看中的是钻石,我看中的是你舍不舍得!
3.钻石都代表着永恒的爱情,拿来出售简直是对神圣爱情的最大亵渎。除非你跟前夫不共戴天,否则很少会卖掉他给你的钻戒,而且就算卖,也不会有人接手,因为那是你的爱情,那不是我的~
正是因为如此,尽管钻石不断开采至今已经有五亿克拉,但在整体上还是供不应求,价格扶摇直上,因为只有戴比尔斯才可以卖钻石。你以为戴比尔斯的营销到这就算完成了吗,那这未免太小看它,戴比尔斯还可以根据市场形势改变营销,再通过营销反控市场。
上世纪八十年代,前苏联发现一座更大的钻石矿,大量碎钻供应于世面。戴比尔斯吓得尿了裤子,马上同苏联订立价格同盟。另一方面,为了不让钻石掉身价,营销广告顺势转向,强调碎钻一样高贵,钻石虽小依然代表高贵的爱情。钻石的珍贵不是看大小,而是看做工和切面,于是又炮制了大量行业的标准,如今你去柜台上听服务员向你扔出什么净度4C等专业术语,跟睁眼说瞎话的售楼小姐没什么两样。随后,钻石也彻底征服了底层阶级,大的好的卖给富人,碎的小的卖给穷人。
你以为营销到这个高度就可以了吧,远!没!有!戴比尔斯已经把女人的心理研究到登峰造极的地步,比如他们研究显示,对于钻石这种奢侈的商品女人的心理是矛盾的。
一方面,她们对首饰有着天然的占有欲,一方面又认为主动索取会带来良心的负罪感。所以戴比尔斯的广告在八十年代又开始强调钻戒应该跟惊喜结合。一个男人默默买了钻戒,在一个精心安排的场合突然送出,这才能最大程度上化解女性的矛盾心理,一方面她们拥有钻戒带来的极度喜悦,一方面又保持了女人的纯真。
把女人研究成这样,实在是不服不行。连拥有戴比尔斯百分之四十股权的奥本海默家族都不禁感叹:“感谢上帝,创造了钻石,同时也创造了女人。”
多少年来,钻石已经逐渐绑架了消费它的人们。你以为女人看重的仅仅是钻石本身吗,错了,她们更看重的是你宁愿花掉三个月的工资差点年纪轻轻就过劳死而为她换来的一件爱情的象征。
如果你拿着本文去向你未婚的女友义正言辞地指出,买钻戒是一件傻逼的事情,那么这种行为才是真的傻逼,因为你的女友只需要看着你的眼睛说一句话就让你哑口无言,“是的,这很傻,可是你就不能为我傻一次吗?”
把所有营销学的书籍看完都不如完全理解戴比尔斯钻石营销的案例带来的收获大。消费者是需要培养的吗,完全不是,消费者是需要教育的。
当把一种商品提升到文化乃至习俗的高度,你拥有的就是宗教般狂热和虔诚的信徒。然而我们不知道的是,钻石除了表面的光鲜美好忠贞不渝,还有阴暗血腥的另一面。
二、钻石的血泪史
钻石给戴比尔斯带来了无尽的利益,却也给广袤的非洲大地带来了深重的苦难。这倒并非戴比尔斯公司的错,而是军阀因为争夺钻石的开采和控制权开启了惨绝人寰的内战。莱昂纳多主演的05年的电影《血钻》就处于这样的背景下。
因为钻石发生内战的国家典型当属安哥拉和塞拉利昂。直到现在我仍清楚地记得高三时候看到关于塞拉利昂内战文章的午后,那种头皮发麻的惊悚和不适。
塞拉利昂盛产钻石,因为钻石背后的暴利,叛军首领福迪·桑科联合利比里亚军事强人查尔斯·泰勒建立革命联合阵线。桑科利用军队压迫人民攫取钻石,又靠出售钻石获得的资金购买军火供养军队。
为了打赢惨烈的内战,桑科组建了骇人听闻的娃娃军。将七八岁的孩子集合,让他们亲自肢解敌人,挖出他们的心脏,培养嗜血的狼性;对内亲手杀害自己的亲人泯灭天生的人性,更惊悚地是向孩子的太阳穴注射可卡因等毒品进行精神控制。娃娃军中甚至有女童,白天持刀杀人,晚上沦为性奴。十三岁的塞拉利昂少年伊斯梅尔·比亚不幸加入娃娃军,沦为杀人机器,后来被解救后提笔写下了《长路漫漫》一书,记下了这一人类历史上惨绝人寰的战争。
塞拉利昂的内战从1991年开始,持续了整整十一年,造成了5万人死亡全国三分之一的人口流离失所。其出产的钻石成为了无数恩爱的情侣手指的订婚信物,却也沾满了非洲人民的鲜血。
吊诡的是,戴比尔斯也跳出来呼吁和平,在2001年签订《金伯利进程协议》,呼吁世界不要购买战乱国的钻石,买钻石只会让钻石的争夺更加惨烈。几个卖钻石的商人摇身一变居然操心起了世界和平,其背后的逻辑不言而喻,因为他们可以掌控消费者,却掌控不了军阀。倘若军阀大量出售钻石,也会让钻石市场失控,所以,封闭他们的出售渠道,钻石还是牢牢掌控在戴比尔斯的手里。
是的,这个世界就是这么荒诞。
钻石的唯一元素就是碳,是这个世界上最不缺的元素。人造金刚石与钻石也别无二致,如果想靠钻石保值无疑很难。二手的钻石没有任何市场,只能以低廉的价格回售给商家,可是这仍然阻挡不了被绑架的人类对它疯狂的追捧。
2011年访华的南非副总统莫特兰蒂面对央视采访时说了这么一段话:“钻石只是人们虚荣心的产物,它只是碳而已,价格上涨并不是钻石会枯竭,而是人为造成的供不应求的局面。”
但我似乎能想象,当一个男人把关于钻石的种种都告诉自己的妻子时,他最可能遇到的情景就是妻子幽幽地说:“所以呢,你觉得给我看了这个,钻石就不用买了,是吧?”
而男人一定会立刻摇头,斩钉截铁地说:“哪能啊,买,当然要买,咱还得买个大的,我这就是跟你说说。”
你看,这个世界,就是这么荒谬。
【个人意见】 : 还不如把钱给女友或老婆用呢。 收起阅读 »
python @classmethod 的使用场合
classmethod(function)
中文说明:
classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
看后之后真是一头雾水。说的啥子东西呢???
自己到国外的论坛看其他的例子和解释,顿时就很明朗。 下面自己用例子来说明。
看下面的定义的一个时间类:
class Data_test(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year
def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day
t=Data_test(2016,8,1)
t.out_date()
输出:
year :
2016
month :
8
day :
1
符合期望。
如果用户输入的是 "2016-8-1" 这样的字符格式,那么就需要调用Date_test 类前做一下处理:
string_date='2016-8-1'
year,month,day=map(int,string_date.split('-'))
s=Data_test(year,month,day)
先把‘2016-8-1’ 分解成 year,month,day 三个变量,然后转成int,再调用Date_test(year,month,day)函数。 也很符合期望。
那我可不可以把这个字符串处理的函数放到 Date_test 类当中呢?
那么@classmethod 就开始出场了
class Data_test2(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year
@classmethod
def get_date(cls,
string_date):
#这里第一个参数是cls, 表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day)
#返回的是一个初始化后的类
return date1
def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day
在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。
那么如何调用呢?
r=Data_test2.get_date("2016-8-6")输出:
r.out_date()
year :
2016
month :
8
day :
1
这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。
这样的好处就是你以后重构类的时候不必要修改构造函数,只需要额外添加你要处理的函数,然后使用装饰符 @classmethod 就可以了。
本文原创
转载请注明出处:http://30daydo.com/article/89
收起阅读 »
自学能力强大的人在任何领域都会无比强大!
有部叫做《Hero》的美剧是讲正反两派都是一群有超能力的人,彼此为了某个巨大的阴谋互相撕逼。作为两边的头头,他们自己既不会飞,也不会手上冒火,更不会心灵控制等。但他们却有一种当他们盯着一个超能力者使用自己的力量时,马上能把这个能力复制到自己身上的能力,比如他看到一个人在徒手煎鸡蛋,过了一分钟之后他就说卧槽我也会了......他们只要看到了有人使用超能力,就能马上掌握在手,最后变得无所不能。
这种能力,就叫学习能力。一个会学习的人,在任何领域都能变得强大。
一个人最重要的能力,不是学历多牛逼,不是实习经历多光彩,而是拥有一种强大的学习能力。但很可惜,我们有部分人毕业之后就丧失了如何继续学习的“学习能力”。
那么到底怎样才叫会学习呢?
1.通过观察找到事物的共性
小学课本上有加减乘除的四则运算法则。例如:2*3 -(5-2)- 2=?。如果你去翻答案,可能只有一个孤零零的数字1摆在上面,并没有解题过程。这个时候你可以尝试着用答案来反推解题过程:
2*3 -(5-2)- 2=1,这个等式去掉括号如何才能成立?在试过了几种方向之后,最后会发现只有:2*3-5+2-2=1,这个等式才成立。
进而你会发现,当括号前面是 + 号的时候,去掉括号,括号里面的运算符号不变;
当括号前面是-号的时候,去掉括号,括号里面的运算符号要变成相反。
当你拿着这个结论去验算其他类似的题目,发现全部符合这个规律。这是一个最简单的“演绎归纳”的推理过程,而它背后的逻辑是,通过找到个别事物的特性从而反推找到整体的共性。
在日常的工作生活中,这种方法其实屡见不鲜。
谈恋爱的时候,男生为了讨好女生会在追求的过程中说各种甜言蜜语,可是等到追到手以后就变得不那么上心。这是通过几个个别事例总结出来的事实,然后情感热线专家们据此就会得出一个共性规律:
得不到时才是最好的,得到了就不会懂得珍惜。
在给领导做工作汇报的时候,通常时间都不会超过半个小时,因为领导总是有下一场会议要赶。这是你在做了几次汇报之后发现的一个事实,然后职场热线专家据此就会告诉你一个共性规律:
领导的时间都是有限的,所以汇报工作要精简抓住要点。
这个世界上所有的事情背后都有一套简单的运转规律。会学习的人,首先会通过观察找到事物背后的本质,继而发现共性,最终推论到全局。无论是科学研究,还是世故人情,无论是商业经济,还是生物进化,支撑着这些领域不断向前发展的可能是简单的几条规律,或者说,真理。
牛顿三大定律,摩尔定律,广义相对论,波士顿矩阵,达尔文进化论......这些实际上都是一个东西,规则。聪明人从大量事实中发现共性,总结规则;普通人顺应和利用这些规则,仅此而已。
2.活学活用,举一反百
你身边一定有那种各门考试都很好,但是一遇到没见过的问题就不知道该怎么解的“学霸”,这种叫“死学”。
会学习的人,讲究“活学”。“活学”最大的特征就是,善于跨界地去学习不同领域的知识,并善于各种灵活多变的知识组合,对各种事情进行高效的处理。你在A领域学习到的规则,发现在B领域也基本适用,再修改或者变通下也能在C领域、D领域部分适用。
能量守恒定律最初是物理学规则,但是同样适用于商业领域,于是有了“零和博弈”。
“物竞天择,适者生存”最初是生物进化学的理论,但是推演到任何一个高度竞争的领域都同样适用。在工作中,能力强的人会一路高升,能力差的人一定会被淘汰;在商业竞争中,质量好的商品会收到追捧,质量差的商品会被下架。
“市场供求曲线”最初是经济学的一条规则,但是你在谈恋爱的时候同样适用。
“活学”之人,必会“活用”,再复杂的问题到了他手里都会变的清晰和简单。碰到一个新问题,进行逻辑分析,找出相似性和共性。他们就进入到一个熟悉的领域,问题马上迎刃而解。
3.多领域发展
不管关于这一点是否有争议,但这个世界上“通才”似乎比“专才”往往更能适应竞争。只说一点,“通才”和“专才”最大的区别在于面对急剧变化的形势时的应变能力。
凯文凯利在《失控》说过:
要成长为新物种,你就要经历所有你不会去扮演的角色。
当一个环境开始急剧变化的时候,一定是内部和外部同时发生了改变。如果只是单一内部发生改变,以往过去的规则和经验或许足以应对和解决问题,但是一旦这个冲击变化来自于外部陌生的领域,经验主义就再也不适用了。最好的例子就是近几年来几乎中国所有的实体经济都开始朝着互联网+的方向发展。你会发现,线下超市被电商大规模冲击、逐步有自我学习能力的机器人开始工业和民用领域、工业4.0让制造业变得更加无缝对接、互联网反欺诈让隐形的欺诈者越来越难生存,移动支付让我们省去大量去银行门店处理事务的时间.......这些在过去让人们匪夷所思的事情,背后都蕴含着新的规则和逻辑。
点评:
不论你已经是一位很有名的专家或者专才了,我们都应该保持永久学习的好奇心态,因为世界变化太快。
来自知乎专栏 收起阅读 »
社保停交后,医保处于被冻结状态,不能使用。
社保停交后,医保处于被冻结状态,不能使用。
医疗保险指通过国家立法,按照强制性社会保险原则基本医疗保险费应由用人单位和职工个人按时足额缴纳。不按时足额缴纳的,不计个人帐户,基本医疗保险统筹基金不予支付其医疗费用。
医疗保险是为补偿疾病所带来的医疗费用的一种保险。职工因疾病、负伤、生育时,由社会或企业提供必要的医疗服务或物质帮助的社会保险。如中国的公费医疗、劳保医疗。
中国职工的医疗费用由国家、单位和个人共同负担,以减轻企业负担,避免浪费。发生保险责任事故需要进行治疗是按比例付保险金。
医疗保险在退休时必须积累一定的缴费年限(含视同缴费年限),一般规定为20年-30年,并且实际缴费年限必须达到5年(或10年),才可以在退休以后免费终身享受医疗保险保障待遇。如果在退休时的累计缴费年限不足规定要求,可以按当时的费率标准补交所差的医疗保险缴费年限。
职工医疗保险补缴:
一、医保机构征缴部门根据医疗保险欠费情况,建立欠费数据信息,填制《社会保险费补缴通知单》,通知参保单位补缴欠费。
二、对因筹资困难,无法一次足额缴清欠费的参保单位,医保机构征缴部门与其签订社会保险补缴协议。如欠费单位发生被兼并、分立、破产等情况时,按下列方法签订补缴协议。
1、欠费单位被兼并的,与兼并方签订补缴协议。
2、欠费单位分立的,与各分立方签订补缴协议。
3、欠费单位进入破产程序的,与清算组签订清偿协议。
4、单位被拍卖出售或租赁的,与主管部门签订补缴协议。
三、参保单位根据《社会保险费补缴通知单》或补缴协议办理补缴,医保机构征缴部门予以受理,并通知医保机构财务管理部门收款。
四、破产单位无法完全清偿的欠费,医保机构征缴部门受理单位破产清算组提出的申请,审核后送稽核监督部门处理。
五、医保机构征缴部门依据财务管理部门传来的职工医疗保险补缴欠费到账信息和稽核监督部门传来的核销信息,调整参保单位欠费信息。
也就是说,你工作了20年,但是突然想放松一下,间隔年一下,去个游山玩水,社保中断了交。 这个时候你的社保卡是冻结状态,这个时候你的社保卡不能到医院看病。 除非你去游山玩水期间,自己去交社保的钱,不中断。
这种政策真扯淡。 所以说,国家的这些政策,完全弊大于利。 医保上的钱,如果我自己全部自己拿着,去理财,福利收益20年怎么也可以翻一翻吧,一年年收益只需要几个点就够了。(1+1*x)**20=2, (其中x为年收益率,**20 是20次方,复利计算公司), 可以算出 x=3.5%, 指数运算差点忘记了擦。
而且我爱什么时候用就什么时候用, 不要考虑中断不中断。 反正呢,ZF想要把你的口袋的钱放到他们那里,所以这笔钱,你不能动,其实我心里已经把当做这笔钱花了出去,看病能拿回一点算一点, 心里一种强烈被剥削的感觉。
收起阅读 »
日内操作 7月29日 特停政策下游资休养生息
何况其他?
为何自己目前还满仓运行?
错误
日内操作 7月28日 价投的天下 中小创的地狱
板块相应出来了,可惜自己一直持有的中小创。
git冲突 解决
在提交单个文件的时候出现这个错误.
意思是不能部分提交代码.
原因是git认为你有部分代码没有做好提交的准备,比如没有添加
解决方法是
1. 提交全部
git commit -a
2. 如果不想提交全部,那么可以通过添加 -i 选项
git commit file/to/path -i -m "merge"
上述情况一般出现在解决本地working copy冲突时出现, 本地文件修改(手工merge)完成后,要添加并提交,使得本地版本处于clean的状态.
这样以后git pull就不再会报错.
冲突处理
当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。
比如当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:[复制代码]
<<<<<<< HEAD test in master ======= test in dev >>>>>>> dev
[复制代码]
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的dev是该分支的名字。
对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。 收起阅读 »
每天输出一篇高质量文章 ---始于2016年7月28日
平时太多的输入,但是输出很少。 这好比学校里学了很多东西,但是不做作业,不考试,这样永远无法知道学生的水平。
即使质量不高,我也要坚持。 百篇里能出一篇也不错。
所能承受的困惑
但是行动力不足以改变任何东西,日复一日,年复一年。所以,平庸的人就是这么诞生的了。
百人里面才会有甚少的一两个人,有突破的意志,能以跃出浅潭浊水,潜龙出海。
tushare 源码分析 之 fundamental.py
下面来具体看看里面的一些具体的函数是怎么实现的。
fundamental.py 这个文件是获取企业的基本面信息的。
比如 在主程序 main中,
import tushare as ts那么我们来看看get_stock_basics函数的实现。
df=ts.get_stock_basics()
def get_stock_basics():
"""
获取沪深上市公司基本情况
Return
--------
DataFrame
code,代码
name,名称
industry,细分行业
area,地区
pe,市盈率
outstanding,流通股本
totals,总股本(万)
totalAssets,总资产(万)
liquidAssets,流动资产
fixedAssets,固定资产
reserved,公积金
reservedPerShare,每股公积金
eps,每股收益
bvps,每股净资
pb,市净率
timeToMarket,上市日期
"""
request = Request(ct.ALL_STOCK_BASICS_FILE)
text = urlopen(request, timeout=10).read()
text = text.decode('GBK')
text = text.replace('--', '')
df = pd.read_csv(StringIO(text), dtype={'code':'object'})
df = df.set_index('code')
return df
上面通过urlib2的Request函数获取url的信息,然后保存为df格式然后返回。
url路径在这个变量里面:
ct.ALL_STOCK_BASICS_FILE
跳转到这个变量
ALL_STOCK_BASICS_FILE = '%s%s/static/all.csv'%(P_TYPE['http'], DOMAINS['oss'])
P_TYPE 和DOMAINS 是字典变量, 在同一个文件内可以找到他们的值:
P_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
DOMAINS = {'sina': 'sina.com.cn', 'sinahq': 'sinajs.cn',
'ifeng': 'ifeng.com', 'sf': 'finance.sina.com.cn',
'vsf': 'vip.stock.finance.sina.com.cn',
'idx': 'www.csindex.com.cn', '163': 'money.163.com',
'em': 'eastmoney.com', 'sseq': 'query.sse.com.cn',
'sse': 'www.sse.com.cn', 'szse': 'www.szse.cn',
'oss': '218.244.146.57', 'idxip':'115.29.204.48',
'shibor': 'www.shibor.org', 'mbox':'www.cbooo.cn'}
然后把上面的字典值抽取出来:
那么url就是 http://218.244.146.57/static/all.csv , 你可以试试在浏览器里直接输入。 看到了吗?
可以直接下载一个all.csv格式的文件,打开后可以看到里面很多企业基本面的信息。
获取业绩报表
def get_report_data(year, quarter):
"""
获取业绩报表数据
Parameters
--------
year:int 年度 e.g:2014
quarter:int 季度 :1、2、3、4,只能输入这4个季度
说明:由于是从网站获取的数据,需要一页页抓取,速度取决于您当前网络速度
Return
--------
DataFrame
code,代码
name,名称
eps,每股收益
eps_yoy,每股收益同比(%)
bvps,每股净资产
roe,净资产收益率(%)
epcf,每股现金流量(元)
net_profits,净利润(万元)
profits_yoy,净利润同比(%)
distrib,分配方案
report_date,发布日期
"""
函数主要通过 request = Request(url) 在财经网站获取信息。
request = Request(ct.REPORT_URL%(ct.P_TYPE['http'], ct.DOMAINS['vsf'], ct.PAGES['fd'],year, quarter, pageNo, ct.PAGE_NUM[1]))
text = urlopen(request, timeout=10).read()
Request里面的参数是一个可变量,通过循环的列表来获取所有的公司业绩报表。
通过定位参数里的变量,可以得到随意一个url, 比如 REPORT_URL = '%s%s/q/go.php/vFinanceAnalyze/kind/mainindex/%s?s_i=&s_a=&s_c=&reportdate=%s&quarter=%s&p=%s&num=%s'
那么url =http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/mainindex/index.phtml?s_i=&s_a=&s_c=&reportdate=2014&quarter=1&p=1&num=38
那么直接在浏览器输入看看 是什么数据
看到了2014年第一节度的每个公司的业绩(因为有些是新股,所以2014的数据显示不全)
注意
df=ts.get_report_data(2016,4)
#第四季度就是年报
根据作者的意思,这个参数写4就是年报。 (可以自己根据网址内容去到新浪财经去验证)
新版tushare注册码
https://tushare.pro/register?reg=217168
注册后送积分,只有足够的积分才能够调用一些高权限的接口
待续。 收起阅读 »
30天学会量化交易模型 Day05
这一节 我们学习如何把得到的数据写入数据库。
虽然也可以写入excel或者json,不过考虑到后面用的的排序和其他python脚本的调用,最后选择了轻量级的数据库SQLiite作为首选。
# -*-coding=utf-8-*-
#数据库的操作
'''
http://30daydo.com
weigesysu@qq.com
'''
import sqlite3, time, datetime
__author__ = 'rocky'
class SqliteDb():
def __init__(self,dbtable):
'''
self.today = time.strftime("%Y-%m-%d")
self.DBname = self.today + '.db'
self.conn = sqlite3.connect(self.DBname)
'''
today = time.strftime("%Y-%m-%d")
DBname = today + '.db'
self.conn = sqlite3.connect(DBname)
self.dbtable=dbtable
create_tb = "CREATE TABLE %s (date varchar(10),id varchar(6), name varchar(30), p_change REAL,turnover REAL);" %self.dbtable
self.conn.execute(create_tb)
self.conn.commit()
def store_break_high(self,price_high_data):
#data 是创新高的个股信息 dataframe
#print today
#create_tb = 'CREATE TABLE STOCK (date TEXT,id text PRIMARY KEY, p_change REAL,turnover REAL);'
#conn.commit()
#print "(%s,%s,%f,%f)" %(price_high_data[0], price_high_data[1], price_high_data[2], price_high_data[3])
insert_data_cmd = "INSERT INTO %s(date,id,name,p_change,turnover) VALUES(\"%s\",\"%s\",\"%s\",%f,%f);" %(self.dbtable,price_high_data[0], price_high_data[1], price_high_data[2], price_high_data[3],price_high_data[4])
self.conn.execute(insert_data_cmd)
#self.conn.execute('INSERT INTO STOCK(date,id,name,p_change,turnover) VALUES(?,?,?,?,?)',(price_high_data[0], price_high_data[1], price_high_data[2], price_high_data[3],price_high_data[4]))
self.conn.commit()
def close(self):
self.conn.close()
上面创建的表名是 以日期为命名的(前面的下划线是因为数据库的命名规则不能以数字为首)
上一篇:30天学会量化交易模型 Day04 (tushare获取破新高的股票)
http://www.30daydo.com/article/70 收起阅读 »
使用pandas的dataframe数据进行操作的总结
#使用iloc后,t已经变成了一个子集。 已经不再是一个dataframe数据。 所以你使用 t['high'] 返回的是一个值。此时t已经没有index了,如果这个时候调用 t.index
t=df[:1]
class 'pandas.core.frame.DataFrame'>
#这是返回的是一个DataFrame的一个子集。 此时 你可以继续用dateFrame的一些方法进行操作。
删除dataframe中某一行
df.drop()
df的内容如下:
df.drop(df[df[u'代码']==300141.0].index,inplace=True)
print df
输出如下
记得参数inplace=True, 因为默认的值为inplace=False,意思就是你不添加的话就使用Falase这个值。
这样子原来的df不会被修改, 只是会返回新的修改过的df。 这样的话需要用一个新变量来承接它
new_df=df.drop(df[df[u'代码']==300141.0].index)
判断DataFrame为None
if df is None:
print "None len==0"
return False
收起阅读 »
30天学会量化交易模型 Day04
股市有句话,新高后有新高。
因为新高后说明消化了前面的套牢盘。 所以这个时候的阻力很小。
下面使用一个例子来用代码获取当天创新高的股票。
使用的是tushare
#-*-coding=utf-8-*-
__author__ = 'rocky'
'''
http://30daydo.com
weigesysu@qq.com
'''
#获取破指定天数内的新高 比如破60日新高
import tushare as ts
import datetime
info=ts.get_stock_basics()
def loop_all_stocks():
for EachStockID in info.index:
if is_break_high(EachStockID,60):
print "High price on",
print EachStockID,
print info.ix[EachStockID]['name'].decode('utf-8')
def is_break_high(stockID,days):
end_day=datetime.date(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day)
days=days*7/5
#考虑到周六日非交易
start_day=end_day-datetime.timedelta(days)
start_day=start_day.strftime("%Y-%m-%d")
end_day=end_day.strftime("%Y-%m-%d")
df=ts.get_h_data(stockID,start=start_day,end=end_day)
period_high=df['high'].max()
#print period_high
today_high=df.iloc[0]['high']
#这里不能直接用 .values
#如果用的df【:1】 就需要用.values
#print today_high
if today_high>=period_high:
return True
else:
return False
loop_all_stocks()
可以修改 函数 is_break_high(EachStockID,60) 中的60 为破多少天内的新高。
上一篇:30天学会量化交易模型 Day03
http://www.30daydo.com/article/15
下一篇: 30天学会量化交易模型 Day05 (tushare数据写入SQLite)
http://www.30daydo.com/article/73 收起阅读 »
安卓系统常用命令 adb shell
1. 安卓关机(非重启): adb shell svc power shutdown
2. android开机的时候跳过初始化设置 (setup wizard): adb shell input text 1396611460
3.
雪人股份 继续跟踪 7月12日
所以后期还是可以再介入一波。
雪人股份 后续分析 6月30日 收起阅读 »
python 爬虫下载的图片打不开?
代码如下片段
__author__ = 'rocky'运行后生成的文件打开后不显示图片。
import urllib,urllib2,StringIO,gzip
url="http://image.xitek.com/photo/2 ... ot%3B
filname=url.split("/")[-1]
req=urllib2.Request(url)
resp=urllib2.urlopen(req)
content=resp.read()
#data = StringIO.StringIO(content)
#gzipper = gzip.GzipFile(fileobj=data)
#html = gzipper.read()
f=open(filname,'w')
f.write()
f.close()
后来调试后发现,如果要保存为图片格式, 文件的读写需要用'wb', 也就是上面代码中
f=open(filname,'w') 改一下 改成
f=open(filname,'wb')
就可以了。
收起阅读 »
定向增发与非公开发行
定向增发与非公开发行目前已经是一个概念了。
定向增发是指上市公司向符合条件的少数特定投资者非公开发行股份的行为,规定要求发行对象不得超过10人,发行价不得低于公告前20个交易市价的90%,发行股份12个月内(认购后变成控股股东或拥有实际控制权的36个月内) 不得转让。
2006年证监会推出的《再融资管理办法》中,关于非公开发行,除了规定发行对象不得超过10人,发行价不得低于市价的90%,发行股份12个月内(大股东认购的为36个月)不得转让,以及募资用途需符合国家产业政策、上市公司及其高管不得有违规行为等外,没有其他条件。
感觉不公开的东西才是好东东~
非定向增发的估计都是没人要的。。 收起阅读 »