Python中的算法交易(CCXT)
今天我们将学习如何编写一个简单的交易系统,在币安加密交易所进行交易。在本文结束时,您将能够:
-
使用您的 API 密钥检索您的余额。
-
在您的币安账户上开仓和平仓。
本文将使用 Python 编写,您可以在此处下载最新版本的 python。这篇文章将用 TypeScript 为我们可爱的 node.js 开发人员编写,这里是链接。
免责声明:本文提供的交易系统仅用于教育目的。在您设计并回测强大的交易系统之前,请勿将其用于实时交易。让我们开始吧。
搭建环境并安装依赖
创建项目文件夹,我们将其命名为Binance_Bot。在项目文件夹中,我们将创建 3 个文件:
1.app.py(这个文件是我们编写机器人逻辑的地方)
-
requirements.txt (这个文件是我们存储依赖的地方)
-
.env (这个文件是一个环境变量文件,我们可以在里面存放我们的API密钥)
-
.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,这是整个代码的屏幕截图。

这个机器人现在做的不多,但在下一篇文章中,我将展示如何根据技术指标的信号执行交易。
感谢您坚持到最后,我们下一篇文章再见。
更多推荐

所有评论(0)