如何用你的Python程式碼賺取你的第一桶金
Python語言非常優美,語法簡潔而功能強大,容易上手,學好Python能幹很多事情:比如爬蟲,資料分析呀,機器學習啊,web開發,其實Python還能幫你賺錢,比如自己做一個量化分析的小工具,去年我就用這個工具賺了一筆。
我個人炒股買基金很多年了,算是一個資深的老股民,炒了這麼多年,也沒有怎麼賺錢,直到我去年自己寫了一個量化的小工具,量化投資其實非常有名,很早就在華爾街運用了,越是在不成熟的市場,越容易賺錢!下面我來舉一個小例子,來看看用資料量化分析一個基金的投資:
一.基金爬取和清洗
1.資料的爬取
網上有很多網站都有基金的資料,這裡我爬取了某財經網站的一隻基金!大家都知道去年白酒漲的非常猛,於是我挑一隻我比較喜歡的白酒的基金來分析一下
一共是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
收益率: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
收益率:31.74%
--------------------每週四--------------------
本金: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中,需要把兩者都儲存起來。為了確保整個區塊鏈的完整性,每個塊都有一個自動識別雜湊。與比特幣一樣,每個塊的雜湊將是塊索引、時間戳、資料和前塊雜湊的加密雜湊。資料可以是你想要的任何東西。
importhashlibashasher
classBlock:
def__init__(self,index,timestamp,data,previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.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,它具有任意的資料值和“前一個雜湊”引數中的任意值。
importdatetimeasdate
defcreate_genesis_block():
# Manually construct a block with
# index zero and arbitrary previous hash
returnBlock(0,date.datetime.now(),"Genesis Block","0")
現在已經建立好了起源塊,接下來需要一個函式,以便在區塊鏈中生成後續的塊。這個函式將把鏈中的前一個塊作為引數,建立要生成的塊的資料,並使用適當的資料返回新塊。當新的塊雜湊資訊來自前面的塊時,區塊鏈的完整性會隨著每個新塊而增加。如果不這樣做,外部組織就更容易“改變過去”,用全新的方式取代已有的鏈條。這一系列的雜湊可以作為加密的證據,有助於確保一旦將塊新增到區塊鏈,它就不能被替換或刪除。
defnext_block(last_block):
this_index = last_block.index + 1
this_timestamp = date.datetime.now()
this_data = "Hey! I'm block " + str(this_index)
this_hash = last_block.hash
returnBlock(this_index,this_timestamp,this_data,this_hash)
大部分的工作已經完成,現在可以建立區塊鏈了。在這次的示例中,區塊鏈本身是一個簡單的Python列表。列表的第一個元素是起源塊。當然,還需要新增後續的塊,因為SnakeCoin是最小的區塊鏈,這裡只新增20個新的塊。可以用for迴圈來生成新塊。
# Create the blockchain and add the genesis block
blockchain = [create_genesis_block()]
previous_block = blockchain[0]
# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20
# Add blocks to the chain
foriinrange(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: {} ".format(block_to_add.hash)
下面來測試一下目前產生的區塊鏈。
看到了吧,這就是區塊鏈。如果希望在控制檯中檢視更多資訊,可以編輯完整的原始檔並列印每個塊的時間戳或資料。
這就是SnakeCoin要提供的所有東西。為了使SnakeCoin規模達到今天生產區塊鏈的規模,必須新增更多的功能,比如伺服器層,以跟蹤多臺機器上的鏈變化,以及在給定的時間段內限制新增的塊數量的工作演算法。
想要獲取更多學習資料
掃描右方二維碼加入本群
關注菜鳥Python筆記公眾號,與你分享更多Python有用的知識。