手把手教你搭建一個加密貨幣交易模擬器,不用投錢就能玩
大數據文摘,編譯:汪小七、黃文暢、小魚
我雖然不是交易員,但對加密貨幣的交易非常感興趣。然而,我不會在自己什麼都不清楚的時候就盲目投資加密貨幣,所以在進行投資之前,我想先來測試一下自己的交易策略。
播音員:今天的道瓊斯指數曲線是華盛頓天際線(林肯紀念堂、華盛頓紀念碑、美國國會大廈)的形狀...(i.e.股市表現奇怪)
而我的想法就是搭建一個加密貨幣交易的模擬器,這樣投資新手不用投錢就可以學習和體驗加密貨幣的交易。在這一系列學習中,我將給大家展示如何去建這樣一個交易模擬器。
首先我們需要將2018年3月7日至2018年3月16日的加密貨幣的交易價格導入到資料庫中。
在這個練習中,我們將用Python搭建一個簡單的加密貨幣交易模擬器,用戶可以在這裡進行加密貨幣的投資,然後觀察自己的加密貨幣資產在接下來的9天將如何變化。
目前,模擬器會給出用戶資產的最佳出倉價,並與其原始投資價格進行比較,然後告訴用戶最終的盈虧狀況。接下來,我將介紹如何添加對流通貨幣的價格監控,如何編寫和測試交易策略,還有如何構建用戶界面等等。
同時你也可以在 Github 庫中看到這個項目。另外,你需要分開下載資料庫,並把它放到你的項目目錄下。
Github庫、資料庫。
偽代碼
在編寫代碼之前,明確我們接下來的每個步驟至關重要,否則編程時會陷入困惑。為了清楚起見,我們使用偽代碼進行說明,偽代碼並不是真實的代碼,而是我們用自己的語言寫的思維圖。
步驟1: 歡迎用戶;
步驟2: 在資料庫啟動時,抓取2013年3月7日的加密貨幣價格;
步驟3: 讓用戶選擇一種貨幣並進行投資;
步驟4: 接著,運行模擬器並顯示未來9天里用戶的加密貨幣價格走勢;
步驟5: 模擬器會給出該加密貨幣的最佳出倉價,並與用戶投資時的資產進行對比,顯示盈虧情況。
我們無需按以上步驟依次進行代碼編寫,可以依據自己的能力從最簡單的步驟開始編寫,隨著模擬器功能的不斷完善,我們編程的能力和信心也逐漸提高,從而才可能完成整個項目。
本文中的代碼開發環境為Python2.7。
首先,我們建一個空的項目文件夾,如:「CryptoSimulator」,然後下載加密貨幣價格的資料庫,放到這個項目文件夾中。
資料庫下載。
接著,再新建一個命名為「run.py」的py文件
歡迎頁面
我們將創建一個簡單的「welcome」函數,這個函數並不需要有太多的功能,只要輸出一系列的項目介紹即可,包括程序名稱、程序功能介紹。換句話說,就是向用戶問個好。
def welcome():
print(「Simple Crypto Trading Simulator」)
print(「Hey Yo, you are back in time. It』s Wednesday, March 7, 2018 7:39 AM」)
print(「Here are the crypto currencies you can invest.」)
print(「Fetching prices … 」)
現在我們需要抓取2018年3月7日早上7:39的加密貨幣價格。
因為我們的資料庫是基於sqlite3進行操作,所以在此之前我們還需要下載sqlite3庫並安裝,可以用以下命令實現。
pip install sqlite3
在run.py文件開頭,需要導入sqlite3庫,命令如下。
import sqlite3
現在,我們編寫代碼來抓取起始時刻的價格數據並進行顯示。
資料庫中有以下幾列:時間戳(timestamp)、基準貨幣(first_leg)、計價貨幣(second_leg)、賣出價(ask)、買入價(bid)和交易名稱(the exchange name)。
假如我們當前的貨幣對是「比特幣和美元」(BTC/USD),那麼基準貨幣就是比特幣(BTC),計價貨幣就是美元(USD)。
以下幾行代碼就是用來抓取指定時間的價格數據。
connection = sqlite3.connect(『./currency_monitor.db』)
cursor = connection.cursor()
query = 「SELECT first_leg, ask FROM prices WHERE timestamp=』1520408341.52" AND second_leg=』USD』;」 cursor.execute(query)
coinAskPrices = cursor.fetchall()
首先,我們遍歷賣出價格列表,刪除重複樣本,將其添加到名為coins{}的字典中,然後輸出。
coins = {}
for coinAskPrice in coinAskPrices:
if coinAskPrice[0] in coins:
continue
coins[coinAskPrice[0]] = {「price」:coinAskPrice[1], 「curreny」:coinAskPrice[0]}
print(「{} — ${}
」.format(coinAskPrice[0], round(coinAskPrice[1],4)))
return coins
如果你看不懂代碼,也別擔心,只需要將整個程序包下載下來,運行,然後修改部分代碼再運行,對比看看結果有什麼不同,循環往複,慢慢你就開始理解代碼的含義了。
現在,我們將上面的幾部分代碼合併成一個獨立的函數fetchCoins(),結果如下:
現在,價格顯示的功能已經搞定,接下來我們就需要用戶來選擇他們的交易幣種和交易量,這就需要創建一個inputBuy()函數來實現。
def inputBuy():
print(「Select the crypto curreny you want to buy?
」)
curreny = raw_input(「」).upper()
print(「That』s great. How much quantity you want to buy?
」)
quantity = float(raw_input(「」))
return curreny, quantity
接著,我們需要找出用戶感興趣的貨幣的價格,這個功能通過查詢coins{}字典就可以實現。
price = coins[currency][『price』]
然後我們需要把返回的參數傳給模擬器。現在我們可以將上述代碼塊進行整合併放進主函數中。
目前為止我們還沒有創建runSimulation()函數,接下來的任務就是創建一個名為「simulator.py」的py文件。
在創建runSimulation()函數前,先導入以下這些庫函數。
import sqlite3
import datetime
然後定義runSimulation()函數。
def runSimulation(boughtPrice, quantity, currency):
valueThen = boughtPrice * quantity
bestPrice, timestamp = fetchBestBidPriceFromDB(currency)
bestValue = bestPrice * quantity
priceDifference = (bestValue — valueThen)/float(valueThen) * 100
在這個函數中我們首先要計算出買入時總資產的價格,然後找出3月7日到3月16日之間的最佳出倉價,接著計算兩者之間的差價並顯示盈虧狀況。
下面編寫一個 fetchBestBidPriceFromDB()函數來找出最佳出倉價。
def fetchBestBidPriceFromDB(currency):
connection = sqlite3.connect(『./currency_monitor.db』)
cursor = connection.cursor()
query = 「SELECT max(bid),timestamp from prices WHERE first_leg=』{}』 and second_leg=』USD』 and timestamp> 『1520408341.52』」.format(currency)
cursor.execute(query)
rows = cursor.fetchone()
return rows[0], rows[1]
在runSimulation()函數中再添加幾行語句,以便輸出查找結果。
print(「The best bid price for {} was ${} at {}
」.format(currency, bestPrice, time))
if priceDifference>0:
print(「Your total asset value is ${}, it has increase by {}%
」.format(round(bestValue, 4), round(priceDifference,2)))
else:
print(「Your total asset value is ${}, it has decreased by {}
」.format(round(bestValue, 4), round(priceDifference,2)))
這裡,再一次對上述代碼塊進行整合,結果如下:
現在整個程序已經基本完成了,但是我還想加個特效——就像在電影里,字幕中的字母會一個一個的蹦出來。
創建一個名為「drama.py」的文件,然後輸入以下代碼:
import time
import sys
def dramaticTyping(string):
for char in string:
sys.stdout.write(char)
sys.stdout.flush()
time.sleep(0.10)
現在,把這個文件導入run.py和simulator.py中,用dramaticTyping函數代替print函數。
搞定!現在我們已經編寫了一個簡易版的加密貨幣交易模擬器。
此處應該有掌聲,謝謝!好戲剛剛開始,接下來,我們還有一系列的工作需要完成,比如將加密貨幣交易模擬器與加密貨幣的實時交易整合為API,編寫交易策略的代碼並進行測試,甚至考慮創建一個UI界面等等,敬請期待~
原文鏈接:
https://hackernoon.com/how-to-build-a-simple-crypto-trading-simulator-part-1-4ccdddcd6b76
※如何發動群眾掙群眾的錢
※蘋果確定 6 月發布會時間,老地點會有什麼新產品?
TAG:虎嗅APP |