学习用Python编写加密交易模拟器代码
我不是交易员,但是交易加密货币的整个想法是如此诱人。 除非我知道自己在做什么,否则我不想投资真钱。 我想找个地方测试我的策略。
因此,我想到了建立一个加密交易模拟器。 这样做的目的是帮助新手投资者学习和试验,而又不会损失真钱。 在本系列中,我将教您如何构建一个。 我有一个数据库,其中包含2018年3月7日至2018年3月16日之间不同交易所的加密货币价格。
在这个故事中,我们将在python中构建一个简单的加密模拟器,允许用户投资一种加密货币,然后我们将运行一个模拟器,以查看其未来9天的加密资产的性能。
现在,我们将显示其资产的最佳出价,并将其与初始投资进行比较,并告诉他是否实现了盈亏。 在接下来的故事中,我将介绍如何添加实时货币监控,如何编写和测试策略,如何构建用户界面等。 ( 我将 在这里 需要您的 支持 ,在本文结尾处我已经提到了相同的内容。故事。)
这是我们今天构建的模拟器的视频,您也可以查看项目的Github存储库 。 您需要从 此处 单独下载数据库 ,并将其放置在项目目录中。
伪代码
在开始编码之前,我们需要弄清楚下一步要做什么。 这很重要,否则我们经常会感到困惑。 我们使用伪代码来获得清晰度,伪代码不是真实代码,而是我们自己语言中的路线图。
Step 1: Welcome the user.
Step 2: We will fetch the cryptocurrency prices during March 7th, 2018 since our database starts at that time.
Step 3: We will ask the user to invest in one currency.
Step 4: Then, we will run the simulator to see how his crypto asset does in the next 9 days.
Step 5: We will find the best bid price for that currency, compare it with user's initial investment and display if he made a profit or loss.
我们不必按此顺序进行操作,我们可以先做任何容易的事情。 因为完成更多的工作使我们充满信心,所以我们很可能完成整个项目。
本故事中使用的代码使用Python 2.7。
让我们从创建一个空文件夹开始,例如:“ CryptoSimulator ”。 您还需要从 此处 下载加密价格数据库 ,并将其放置在项目文件夹中。
制作一个名为“ run.py”的文件
欢迎
我们将创建一个简单的函数,称为“ welcome ”。 它没什么大不了的,只打印一系列代码,即程序名称,就可以使用户了解程序的用途,换句话说,只是说“ Hi ”。
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,因此我们需要下载python库,您可以使用以下命令进行操作。
pip install sqlite3
现在,在文件run.py的开头,我们需要导入库。
import sqlite3
现在,让我们编写代码以从一开始就获取价格并显示它。
在数据库中,我们具有以下列,时间戳记,first_leg,second_leg,ask,bid和交换名称。 如果我们考虑货币对“ 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()
现在,我们将遍历价格,删除重复项,然后将其添加到python字典中并进行打印。
coins = {}
for coinAskPrice in coinAskPrices:
if coinAskPrice[0] in coins:
continue
coins[coinAskPrice[0]] = {“price”:coinAskPrice[1], “curreny”:coinAskPrice[0]}
print(“{} — ${} \n”.format(coinAskPrice[0], round(coinAskPrice[1],4)))
return coins
如果您不理解代码,请不要担心。 只需下载存储库,运行它,然后四处摸索,看看会发生什么,慢慢地一切都会开始。
现在,我们将上述代码段组合为一个函数“ fetchCoins ”。
现在,已经显示了价格,我们将询问用户他想要购买哪个加密货币以及多少。 我们将创建一个名为“ inputBuy ”的函数。
def inputBuy():
print(“Select the crypto curreny you want to buy? \n”)
curreny = raw_input(“”).upper()
print(“That’s great. How much quantity you want to buy? \n”)
quantity = float(raw_input(“”))
return curreny, quantity
现在,我们需要找到用户感兴趣的货币价格。 我们可以简单地通过查询python字典来做到这一点。
price = coins[currency][‘price’]
然后,我们需要将这些参数传递给我们的模拟器。 让我们将这些代码片段组合到main函数中。
是的,尚未定义“ runSimulation ”功能,我们接下来将做。 我们可以做另一个文件,创建一个文件“ simulator.py”
我们需要导入这些库
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日找到该货币的最佳价格。 稍后,我们将计算差值以发现该值是增加还是减少。
要找到最佳价格,请创建一个名为“ fetchBestBidPriceFromFrom ”的函数。
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 {} \n”.format(currency, bestPrice, time))
if priceDifference>0:
print(“Your total asset value is ${}, it has increase by {}% \n”.format(round(bestValue, 4), round(priceDifference,2)))
else:
print(“Your total asset value is ${}, it has decreased by {} \n”.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函数调用打印 。
恭喜,我们已经准备好基本版本的加密交易模拟器。
拍手请 ????, 谢谢 ????。 这仅仅是开始,在接下来的系列中我们将做很多事情,例如将其与实时加密API集成,编写和测试策略,制作UI等。
跟随我们, HackerNoon 和我( Febin John James ),以便您不会错过本系列。
我需要您的支持,如果获得足够的支持,我什至会构建一个移动应用并免费发布。 请给我买杯咖啡来支持我。 您也可以赞助此系列,请通过Linkedin与我联系。
您也可以捐赠ETH。
ETH
0xB65BBf5C47f9Abc2d40A5E739DD69c64C2e89A0f
From: https://hackernoon.com/how-to-build-a-simple-crypto-trading-simulator-part-1-4ccdddcd6b76