當前位置:
首頁 > 科技 > 手把手教你搭建一個加密貨幣交易模擬器,不用投錢就能玩

手把手教你搭建一個加密貨幣交易模擬器,不用投錢就能玩

大數據文摘,編譯:汪小七、黃文暢、小魚

我雖然不是交易員,但對加密貨幣的交易非常感興趣。然而,我不會在自己什麼都不清楚的時候就盲目投資加密貨幣,所以在進行投資之前,我想先來測試一下自己的交易策略。

播音員:今天的道瓊斯指數曲線是華盛頓天際線(林肯紀念堂、華盛頓紀念碑、美國國會大廈)的形狀...(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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 虎嗅APP 的精彩文章:

如何發動群眾掙群眾的錢
蘋果確定 6 月發布會時間,老地點會有什麼新產品?

TAG:虎嗅APP |