社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

手把手:用Python搭建一个加密货币交易模拟器,不用投钱就能玩

大数据文摘 • 6 年前 • 402 次点击  

大数据文摘作品

编译:汪小七、黄文畅、小鱼


我虽然不是交易员,但对加密货币的交易非常感兴趣。然而,我不会在自己什么都不清楚的时候就盲目投资加密货币,所以在进行投资之前,我想先来测试一下自己的交易策略。


播音员:今天的道琼斯指数曲线是华盛顿天际线(林肯纪念堂、华盛顿纪念碑、美国国会大厦)的形状...(i.e.股市表现奇怪)


而我的想法就是搭建一个加密货币交易的模拟器,这样投资新手不用投钱就可以学习和体验加密货币的交易。在这一系列学习中,我将给大家展示如何去建这样一个交易模拟器。


首先我们需要将201837日至2018316日的加密货币的交易价格导入到数据库中。


在这个练习中,我们将用Python搭建一个简单的加密货币交易模拟器,用户可以在这里进行加密货币的投资,然后观察他的加密货币资产在接下来的9天将如何变化。


目前,模拟器会给出用户资产的最佳出仓价,并与其原始投资价格进行比较,然后告诉用户最终的盈亏状况。接下来,我将介绍如何添加对流通货币的价格监控,如何编写和测试交易策略,还有如何构建用户界面等等。


下面这个视频就是我们今天讲到的交易模拟器,同时你也可以在Github 库中看到这个项目。另外,你需要分开下载数据库,并把它放到你的项目目录下。


Github库链接:

https://github.com/jamesfebin/CryptoTradingSimulator


数据库链接:

https://drive.google.com/file/d/1OHhtrvOe-EWcX_8tipWo6tWYqkkYDkPw/view?usp=sharing



伪代码


在编写代码之前,明确我们接下来的每个步骤至关重要,否则编程时会陷入困惑。为了清楚起见,我们使用伪代码进行说明,伪代码并不是真实的代码,而是我们用自己的语言写的思维图。


步骤1: 欢迎用户
步骤2: 在数据库启动时,抓取201337日的加密货币价格
步骤3: 让用户选择一种货币并进行投资
步骤4: 接着,运行模拟器并显示未来9天里用户的加密货币价格走势
步骤5: 模拟器会给出该加密货币的最佳出仓价,并与用户投资时的资产进行对比,显示盈亏情况


我们无需按以上步骤依次进行代码编写,可以依据自己的能力从最简单的步骤开始编写,随着模拟器功能的不断完善,我们编程的能力和信心也逐渐提高,从而才可能完成整个项目。


本文中的代码开发环境为Python2.7


首先,我们建一个空的项目文件夹,如:“CryptoSimulator”,然后下载加密货币价格的数据库,放到这个项目文件夹中。


数据库下载链接:

https://drive.google.com/file/d/1OHhtrvOe-EWcX_8tipWo6tWYqkkYDkPw/view?usp=sharing


接着,再新建一个命名为“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 … ”)


现在我们需要抓取201837日早上739的加密货币价格。


因为我们的数据库是基于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(“{} — ${} \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


接着,我们需要找出用户感兴趣的货币的价格,这个功能通过查询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


在这个函数中我们首先要计算出买入时总资产的价格,然后找出37日到316日之间的最佳出仓价,接着计算两者之间的差价并显示盈亏状况。


下面编写一个 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 {} \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.pysimulator.py中,用dramaticTyping函数代替print函数。


搞定!现在我们已经编写了一个简易版的加密货币交易模拟器。



此处应该有掌声,谢谢!😊好戏刚刚开始,接下来,我们还有一系列的工作需要完成,比如将加密货币交易模拟器与加密货币的实时交易整合为API,编写交易策略的代码并进行测试,甚至考虑创建一个UI界面等等,敬请期待~


原文链接:

https://hackernoon.com/how-to-build-a-simple-crypto-trading-simulator-part-1-4ccdddcd6b76


【今日机器学习概念】

Have a Great Definition

志愿者介绍

回复志愿者”加入我们



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/mEubzuob9n
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/10191
 
402 次点击