手把手教你使用币安(Binance)API交易-PHP

96
bigbigbigblue
2018.02.26 22:07* 字数 2428

一、前言

什么是API

API接口是一些预先定义的函数,目的是提供给应用程序、开发人员基于某软件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。而交易所API就是其提供的交易行为程序接口,个人用户可以通过申请Key和secret获得操作账户的权限,实现程序化的交易操作,如查询、买卖、提现等。使用过imtoken和sosobtc操作云币账户的老韭菜们一定对其不陌生,现在的bigone也可以通过币观APP实现API交易,其本质都是用户提供Key和secret,第三方软件提供调用接口的工具。

但是其中的风险是不言而喻的,交出了Key和Secret相当于交出了账户的控制权,一方面第三方软件无法自证清白,在巨大的利益面前,情操和品德是很难保护你的账户安全。另一方面,就算平台没有作恶的意愿,也难保其因为技术漏洞、管理不善、黑客攻击等原因泄露了用户的API。这不是危言耸听,在百度、网易、大麦等互联网公司都发生过拖库事件。

特别是当账户里的资金量比较大,希望做一些程序化的交易策略时,第三方软件不仅不安全,其提供的操作灵活性也不可能满足需求。对于有一点点编程基础的同学可以自己写程序来实现API接口的调用,进而实现自己的量化交易、自动搬砖策略。

需要什么准备

量化交易的核心是交易策略,策略都是在我们脑海中,通过点击鼠标来执行。每个人都有不同的交易风格,本文的重点不是介绍交易策略,而是教会大家使用API接口,只需要很少的编程知识就可以一步步完成配置,在各种操作验证成功后,大家就可以自由发挥,将脑海中的交易策略落实成为程序化交易策略了。

编程语言:采用PHP,只要学过C语言即可看懂,语法简单,有编程基础的同学自学半小时即可看懂程序。操作系统:MacOS,链接上网络,最好可以翻墙,不解释。

二、MAC下配置PHP运行环境

Mac系统对于PHP运行非常友好,我们只需要进行简单的配置便可以开始进行使用,本篇文章将一步一步地介绍Apache、PHP的安装与配置,为开始进行开发铺好路。

基本命令

启动Apache服务:sudo apachectl start

查看apache服务版本:sudo apachectl -v

关闭Apache服务:sudo apachectl stop

重启Apache服务:sudo apachectl restart

修改默认工程路径

Apache服务部署路径在/资源库/WebServer/Documents/,我们的项目需要放置在该路径下。

但是本路径属于系统私有,修改文件、添加、删除都需要管理员权限,在开发过程中每次保存都需要输入密码,非常不方便。如果想要修改部署路径,可以在Apache服务默认安装路径/private/etc/apache2目录下找到并打开httpd.conf文件。但是/private/etc/apache2属于系统私有目录,我们不可直接在Finder中找到该路径,在终端中输入open /etc命令可以进入etc文件夹。

在打开httpd.conf文件后,搜索DocumentRoot并修改部署路径:

PHP的启动只需要在Apache服务中进行一下配置即可直接使用:首先,在/private/etc/apache2目录下找到并打开httpd.conf文件;其次,搜索#LoadModule php7_module libexec/apache2/libphp7.so,将前方的#删除。

检查配置是否成功

重启Apache服务,在设置好的配置路径下新建一个info.php测试程序试试效果:

<?php

phpinfo()

?>

最后在浏览器中输入网址http://localhost/info.php即可查看到PHP的信息

三、在币安申请API Keys

由于这方面的教程很多,申请步骤这里就不做详细的介绍了。

随便搜了个链接大家自己看 如何在BB8上关联币安网的API?

四、配置币安PHP API接口

登陆币安个人中心,点击API文档链接,会跳转到github上API说明文档和操作例程。

里面有各种语言的API调用例程,本次介绍的是使用php来调用API接口,因此打开php-binance-api文件夹,发现里面已经有些好的example,简直是太贴心了。

打开example.php,这是一个查询价格的例子。

?php

require '../vendor/autoload.php';

$api = new Binance\API("<api key>","<secret>");

这里用到了github上提供的类,因此在使用之前还需要安装composer,并生成autoload文件。

