CCXT:加密货币量化交易神器
CCXT框架 是一个Python/Javascript/PHP的一个交易API框架,对接超过130多个交易所。可用于世界各地的加密货币交易所的连接和交易,以及转账支付处理,可用于存储数据,分析,可视化,指标开发,算法交易,是一个非常容易集成的开箱即用的统一API。 CCXT框架Github地址: https://github.com/ccxt/ccxt 当前功能列表:支持许多交易市场,甚至即将推出的为所有交易提供完整的公共和私人API所有货币,山寨币和标记,价格,订单,交易,代码等…提供用于交叉交换或跨货币分析和套利的可选标准化数据开箱即用的统一的一体化API,非常易于集成适用于Node7.6+,Python2和3,PHP5.4+,Web浏览器认证交易所支持的加密货币交易所 ccxt库目前支持以下131个加密货币交易所和交易API,可以在github查看。上面的列表经常更新,新的加密市场,山寨币交换,错误修复,API端点定期引入和添加。有关详细信息,请参阅手册,如果你没有在上面的列表中找到加密货币交易市场和/或想要添加其他交易所,请通过GitHub或通过电子邮件在此处发布问题来发...
用基于 Python 的开发框架 Brownie 部署以太坊智能合约
在本文中,我们将使用Python部署智能合约。这篇文章可能是您走向智能合约和区块链开发的桥梁! 介绍 我希望可以在任何开发场景都尽量用Python。在区块链开发中,常用的是以太坊虚拟机智能合约语言Solidity,它具有许多不错的功能,并且仍然可以使用 Python 进行部署。刚开始使用Solidity时,我使用了Remix(https://remix.ethereum.org/),这是一个强大的Web IDE,可让您进行智能合约可视化。Remix很棒,我现在仍然使用它,但是在单个IDE之外可以实现很多其他功能。后来我开始学习Truffle(https://www.trufflesuite.com/)和HardHat(https://hardhat.org/guides/mainnet-forking.html),它们是用于部署智能合约的Node.js框架。 这些是到目前为止我所见过的主要框架,这些框架都不错,但是我更喜欢Python。所以当我发现Brownie 和web3.py:一个用于部署智能合约的Python框架和一个用于区块链开发的开源协议之后非常兴奋。我们将在本文中同时...
用 Python 和币安 API 构建数字货币交易机器人(一)
交易数字货币或任何其他资产的首要任务是要有目标和策略来实现。在这里,我们不是在谈论交易策略,而只是构建一个简单而功能强大的数字货币交易机器人来应用您的策略。本系列更像是一个数字货币自动交易机器人框架。 我们将使用python 3.9(3.9.2)首先创建项目文件结构。 /exchanges /strategies /models 在这里,“ exchanges”文件夹存储了Exchange API包装器,为您的策略制定策略并为我们将要使用的业务对象建模。 模型 我们将为此项目定义几个业务对象,例如价格,货币类型或订单。首先,让我们从价格开始,将其用于我们随后将要创建的策略。 在我们为业务对象编写通用抽象层之前: ./models/model.pyfrom datetime import datetime class AbstractModel: created: datetime def __init__(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) 然后是我们的第一个Pr...
专注加密货币量化交易 , focus on crypto quant
CCXT:加密货币量化交易神器
CCXT框架 是一个Python/Javascript/PHP的一个交易API框架,对接超过130多个交易所。可用于世界各地的加密货币交易所的连接和交易,以及转账支付处理,可用于存储数据,分析,可视化,指标开发,算法交易,是一个非常容易集成的开箱即用的统一API。 CCXT框架Github地址: https://github.com/ccxt/ccxt 当前功能列表:支持许多交易市场,甚至即将推出的为所有交易提供完整的公共和私人API所有货币,山寨币和标记,价格,订单,交易,代码等…提供用于交叉交换或跨货币分析和套利的可选标准化数据开箱即用的统一的一体化API,非常易于集成适用于Node7.6+,Python2和3,PHP5.4+,Web浏览器认证交易所支持的加密货币交易所 ccxt库目前支持以下131个加密货币交易所和交易API,可以在github查看。上面的列表经常更新,新的加密市场,山寨币交换,错误修复,API端点定期引入和添加。有关详细信息,请参阅手册,如果你没有在上面的列表中找到加密货币交易市场和/或想要添加其他交易所,请通过GitHub或通过电子邮件在此处发布问题来发...
用基于 Python 的开发框架 Brownie 部署以太坊智能合约
在本文中,我们将使用Python部署智能合约。这篇文章可能是您走向智能合约和区块链开发的桥梁! 介绍 我希望可以在任何开发场景都尽量用Python。在区块链开发中,常用的是以太坊虚拟机智能合约语言Solidity,它具有许多不错的功能,并且仍然可以使用 Python 进行部署。刚开始使用Solidity时,我使用了Remix(https://remix.ethereum.org/),这是一个强大的Web IDE,可让您进行智能合约可视化。Remix很棒,我现在仍然使用它,但是在单个IDE之外可以实现很多其他功能。后来我开始学习Truffle(https://www.trufflesuite.com/)和HardHat(https://hardhat.org/guides/mainnet-forking.html),它们是用于部署智能合约的Node.js框架。 这些是到目前为止我所见过的主要框架,这些框架都不错,但是我更喜欢Python。所以当我发现Brownie 和web3.py:一个用于部署智能合约的Python框架和一个用于区块链开发的开源协议之后非常兴奋。我们将在本文中同时...
用 Python 和币安 API 构建数字货币交易机器人(一)
交易数字货币或任何其他资产的首要任务是要有目标和策略来实现。在这里,我们不是在谈论交易策略,而只是构建一个简单而功能强大的数字货币交易机器人来应用您的策略。本系列更像是一个数字货币自动交易机器人框架。 我们将使用python 3.9(3.9.2)首先创建项目文件结构。 /exchanges /strategies /models 在这里,“ exchanges”文件夹存储了Exchange API包装器,为您的策略制定策略并为我们将要使用的业务对象建模。 模型 我们将为此项目定义几个业务对象,例如价格,货币类型或订单。首先,让我们从价格开始,将其用于我们随后将要创建的策略。 在我们为业务对象编写通用抽象层之前: ./models/model.pyfrom datetime import datetime class AbstractModel: created: datetime def __init__(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) 然后是我们的第一个Pr...
专注加密货币量化交易 , focus on crypto quant

Subscribe to quantbang

Subscribe to quantbang
<100 subscribers
<100 subscribers
Share Dialog
Share Dialog

传统的金融科技世界充满了使用户能够制作复杂算法交易模型和系统的工具。而去中心化金融 (DeFi) 也同样为用户和开发人员提供了相同的工具,围绕底层金融协议和工具具有更高的透明度和灵活性,从而催生了 DeFi 量化交易和应用开发。DeFi 开发人员和 DeFi quants 甚至可以利用这些工具的衍生品,并将它们组合成新的服务,以建立在传统金融科技世界中没有的创新金融头寸。DeFi 开发人员的基本工具之一是能够以非托管方式借出和借入加密货币资产。阅读本文前请先查看:\
获取可借资产价值
现在,当我们借款时,我们会被告知我们拥有的以 ETH 表示的资产数量。然而,也许我们想借用一个不同的代币,比如 DAI。如果我们要以 ETH 为抵押借入 DAI,我们首先要得到 ETH -> DAI 的兑换率。
Chainlink 是 DeFi 和智能合约生态系统中获取数据和执行外部计算的标准,也是 Aave 用来获取费率的标准!他们有一个价格 Oracle 部分,描述了如何通过他们的智能合约 API 获取 Chainlink 数据。如果你学会了一般地使用 Chainlink 数据,你可以跨协议使用它,即使他们没有使用 Chainlink,或者没有价格预言机机制!
Chainlink 通过去中心化的预言机网络获取数据,其中多个节点将跨多个 API 和服务的数据聚合到一个去中心化的来源,该来源经过验证并记录在链上供我们使用。我们可以在 data.chain.link 页面或文档上看到当前可用数据提要的列表。如您所知,数据是大多数量化系统、算法交易者和整个 DeFi 生态系统的支柱,因此您要始终确保自己是从去中心化系统中提取的,这样您就可以获得最准确、最可靠和最安全的数据。
此外,如果您不想要某些数据,您可以从任何 API 调用您的智能合约,获得可证明的随机数以及许多其他不同的服务。这些使得智能合约数据安全、可靠和去中心化。
但是让我们回到 Python!
我们有一个名为 get_asset_price 的函数,它从 dai_eth_price_feed 中读取数据,如下所示:
def get_asset_price():
# For mainnet we can just do:
# return Contract(f"{pair}.data.eth").latestAnswer() / 1e8
dai_eth_price_feed = interface.AggregatorV3Interface(
config["networks"][network.show_active()]["dai_eth_price_feed"]
)
latest_price = Web3.fromWei(dai_eth_price_feed.latestRoundData()[1], "ether")
print(f"The DAI/ETH price is {latest_price}")
return float(latest_price)
我们从接口中提取的 Chainlink 合约 AggregatorV3Interface 已存储在我们的配置文件中。在该合约中,我们调用 latestRoundData 函数。
你会注意到我们也不需要为这个做一个交易,这也是一个视图函数!
你会看到通过brownie获得 Chainlink 数据价格的另一种方式是:
from brownie import Contract
print(Contract(f"{pair}.data.eth").latestAnswer() / 1e8)
这是使用 ENS 来获取价格对的地址。ENS 是一种获取智能合约地址并使其可读的方法。例如,您可以执行以下操作:
print(Contract(f"eth-usd.data.eth").latestAnswer() / 1e8)
以美元为单位获取以太坊的最新价格。请注意,ENS 仅适用于主网网络,因此您在运行 brownie 时必须使用 --network mainnet 或 --network mainnet-fork。
将价值转换为借用
现在我们有了抵押品和我们想要借入的资产之间的转换率,我们可以设置一个变量来确定我们想要借入多少。
amount_erc20_to_borrow = (1 / erc20_eth_price) * (borrowable_eth * 0.95)
我们得到 ETH/DAI 价格的倒数,并将其乘以我们可以借入的金额(以 ETH 为单位)。为了安全起见,我们还将其乘以 0.95。然后,我们调用借用函数!
borrow_erc20(lending_pool, amount_erc20_to_borrow, account)
def borrow_erc20(lending_pool, amount, account, erc20_address=None):
erc20_address = (
erc20_address
if erc20_address
else config["networks"][network.show_active()]["aave_dai_token"]
)
# 1 is stable interest rate
# 0 is the referral code
transaction = lending_pool.borrow(
erc20_address,
Web3.toWei(amount, "ether"),
1,
0,
account.address,
{"from": account},
)
transaction.wait(1)
print(f"Congratulations! We have just borrowed {amount}")
借用函数需要几个参数:
•资产的地址(在我们的例子中是 DAI 代币)•我们要借的金额,单位为 wei•interestRateMode,(0, 1, 2: 1 是稳定的,2 是可变的……现在不用担心 0)•推荐码(忽略)•onBehalfOf 值,即谁将承担债务
让我们看一下 Etherscan 上这笔交易的样本,以了解刚刚发生的事情。

按顺序,代币转移的方向是:
•Aave 协议正在铸造一些 aDAI•我们的钱包正在铸造一些 Aave Stable Debt Bearing DAI•我们的钱包获得了一些 DAI
重要说明:Aave 有时会更改其测试网token。通过检查已部署的合约地址,确保您拥有正确的 testnet DAI 地址。并检查官方 json 列表。
这一次,我们得到了一种不同类型的计息代币,一种债务代币。这是我们必须偿还的金额,并且与 aToken 一样,它的价值也会增长。如果你欠更多的债务(用这个债务代币表示),有人可以清算你并拿走你所有的抵押品!所以要警惕你有多少债务。
通过添加新的代币地址,我们可以再次在我们的 MetaNask 中看到借入的资产。我们还可以通过添加债务token地址来查看我们的债务。
这才是真正有趣的地方。现在最简单的卖空方法之一就是出售我们的资产。如果资产价格下跌,我们将不得不偿还比借入的更少的钱。
然而,我越来越担心我会被清算。让我们偿还我们的债务。
偿还我们的债务
我们想弄清楚我们欠了多少,然后偿还!我们可以用这些函数做到这一点:
borrowable_eth, total_debt_eth = get_borrowable_data(lending_pool, account)
amount_erc20_to_repay = (1 / erc20_eth_price) * (total_debt_eth * 0.95)
repay_all(amount_erc20_to_repay, lending_pool, account)
def repay_all(amount, lending_pool, account):
approve_erc20(
Web3.toWei(amount, "ether"),
lending_pool,
config["networks"][network.show_active()]["aave_dai_token"],
account,
)
tx = lending_pool.repay(
config["networks"][network.show_active()]["aave_dai_token"],
Web3.toWei(amount, "ether"),
1,
account.address,
{"from": account},
)
tx.wait(1)
print("Repaid!")
总结
我们已经完成了与 Aave 合作的所有步骤。
•抵押•拿出贷款•偿还贷款
您接下来还可以做一些事情,比如:
•使用 Synthetix 或 Bancor 等协议交易资产•申请闪贷•了解如何质押和参与治理
您还可以学习如何成为智能合约开发人员,在 Solidity 中构建去中心化协议,并发现智能合约的广泛功能。你的旅程才刚刚开始!

传统的金融科技世界充满了使用户能够制作复杂算法交易模型和系统的工具。而去中心化金融 (DeFi) 也同样为用户和开发人员提供了相同的工具,围绕底层金融协议和工具具有更高的透明度和灵活性,从而催生了 DeFi 量化交易和应用开发。DeFi 开发人员和 DeFi quants 甚至可以利用这些工具的衍生品,并将它们组合成新的服务,以建立在传统金融科技世界中没有的创新金融头寸。DeFi 开发人员的基本工具之一是能够以非托管方式借出和借入加密货币资产。阅读本文前请先查看:\
获取可借资产价值
现在,当我们借款时,我们会被告知我们拥有的以 ETH 表示的资产数量。然而,也许我们想借用一个不同的代币,比如 DAI。如果我们要以 ETH 为抵押借入 DAI,我们首先要得到 ETH -> DAI 的兑换率。
Chainlink 是 DeFi 和智能合约生态系统中获取数据和执行外部计算的标准,也是 Aave 用来获取费率的标准!他们有一个价格 Oracle 部分,描述了如何通过他们的智能合约 API 获取 Chainlink 数据。如果你学会了一般地使用 Chainlink 数据,你可以跨协议使用它,即使他们没有使用 Chainlink,或者没有价格预言机机制!
Chainlink 通过去中心化的预言机网络获取数据,其中多个节点将跨多个 API 和服务的数据聚合到一个去中心化的来源,该来源经过验证并记录在链上供我们使用。我们可以在 data.chain.link 页面或文档上看到当前可用数据提要的列表。如您所知,数据是大多数量化系统、算法交易者和整个 DeFi 生态系统的支柱,因此您要始终确保自己是从去中心化系统中提取的,这样您就可以获得最准确、最可靠和最安全的数据。
此外,如果您不想要某些数据,您可以从任何 API 调用您的智能合约,获得可证明的随机数以及许多其他不同的服务。这些使得智能合约数据安全、可靠和去中心化。
但是让我们回到 Python!
我们有一个名为 get_asset_price 的函数,它从 dai_eth_price_feed 中读取数据,如下所示:
def get_asset_price():
# For mainnet we can just do:
# return Contract(f"{pair}.data.eth").latestAnswer() / 1e8
dai_eth_price_feed = interface.AggregatorV3Interface(
config["networks"][network.show_active()]["dai_eth_price_feed"]
)
latest_price = Web3.fromWei(dai_eth_price_feed.latestRoundData()[1], "ether")
print(f"The DAI/ETH price is {latest_price}")
return float(latest_price)
我们从接口中提取的 Chainlink 合约 AggregatorV3Interface 已存储在我们的配置文件中。在该合约中,我们调用 latestRoundData 函数。
你会注意到我们也不需要为这个做一个交易,这也是一个视图函数!
你会看到通过brownie获得 Chainlink 数据价格的另一种方式是:
from brownie import Contract
print(Contract(f"{pair}.data.eth").latestAnswer() / 1e8)
这是使用 ENS 来获取价格对的地址。ENS 是一种获取智能合约地址并使其可读的方法。例如,您可以执行以下操作:
print(Contract(f"eth-usd.data.eth").latestAnswer() / 1e8)
以美元为单位获取以太坊的最新价格。请注意,ENS 仅适用于主网网络,因此您在运行 brownie 时必须使用 --network mainnet 或 --network mainnet-fork。
将价值转换为借用
现在我们有了抵押品和我们想要借入的资产之间的转换率,我们可以设置一个变量来确定我们想要借入多少。
amount_erc20_to_borrow = (1 / erc20_eth_price) * (borrowable_eth * 0.95)
我们得到 ETH/DAI 价格的倒数,并将其乘以我们可以借入的金额(以 ETH 为单位)。为了安全起见,我们还将其乘以 0.95。然后,我们调用借用函数!
borrow_erc20(lending_pool, amount_erc20_to_borrow, account)
def borrow_erc20(lending_pool, amount, account, erc20_address=None):
erc20_address = (
erc20_address
if erc20_address
else config["networks"][network.show_active()]["aave_dai_token"]
)
# 1 is stable interest rate
# 0 is the referral code
transaction = lending_pool.borrow(
erc20_address,
Web3.toWei(amount, "ether"),
1,
0,
account.address,
{"from": account},
)
transaction.wait(1)
print(f"Congratulations! We have just borrowed {amount}")
借用函数需要几个参数:
•资产的地址(在我们的例子中是 DAI 代币)•我们要借的金额,单位为 wei•interestRateMode,(0, 1, 2: 1 是稳定的,2 是可变的……现在不用担心 0)•推荐码(忽略)•onBehalfOf 值,即谁将承担债务
让我们看一下 Etherscan 上这笔交易的样本,以了解刚刚发生的事情。

按顺序,代币转移的方向是:
•Aave 协议正在铸造一些 aDAI•我们的钱包正在铸造一些 Aave Stable Debt Bearing DAI•我们的钱包获得了一些 DAI
重要说明:Aave 有时会更改其测试网token。通过检查已部署的合约地址,确保您拥有正确的 testnet DAI 地址。并检查官方 json 列表。
这一次,我们得到了一种不同类型的计息代币,一种债务代币。这是我们必须偿还的金额,并且与 aToken 一样,它的价值也会增长。如果你欠更多的债务(用这个债务代币表示),有人可以清算你并拿走你所有的抵押品!所以要警惕你有多少债务。
通过添加新的代币地址,我们可以再次在我们的 MetaNask 中看到借入的资产。我们还可以通过添加债务token地址来查看我们的债务。
这才是真正有趣的地方。现在最简单的卖空方法之一就是出售我们的资产。如果资产价格下跌,我们将不得不偿还比借入的更少的钱。
然而,我越来越担心我会被清算。让我们偿还我们的债务。
偿还我们的债务
我们想弄清楚我们欠了多少,然后偿还!我们可以用这些函数做到这一点:
borrowable_eth, total_debt_eth = get_borrowable_data(lending_pool, account)
amount_erc20_to_repay = (1 / erc20_eth_price) * (total_debt_eth * 0.95)
repay_all(amount_erc20_to_repay, lending_pool, account)
def repay_all(amount, lending_pool, account):
approve_erc20(
Web3.toWei(amount, "ether"),
lending_pool,
config["networks"][network.show_active()]["aave_dai_token"],
account,
)
tx = lending_pool.repay(
config["networks"][network.show_active()]["aave_dai_token"],
Web3.toWei(amount, "ether"),
1,
account.address,
{"from": account},
)
tx.wait(1)
print("Repaid!")
总结
我们已经完成了与 Aave 合作的所有步骤。
•抵押•拿出贷款•偿还贷款
您接下来还可以做一些事情,比如:
•使用 Synthetix 或 Bancor 等协议交易资产•申请闪贷•了解如何质押和参与治理
您还可以学习如何成为智能合约开发人员,在 Solidity 中构建去中心化协议,并发现智能合约的广泛功能。你的旅程才刚刚开始!
No activity yet