python的简单程序代码_简单python代码
菜鸟独⽩
Python语⾔⾮常优美,语法简洁⽽功能强⼤,容易上⼿,学好Python能⼲很多事情:⽐如爬⾍,数据分析呀,机器学习啊,web开发,其实Python还能帮你赚钱,⽐如⾃⼰做⼀个量化分析的⼩⼯具,去年我就⽤这个⼯具赚了⼀笔。
我个⼈炒股买基⾦很多年了,算是⼀个资深的⽼股民,炒了这么多年,也没有怎么赚钱,直到我去年⾃⼰写了⼀个量化的⼩⼯具,量化投资其实⾮常有名,很早就在华尔街运⽤了,越是在不成熟的市场,越容易赚钱!下⾯我来举⼀个⼩例⼦,来看看⽤数据量化分析⼀个基⾦的投资:
⼀.基⾦爬取和清洗
1.数据的爬取
⽹上有很多⽹站都有基⾦的数据,这⾥我爬取了某财经⽹站的⼀只基⾦!⼤家都知道去年⽩酒涨的⾮常猛,于是我挑⼀只我⽐较喜欢的⽩酒的基⾦来分析⼀下
python基础代码实例⼀共是245个交易⽇的数据(2017/03/16-2017/03/14),有4个重要的维度:基⾦净值,涨幅,基⾦净值涨跌,累计净值。
2.数据的清洗
数据爬取之后做基本的处理:
查看有⽆异常值,有⽆缺省值:增加⼀个对上涨和下跌的标识符,⽤1表⽰上涨,⽤-1表⽰下跌,0表⽰平我们的交易⼀定是在周⼀到周五,所以增加⼀个维度为星期⼏处理完的数据如下:
⼆.数据进⾏量化分析
量化分析是⼀门科学,⾥⾯有很多知识要学,除了⽤到Python的数据处理,还有统计学和⾦融的相关知识,涉及到很多交易模型的设计,对股票分析⾥⾯有⽐如海龟交易法, Fama-French 的三因⼦模型等等,⽐较复杂这⾥,我从基⾦⼊⼿做⼀个粗浅的分析:
1.统计周⼀到周五跌的概率
这只基⾦⼀年的涨幅⼤概了近40%,还是相当不错的,买基⾦最简单的招数就是基⾦定投,但是周⼀到周五到底哪⼀天最划算呢?
我们统计了近⼀年的交易数据,发现周五下跌的概率⽐较⼤,也就是说周五定投⽐较合适,因为买基⾦肯定是跌的时候买⽐较划算.
2.把⼀年的数据按⽉进⾏切⽚分析
我们把⼀年的数据按照12个⽉进⾏切⽚,然后看它们的累积涨幅:
发现这个基⾦全年12个⽉,只有2个⽉是跌的,其他10个⽉都是在涨,⽽且有5⽉的涨幅都在5%以上,这样的基⾦相当⽜逼!
也就是说全年有83%的⽉概率都在上涨,有近四层的⽉都是涨幅5%以上,要知道很多年化率⼀年的涨幅才5%,这⾥⼀个⽉就能到达,真是⼀只好基⾦啊!
3.定投哪种⽅式性价⽐最⾼
前⾯我们知道了周五是跌的概率最⼤的,那么如果我们下⾯按照三种⽅法去买基⾦,看看哪种⽅式的收益最好,资⾦占⽤最⼩:
每⽇定投买,不管涨跌,每天买(⼟豪啊)每周定投买,不管涨跌,每周买(⼩资啊)双周定投买,不管涨跌,每2周买(⽩领啊)--------------------每⽇:--------------------
本⾦:245000,总额:329048.58,收益:84048.58
总份额:205270.0
收益率:34.31%
--------------------每周⼀:--------------------
本⾦:46000,总额:61608.456112,收益:15608.46
总份额:38385.0
收益率:33.93%
--------------------每双周⼀--------------------
本⾦:23000,总额:30208.8334057,收益:7208.83总份额:19192.0
springboot的核心配置文件收益率:31.34%
--------------------每周⼆--------------------
电脑制版教程免费视频本⾦:48000,总额:63982.9523013,收益:15982.95总份额:40317.0
收益率:33.3%
-
-------------------每双周⼆--------------------
本⾦:24000,总额:31617.4115635,收益:7617.41总份额:19998.0
收益率:31.74%
--------------------每周三--------------------
本⾦:50000,总额:67292.1152093,收益:17292.12总份额:41979.0
收益率:34.58%
--------------------每双周⼆--------------------
本⾦:25000,总额:32934.0338654,收益:7934.03总份额:20831.0
源码时代ceo李广平收益率:31.74%soapglory
--------------------每周四--------------------
本⾦:50000,总额:67156.8739297,收益:17156.87总份额:41816.0
收益率:34.31%
--------------------每双周四--------------------
本⾦:25000,总额:33652.1085203,收益:8652.11总份额:20993.0
收益率:34.61%
--------------------每周五--------------------
本⾦:50000,总额:67621.2869066,收益:17621.29总份额:41897.0
收益率:35.24%
--------------------每双周五--------------------
本⾦:25000,总额:33625.0310915,收益:8625.03
总份额:21095.0
收益率:34.5%
综上上⾯⼏种做法,发现⼟豪买法,收益其实并不是最⾼的,还不如⽩领的每2周买⼀次呢!⽽且⼟豪每⽇投资法的资⾦占⽤是每双周近10倍,资⾦消耗太⼤了。⽽每周投资的⽅法收益是上⾯所有策略⾥⾯最⾼的近35%的年收益!
要知道⼀般的理财产品5个点左右,好⼀点也就8-9%,35%的年化率其实是⾮常⾮常⾼了!量化投资⼩试⽜⼑,就这么厉害,那么有没有办法获得更⾼的收益,⽐如在股票市场进⾏量化呢,当然可以,需要系统的学习量化理论和投资策略模型。
尽管⼀些⼈认为区块链是⼀个等待问题的解决⽅案,但毫⽆疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?
区块链
它是⽐特币或其他加密货币进⾏交易的数字账本,账本按时间顺序记录并对外公开。
在更⼀般的术语中,它是⼀个公共数据库,新数据存储在⼀个名为块的容器中,并被添加到⼀个不可变链(后来的区块链)中添加了过去的数据。在⽐特币和其他加密货币的情况下,这些数据是⼀组交易记录。当然,数据可以是任何类型的。
区块链技术已经催⽣了新的、完全数字化的货币,如⽐特币和莱特币,这些货币并不是由中央政府发
⾏或管理的。因此为那些认为今天的银⾏系统是或终将失败的⼈带来了新的⾃由。区块链所包含的以太坊技术对分布式计算进⾏了变⾰创新,它引⼊了⼀些有趣的概念,⽐如智能合约。
在本⽂中,我将⽤不到50⾏的Python2代码来做⼀个简单的区块链。我称它为SnakeCoin。
⾸先将定义块将是什么样⼦。在区块链中,每个块都存储⼀个时间戳和⼀个索引。在SnakeCoin中,需要把两者都存储起来。为了确保整个区块链的完整性,每个块都有⼀个⾃动识别散列。与⽐特币⼀样,每个块的散列将是块索引、时间戳、数据和前块哈希的加密哈希。数据可以是你想要的任何东西。
importhashlibashasherclassBlock:def__init__(self,index,timestamp,data,previous_hash):self.index = indexself.timestamp = timestampself.data = dataself.previous_hash = previous_hashself.hash = self.hash_block()defhash_block(self):sha = hasher.sha256()sha.update(str(self.index) +str(self.timestamp) +str(self.data)
+str(self.previous_hash))returnsha.hexdigest()
这⼀步后有块结构,但现在是创建区块链,所以需要向实际的链中添加块。如前所述,每个块都需要上⼀个块的信息。但是按照这个说法就有⼀个问题,区块链的第⼀个区块是如何到达那⾥的呢?不得
不说,第⼀个块,或者说是起源块,它是⼀个特殊的块。在很多情况下,它是⼿动添加的,或者有独特的逻辑允许添加。
下⾯将创建⼀个函数简单地返回⼀个起源块以便产⽣第⼀个区块。这个块是索引0,它具有任意的数据值和“前⼀个哈希”参数中的任意值。
importdatetimeasdatedefcreate_genesis_block():# Manually construct a block with# index zero and arbitrary previous hashreturnBlock(0,w(),"Genesis Block","0")
现在已经创建好了起源块,接下来需要⼀个函数,以便在区块链中⽣成后续的块。这个函数将把链中的前⼀个块作为参数,创建要⽣成的块的数据,并使⽤适当的数据返回新块。当新的块哈希信息来⾃前⾯的块时,区块链的完整性会随着每个新块⽽增加。如果不这样做,外部组织就更容易“改变过去”,⽤全新的⽅式取代已有的链条。这⼀系列的散列可以作为加密的证据,有助于确保⼀旦将块添加到区块链,它就不能被替换或删除。
defnext_block(last_block):this_index = last_block.index + 1this_timestamp = w()this_data = "Hey! I'm block " + str(this_index)this_hash = last_block.hashreturnBlock(this_index,this_timestamp,this_data,this_hash)
⼤部分的⼯作已经完成,现在可以创建区块链了。在这次的⽰例中,区块链本⾝是⼀个简单的Python列表。列表的第⼀个元素是起源块。当然,还需要添加后续的块,因为SnakeCoin是最⼩的区块链,这⾥只添加20个新的块。可以⽤for循环来⽣成新块。delete和truncate区别
# Create the blockchain and add the genesis blockblockchain = [create_genesis_block()]previous_block = blockchain[0]# How many blocks should we add to the chain# after the genesis blocknum_of_blocks_to_add = 20# Add blocks to the chainforiinrange(0,num_of_blocks_to_add):block_to_add =
next_block(previous_block)blockchain.append(block_to_add)previous_block = block_to_add# Tell everyone about
it!print"Block #{} has been added to the blockchain!".format(block_to_add.index)print"Hash: {}\n".format(block_to_add.hash)
下⾯来测试⼀下⽬前产⽣的区块链。
看到了吧,这就是区块链。如果希望在控制台中查看更多信息,可以编辑完整的源⽂件并打印每个块的时间戳或数据。
这就是SnakeCoin要提供的所有东西。为了使SnakeCoin规模达到今天⽣产区块链的规模,必须添加更多的功能,⽐如服务器层,以跟踪多台机器上的链变化,以及在给定的时间段内限制添加的块数量的⼯作算法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论