安装composer

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。安装Composer的目的就是要安装币安在github上提供的代码库。对Composer有兴趣可以参考Composer网站:https://getcomposer.org,上面有详细的介绍和安装流程,当然也可以直接参考我下面介绍的步骤来安装和配置。

在MAC系统下可以直接通过终端命令来下载Composer:

curl -sS https://getcomposer.org/installer | php

执行完成后,你会发现在当前目录下多了一个文件composer.phar,在此目录下可以使用composer命令。但每次当你建立新目录时,你必須再复制一个副本到新目录中,这样比较麻烦。所以最佳做法是将它放到 usr/local/bin 目录中中,成为全域指令。

mv composer.phar /usr/local/bin/composer

你就可以直接在终端中使用composer命令了。

安装API代码库

Composer是一个依赖管理工具,默认情况下它不会在全局安装任何东西。Composer 是这样为你解决问题:

a) 你有一个项目依赖于若干个库。

b) 其中一些库依赖于其他库。

c) 你声明你所依赖的东西。

d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

描述项目依赖关系的文件就是composer.json,这个是需要根据具体的依赖关系手动创建的,并且需要符合一定的格式。有兴趣可以参考http://docs.phpcomposer.com/04-schema.html。不用担心,币安的github上已经为我们提供了composer.json文件,下载下来即可。

为了方便部署和管理,我们将composer.json下载到前面设置好的部署目录中,在终端输入命令:

composer require "jaggedsoft/php-binance-api @dev"

安装过程可能会有点长,耐心等待安装完成后会发现在此目录下多了composer.lock文件和vendor文件夹,前文中提到的autoload.php即在此目录下。在代码中加入require ‘vendor/autoload.php'就可以在代码中使用API接口类和函数了。

五、测试币安API接口

初次调用API接口

首先,新建php文件BinanceAPI.php,需要将自己的apikey和apisecret填入代码中:

$apikey='0h88ag0KoQMXXXXXXXXXXXXXXXXX';

$apisecret=‘c2ltK5G05t0KSmXXXXXXXXXXXXXXXXXXX’;

加载币安API库,如果vendor路径不在PHP部署路径下,需要根据实际情况进行调整。

require 'vendor/autoload.php';

$api = new Binance\API($apikey,$apisecret);

获取币种当前价格

挑选EOS进行显示

$ticker = $api->prices();

echo "Price of EOS: {$ticker['EOSBTC']} BTC.".PHP_EOL;

返回的数据格式为一维数组:

Array

(   

    [ETHBTC] => 0.05050800 

    [LTCBTC] => 0.00967400 

    [BNBBTC] => 0.00021479 

    [NEOBTC] => 0.00479300   

    。。。。。

    )

在浏览器中输入http://localhost/BinanceAPI.php,运行输出的结果如下:

Price of EOS: 0.00079242 BTC.

查询个人当前持仓

//Get my balance

$balances = $api->balances($ticker);

print_r($ticker);

echo "Estimated Value: ".$api->btc_value." BTC".PHP_EOL;

返回的数据格式如下:

```   

[QTUM] => Array      (           

    [available] => 909.61000000           

    [onOrder] => 0.00000000         

    [btcValue] => 2.434015470       

)   

[BNB] => Array        (         

    [available] => 181.94316876           

    [onOrder] => 0.00000000           

    [btcValue] => 0.17637426     

)

... (more)

为了避免暴露资产,结果我就不贴了哈:)

查询当前币安可交易的币种数量

$arrlength=count($balances);

echo "Biance has ".$arrlength." different coin.";

运行输出结果为:

Biance has 151 different coin.

查询并打印出此仓金额大于0.01BTC的币种

foreach($balances as $coin => $value)

{

    if($value['btcTotal']>0.01)

    {

        echo $coin.":";

        echo "Available ".$value['available']."\t";

        echo "BtcTotal ".$value['btcTotal']."";

    }

}

其他的代码示例和返回的数据结构说明请参考github上的文档,通过API可以实现查询买卖价格、挂单交易(限价、市价、止盈止损)、提现等功能,这里就不一一示范了,README.md文档中均有说明。

随笔
Web note ad 1