币安币软件 用python如何curlrequestsrequests.post()方法的使用

资讯 10个月前 manoon
0

如何使用 python 卷曲

requests.post() 方法的使用

Binance 的 API 必须科学地连接到互联网

他们的文档有点难看(可能是因为我太菜了),但客户服务响应很快。问了客服很多问题,都得到了耐心的解答,赞!

说明一下,由于账户中没有真钱,所以使用了Spot Test Network的key和link。从逻辑上讲,对于真实交易,应该直接替换为 Spot API。

因为代码是用 Jupyter Notebook 写的,所以我发文章的时候也懒得改了……我就按原来的格式写,一个 cell 一个 cell。

[1] 导入包

import requests
import json
import time
import hmac
import hashlib

[2] 密钥和秘钥由币安官方给出。

创建教程:如何创建 API-Biance (Binance)

因为账户里没钱,所以写代码的时候用的是测试账户(加上_test的baseURL)。我觉得逻辑上应该可以直接把测试账户改成真实账户,然后修改key和link。就是这样。

coin_list 是货币,BTC 比特币、LTC 莱特币、BNB 币安币。

#属性配置
apiKey=''
apiSecretKey=''
apiKey_test=''
apiSecretKey_test=''
baseUrl='https://api.binance.com'
baseUrl_test='https://testnet.binance.vision'
coin_list=['BTC','LTC','BNB']

[3] 生成时间戳

def createTimeStamp():
    return int(time.time()*1000)

[4] 生成签名

官方文档原文:

签名使用 HMAC SHA256 算法。API-KEY对应的API-Secret作为HMAC SHA256密钥,其他所有参数作为HMAC SHA256的操作对象。得到的输出就是签名。

签名不区分大小写。

咳咳,不过我只是直接从github上复制了代码,没研究过什么意思。

param2string 函数将参数字典生成为字符串,然后使用哈希函数生成签名。

def param2string(param):
    """本函数用于根据param(一个参数字典)生成后缀字符串"""
    s=''
    for k in param.keys():
        s+=k
        s+='='
        s+=str(param[k])
        s+='&'
    return s[:-1]
    
def hashing(query_string):
    """本函数用于根据后缀生成签名"""
    #代码参考来源:https://github.com/binance-exchange/binance-signature-examples/blob/master/python/signature.py
    return hmac.new(apiSecretKey_test.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()

[4] 一键购买功能

post方法,/api/v3/order接口。

请注意,可能需要的参数因订单类型而异。这里使用市价单,quoteOrderQty 用于衡量交易量。

原始币安官方文档:

使用 quoteOrderQty 的市价单 MARKET 显然是通过购买(或出售)您想要花费(或获取)的报价资产数量;此时的正确下单数量将根据市场流动性和quoteOrderQty计算。

以BTCUSDT为例,quoteOrderQty=100:

下单时,订单会尽可能多地购买价值100USDT的BTC。

在下卖单时币安币软件,该订单将尽可能多地卖出价值 100USDT 的 BTC。

使用quoteOrderQty的市价单MARKET不会破坏LOT_SIZE的限制规则;订单将尽可能接近给定的 quoteOrderQty 执行。

(注意币安官方说wapi开头的API只能使用查询字符串,因为文档中只有curl的例子,不明白这个请求的data参数是否可以使用?反正,事务接口都以 api 开头,这种应该可以工作)

(如果不能使用币安币软件,应该可以直接在param2string函数的返回值中添加requests的链接后缀,然后删除data参数)

def OneClickBuy(coin_list,pay_by_money_category,pay_by_money_amount):
    """
    coin_list是币名列表,pay_by_money_category是用于买币的币种,pay_by_money_amount是用于买币的币种的数值
    本函数用于一键购买列表中的币
    如果在某一币处交易失败将返回失败原因与已成功的交易
    """
    for c in coin_list:
        data_symbol=c+pay_by_money_category
        data_side='BUY'
        data_type='MARKET'
        data_quoteOrderQty=pay_by_money_amount/3
        data_timestamp=createTimeStamp()
        p={'symbol':data_symbol,'side':data_side,'type':data_type,'quoteOrderQty':data_quoteOrderQty,'timestamp':data_timestamp}
        p['signature']=hashing(param2string(p))
        response1=requests.post(url=baseUrl_test+'/api/v3/order',headers={'X-MBX-APIKEY':apiKey_test},data=p)
        if response1.status_code!=200:
            print(c+'购买失败!失败原因是:'+response1.json()['msg'])
        else:
            print(c+'购买成功!')

[5] 一键卖出功能

几乎[4]替换了side参数,变化的程度

def OneClickSell(coin_list,get_category,sell_amount):
    """
    coin_list是币名列表,get_category是卖出后得到的币种名,sell_amount是各自卖出的额度
    本函数用于一键出售列表中的币
    如果在某一币处交易失败将返回失败原因与已成功的交易
    """
    for c in coin_list:
        data_symbol=c+get_category
        data_side='SELL'
        data_type='MARKET'
        data_quantity=sell_amount
        data_timestamp=createTimeStamp()
        p={'symbol':data_symbol,'side':data_side,'type':data_type,'quoteOrderQty':data_quoteOrderQty,'timestamp':data_timestamp}
        p['signature']=hashing(param2string(p))
        response1=requests.post(url=baseUrl_test+'/api/v3/order',headers={'X-MBX-APIKEY':apiKey_test},data=p)
        if response1.status_code!=200:
            print(c+'购买失败!失败原因是:'+response1.json()['msg'])
        else:
            print(c+'购买成功!')

版权声明:manoon 发表于 2021-10-09 13:58:11。
转载请注明:币安币软件 用python如何curlrequestsrequests.post()方法的使用 | 198区块链导航

暂无评论

暂无评论...