之前在介绍比特股开源代码时,漏掉了基于Python的uptick和其依赖库 python-bitshares,因为我确实没发现。最近试用了一下uptick, 我认为非常好用,用了之后,我不想用图形界面的钱包了。本文介绍一下uptick和其依赖的库。
作者:Fabian Schuh
这两个项目的作者是 Fabian Schuh,网名 xeroc, github地址: https://github.com/xeroc ,目前比特股理事会成员之一。个人感觉,他写的代码质量比较高。
项目简介
python-bitshares
python-bitshares是基于Python的、与比特股API节点交互的库。uptick的底层。
安装步骤
- 确保系统安装了Python3 (3.3 3.4 3.5 3.6应该都没问题)
- 确保系统安装了基于Python3的最新版本pip(9.0.1)
- 命令行: pip3 install uptick
- 命令行: pip3 install pycrypto (这一步理论上不需要,应该是某一个库依赖没写好的bug)
安装完成之后,首先需要设置API节点,否则默认是一个欧洲的节点,国内用的话很慢。国内尝试这两种
uptick set node wss://bit.btsabc.org/ws #比特帝国节点 uptick set node wss://bts.transwiser.com/ws #transwiser节点
当然,自己编译了并运行了全节点的话,就更快了:
uptick set node ws://127.0.0.1:8090/
这个节点设定同时影响uptick和python-bitshares库,或者说uptick直接修改和使用了库里面的配置。
uptick常用命令用法表
命令 | 含义 | 举例 |
---|---|---|
uptick | 获取帮助 | |
uptick −−help | 获取帮助 | |
uptick <COMMAND> −−help | 获取特定子命令的帮助 | uptick trades −−help |
uptick addkey | 增加私钥到钱包,一般用active key用于交易 | |
uptick listkeys | 列出钱包中所有私钥 | |
uptick listaccounts | 列出钱包中所有账号 | |
uptick trades <MARKET> | 查看某个市场的交易历史 | uptick trades BTS:CNY #最近,基于CNY的BTS成交情况 |
uptick orderbook <MARKET> | 查看某个市场的当前限价单 | uptick orderbook BTS:CNY #现在市场上,基于CNY有多少BTS的买单和卖单 |
uptick buy <AMOUNT> <ASSET> <PRICE> <BASE> | 提交买单 | uptick buy 2 BTS 0.4 CNY # 想用0.4CNY/BTS的价格购买2BTS |
uptick configuration | 查看当前配置 | |
uptick set <NAME> <VALUE> | 修改配置 | uptick set node ws://127.0.0.1:8090 # 设置API节点为本地重钱包 |
uptick info | 获取各种信息 | |
uptick info bitcrab | 获取账号bitcrab的相关信息 | |
uptick info BTS | 获取核心资产BTS的相关信息 | |
uptick history <account> | 获取某个账号的历史交易记录 | uptick hisotry bitcrab |
uptick balance <account> | 获取某个账号的当前余额 | uptick balance os |
uptick feeds <ASSET> | 获取某个智能资产的喂价信息 | uptick feeds CNY |
uptick openorders <account> | 获取某个账号的未成交限价单 | uptick openorders a-bot |
python-bitshares代码示例
python-bitshares的文档也写得很好,有python基础的人能很快上手,这里给出两个示例代码。
获取最近一小时的最多50条BTS:CNY交易,计算这些交易的平均价格
#!/usr/bin/env python3from bitshares.market import Market
market = Market(‘BTS:CNY’)
from datetime import datetime,timedelta
now = datetime.utcnow()
d = timedelta(hours=-1)
onehourago = now + dtrades = market.trades(limit=50,start=onehourago,stop=now)
def getSum(filledOrders):
cny = 0
bts = 0
for order in filledOrders:
print(order[‘time’])
cny += order[‘base’][‘amount’]
bts += order[‘quote’][‘amount’]<span class="k">return</span> <span class="p">{</span><span class="s1">'cny'</span><span class="p">:</span> <span class="n">cny</span><span class="p">,</span> <span class="s1">'bts'</span><span class="p">:</span> <span class="n">bts</span><span class="p">,</span> <span class="s1">'price'</span><span class="p">:</span> <span class="n">cny</span><span class="o">/</span><span class="n">bts</span> <span class="k">if</span> <span class="n">bts</span> <span class="o">></span><span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'size'</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">filledOrders</span><span class="p">)</span> <span class="p">}</span>
print(‘成交:’, getSum(trades))
获取当前市场上BTS:CNY的最多100条限价单,并分别计算买单和卖单的平均价格
#!/usr/bin/env python3from bitshares.market import Market
market = Market(‘BTS:CNY’)orderbook = market.orderbook(limit=50)
#区块链最多返回50个买单和卖单,默认limit=25
bids=orderbook[‘bids’]
asks=orderbook[‘asks’]def getSum(orders):
cny = 0
bts = 0
for order in orders:
cny += order[‘base’][‘amount’]
bts += order[‘quote’][‘amount’]<span class="k">return</span> <span class="p">{</span><span class="s1">'cny'</span><span class="p">:</span> <span class="n">cny</span><span class="p">,</span> <span class="s1">'bts'</span><span class="p">:</span> <span class="n">bts</span><span class="p">,</span> <span class="s1">'price'</span><span class="p">:</span> <span class="n">cny</span><span class="o">/</span><span class="n">bts</span><span class="p">,</span> <span class="s1">'size'</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">orders</span><span class="p">)</span> <span class="p">}</span>
print(‘买单:’, getSum(bids))
print(‘卖单:’, getSum(asks))
给读者的思考
感谢阅读到这里的朋友,这么枯燥的技术细节您都读完了,能否思考以下问题呢?
- uptick/python-bitshares可以发起交易,账号存储在本地计算机,安全性如何?
- 如何利用uptick/python-bitshares发起交易?
- 如何利用uptick/python-bitshares发起转账?