今天我们将学习如何编写一个简单的交易系统,在币安加密交易所进行交易。在本文结束时,您将能够:

  • 使用您的 API 密钥检索您的余额。

  • 在您的币安账户上开仓和平仓。

本文将使用 Python 编写,您可以在此处下载最新版本的 python。这篇文章将用 TypeScript 为我们可爱的 node.js 开发人员编写,这里是链接。

免责声明:本文提供的交易系统仅用于教育目的。在您设计并回测强大的交易系统之前,请勿将其用于实时交易。让我们开始吧。

搭建环境并安装依赖

创建项目文件夹,我们将其命名为Binance_Bot。在项目文件夹中,我们将创建 3 个文件:

1.app.py(这个文件是我们编写机器人逻辑的地方)

  1. requirements.txt (这个文件是我们存储依赖的地方)

  2. .env (这个文件是一个环境变量文件,我们可以在里面存放我们的API密钥)

  3. .gitignore (这个文件是为了防止我们不小心把key推送到Github)

现在我们需要获取我们的依赖项;打开 requirements.txt 并包含这些包:

python-dotenv
ccxt

将这些添加到 requirements.txt 文件后,在您的终端上,导航到项目目录并运行此命令。

$ pip3 install -r requirements.txt

它安装了这个简单机器人所需的所有依赖项。

生成 API 密钥并安全存储它们

我们将在本文中使用 Binance 加密货币交易所,如果您没有他们的帐户,您可以通过单击此链接进行注册

创建帐户后,您必须生成 API 密钥,您可以阅读这篇文章轻松做到这一点,请务必复制您的 API 密钥和秘密,因为我们稍后会使用它们。

现在您有了 API 密钥,是时候将它们存储为环境变量了,这样我们就不会将它们写入我们可能会推送到 Github 的脚本中。因此,使用 IDE 打开 .env 文件并包含以下内容:

API_KEY = "YOUR_API_KEY"
API_SECRET = "YOUR_API_SECRET"

一些加密货币交易所需要密码,但 Binance 只需要您的 API 密钥和秘密。现在打开 .gitignore 文件并写入

.env

这样,我们的 API 密钥仅保存在我们的 PC 上,不会被推送到服务器或上传到互联网。

现在我们的密钥已经安全保存,是时候将它们导入我们的app.py脚本了。

from dotenv import load_dotenv
import os, json 

load_dotenv()  # Take environment variables from .env

CCXT 库

CCXT 库是一个了不起的库,用于连接和交易加密货币交易所。它提供对市场数据的快速访问,用于存储、分析、可视化、指标开发、算法交易、策略回测、机器人编程和相关软件工程。

它旨在供编码员、开发人员、技术熟练的交易员、数据科学家和金融分析师用于构建交易算法。

CCXT 已作为依赖项包含在 requirements.txt 文件中,因此它应该已经在本地安装,所以让我们继续导入它。

from dotenv import load_dotenv
import os, json, time, ccxt

load_dotenv()  # Take environment variables from .env

导入 ccxt 后,我们要创建一个交换对象,因此我们将这一行附加到脚本的末尾。

binance = ccxt.binance({
    'apiKey': os.getenv('API_KEY'),
    'secret': os.getenv('API_SECRET'),
})

我们所做的只是实例化一个 CCXT 对象,并将我们的密钥作为环境变量提供给它,这样我们就可以通过我们刚刚创建的对象连接到我们的帐户。

为了测试这一点,让我们找回我们的余额。将此添加到机器人的末尾。

portfolio = binance.fetch_balance() # This returns a dictionary of the assets in your portfolio
print(json.dumps(portfolio, indent=4))

添加后,通过在终端上运行以下命令来执行程序:

$ python3 app.py

这应该会在终端上以结构化格式打印出一长串资产,您可以找到有关 CCXT文档的更多信息,以查看您可以用它做的其他很酷的事情。

开平仓单

我们现在将尝试通过 CCXT 对象购买加密货币,我们将简单地购买 Solana (SOL),然后在 30 秒后将其出售,这样我们就可以看到我们的代码在运行。后续文章将展示如何使用指标,甚至如何在服务器上托管交易系统,但现在,我们将保持简单。

将此添加到app.py

SOL_USDT = binance.markets['SOL/USDT']  # This returns the binance solana market object
#print(json.dumps(SOL_USDT, indent=4))

try:
    margin = portfolio["USDT"]["free"]
    # This gets the free USDT in your account

    amount = margin / binance.fetchTicker("SOL/USDT")["last"]
    # This computes the amount of SOL you can buy with the free USDT based on the last price

    amount = float(binance.amount_to_precision("SOL/USDT", amount))
    # This converts the calculated amount to appropriate amount of decimals accepted by the exchange

    if amount < SOL_USDT["limits"]["amount"]["min"]:
        print("Cannot place order, Not up to minimum tradeable amount")

    else:
        order = binance.create_order("SOL/USDT", 'market', 'buy', amount)
        if order:
            print(f"Successfully purchased {amount} of SOL")

except Exception as E:
    print(f"Error encountered: {str(E)}")
    # Simply checking any errors that might have occurred in the try block

恭喜!您刚刚通过算法购买了加密货币。好吧,让我们试着在 10 秒后卖回 SOL。

所以将这最后一部分添加到脚本中

# Simply checking any errors that might have occurred in the try block

time.sleep(10)

try:
    margin = portfolio["SOL"]["free"]
    amount = float(binance.amount_to_precision("SOL/USDT", margin))

    if amount < SOL_USDT["limits"]["amount"]["min"]:
        print("Cannot place order, Not up to minimum tradeable amount")

    else:
        order = binance.create_order("SOL/USDT", 'market', 'sell', amount)
        if order:
            print(f"Successfully sold {amount} of SOL")

except Exception as E:
    print(f"Error encountered when selling: {str(E)}")
    # Simply checking any errors that might have occurred in the try block

这是上述代码的 GitHubrepo,这是整个代码的屏幕截图。

代码.png

这个机器人现在做的不多,但在下一篇文章中,我将展示如何根据技术指标的信号执行交易。

感谢您坚持到最后,我们下一篇文章再见。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