Skip to main content

量化交易标准数据源

项目描述

PyGenphi

DeFi 研究的标准数据源

使用 PyGenphi 创建一个新的 Python 项目

mkdir PyGenphiDemo
cd PyGenphiDemo

git init

pipenv install --dev
# activate venv
pipenv shell
# install PyGenphi
pipenv install PyGenphi==0.10.0

注意:使用较低版本的 PyGenphipipenv install PyGenphi==0.10.0在现有PyGenphiDemo目录中运行命令将自动将 PyGenphi 升级到 v0.10.0

IPython(Jupter/anaconda3) 用户的重要提示:

您可能会收到如下错误报告:

~/opt/anaconda3/lib/python3.7/asyncio/base_events.py in run_forever(self)
    519         self._check_closed()
    520         if self.is_running():
--> 521             raise RuntimeError('This event loop is already running')
    522         if events._get_running_loop() is not None:
    523             raise RuntimeError(

RuntimeError: This event loop is already running

要修复此错误,您可能需要nest_asyncio使用以下命令安装库:

pipenv install nest_asyncio

然后在 PyGenphi lib 之前使用它:

import nest_asyncio
from PyGenphi import *

nest_asyncio.apply()
if __name__ == '__main__':
    
    data = Client().get(
        Locator.BINANCE,        # Data location
        Category.KLINE_1Min,    # Data category
        "ETHUSDT",              # symbol or token, default value="ALL"
        "2020-12-01",           # start date of data, default value="ALL"
        "2020-12-10",            # end date of data, default value="ALL"
        "1"                     # request id used to generate cache file, default value is a random uuid
    )

示例代码:

烛台图数据获取

from PyGenphi import *
import uuid

if __name__ == '__main__':
    
    data = Client().get(
        Locator.BINANCE,        # Data location
        Category.KLINE_1Min,    # Data category
        "ETHUSDT",              # symbol or token, default value="ALL"
        "2020-12-01",           # start date of data, default value="ALL"
        "2020-12-10",            # end date of data, default value="ALL"
        "1"                     # request id used to generate cache file, default value is a random uuid
    )
    
    for line in data:
        print(line)

支持烛台图表的符号列表:

  • AAVEUSDT
  • ADAUSDT
  • ATOMUSDT
  • BCHUSDT
  • BNBUSDT
  • 比特币USDT
  • 达世币
  • DOGEUSDT
  • DOTUSDT
  • EOSUSDT
  • ETCUSDT
  • ETHUSDT
  • FILUSDT
  • LINKUSDT
  • LTCUSDT
  • MATICUSDT
  • NEOUSDT
  • ONEUSDT
  • QTUMUSDT
  • SHIBUSDT
  • SNXUSDT
  • SOLUSDT
  • 寿司USDT
  • TRXUSDT
  • UNIUSDT
  • VETUSDT
  • XLMUSDT
  • XRPUSDT
  • YFIUSDT
  • ZECUSDT

跨链桥传输数据获取

from PyGenphi import *

if __name__ == '__main__':

    data = Client().get(
        Locator.ANYSWAP, 
        Category.CROSSCHAIN_TRANSFER,
        "ALL", 
        "2020-12-01", 
        "2020-12-02"
    )
    for line in data:
        print(line)
  • 支持的位置:Locator.ANYSWAP
  • 数据跨度:2020-08-17 ~ 2021-06-23(可能随时更改)

数据服务 API

注意:类的构造函数Client现在支持可选参数scheme host port api_keyClient()将连接到带有前缀的 URL http://127.0.0.1:80/Client(scheme='https', host='192.168.1.1', port=8081, api_key='<your_api_key>')并将连接到带有前缀的 URLhttps://192.168.1.1:8081/和 HTTP 头APIKey进行身份验证

重要提示:对于 PyGenphi 0.8.0+,所有金额相关字段的值不再由 PyGenphi 从类型解析为strDecimalDecimal(<amount>)根据需要执行此操作(decimal带代码的导入库from decimal import *)。

常用请求参数

枚举Locator

  • Locator.BSC
  • Locator.ANYSWAP
  • Locator.BINANCE

枚举ArbitrageType

  • ArbitrageType.ALL_ARBITRAGE
  • ArbitrageType.TWIN_ARBITRAGE
  • ArbitrageType.TRIANGLE_ARBITRAGE
  • ArbitrageType.MULTIPLE_ARBITRAGE
  • ArbitrageType.NO_ARBITRAGE
  • ArbitrageType.UNKNOWN

公共响应数据结构

交易

场地 类型 意义 笔记
locator 字符串 区块链网络
transactionHash 字符串 交易哈希
transactionIndex 整数 交易索引(块内)
nonce 整数 发件人在此之前进行的交易数量
transactionReceiptStatus 布尔 交易收据状态,True成功,False失败
errCode 字符串 交易失败时的错误代码 尚未实施
blockNumber 整数 块号
blockHash 字符串 块哈希
blockTimestamp 整数 Unix 时间(秒)
fromAddress 字符串 从地址
toAddress 字符串 讲话
transactionValue 字符串 交易价值(金额)
gasUsed 整数 使用的气体
gasPrice 整数 汽油价格
input 字符串 输入参数
logs 列表 交易收据日志
logs[n] 听写 交易收据日志 event log
labels 列表 当前交易的标签 尚未实施
labels[n] 字符串 当前交易的标签 尚未实施

事件簿

场地 类型 意义 笔记
locator 字符串 区块链网络
transactionHash 字符串 交易哈希
transactionIndex 整数 交易索引(块内)
blockNumber 整数 块号
blockHash 字符串 块哈希
blockTimestamp 整数 Unix 时间(秒)
logIndex 整数 日志索引(块)
address 字符串 生成当前日志的地址
topic0 字符串 当前日志的方法签名
topic1 字符串 当前日志的索引参数 1
topic2 字符串 当前日志的索引参数 2
topic3 字符串 当前日志的索引参数 3
data 字符串 更多参数数据
dataParsed 听写 方法签名解析的主题和数据 event log parsed
category 字符串 方法名称,如果解析,否则与 topic0 相同
removed 布尔 True:日志有效,False:日志因链重组而被删除
事件日志解析
转移
场地 类型 意义 笔记
category 字符串 值为"transfer"
tokenAddress 字符串 令牌地址
token 听写 令牌信息 token下文
senderAddress 字符串 发件人地址
receiverAddress 字符串 收货人地址
tokenAmount 字符串 转账金额
交换
场地 类型 意义 笔记
category 字符串 值为"swap"
lpAddress 字符串 流动对合约地址
lp 听写 液体对信息 lp下文
token0 听写 令牌0信息 token下文
token1 听写 令牌1信息 token下文
fromAddress 字符串 发件人地址
toAddress 字符串 收货人地址
amount0In 字符串 输入token0数量
amount1In 字符串 输入token1的数量
amount0Out 字符串 代币0输出量
amount1Out 字符串 token1的输出量
同步
场地 类型 意义 笔记
category 字符串 值为"sync"
lpAddress 字符串 流动对合约地址
lp 听写 液体对信息 lp下文
token0 听写 令牌0信息 token下文
token1 听写 令牌1信息 token下文
reserve0 字符串 代币0储备
reserve1 字符串 代币1的储备
LP
场地 类型 意义 笔记
address 字符串 液对地址
minLiquidity 字符串 液体对的最小流动性
decimals 整数 液体对的小数
factory 字符串 液对厂地址
name 字符串 液体对的名称
symbol 字符串 液体对的符号
token0 字符串 流动货币对的token0地址
token1 字符串 液体对token1的地址
令牌
场地 类型 例子 意义 笔记
address 字符串 "0xe9e7cea3dedca5984780bafc599bd69add087d56" “0x……”
symbol 字符串 "BUSD" 象征符号
decimals 整数 18 令牌的小数
name 字符串 "BUSD Token " 令牌名称

client.get_transaction_by_hash

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_transaction_by_hash(tx_hash="0x97896e5b40b4ef51ec0c328a47388334e5818d2bd004bbd751da35d6b22a410e")
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
tx_hash str 交易哈希

结果

响应正文是一个 JSON 字符串,更多细节:

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 听写 交易,None如果交易不存在 transaction[通用响应数据结构][]

client.get_transactions_by_address

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_transactions_by_address(address="0x6d4851eaf458d0fdae1599b1241915f878c0f539")
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
address str
mode AddressMode × AddressMode.ALL 其他值:AddressMode.FROM,AddressMode.TO
first bool × False
last bool × False
block_number_start int × None
block_number_end int × None
block_timestamp_start int × None
block_timestamp_end int × None

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 交易清单
result[n] 听写 交易 transaction[通用响应数据结构][]

client.get_transactions_by_block_number

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_transactions_by_block_number(block_number=9000000)
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
block_number int

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 交易清单
result[n] 听写 交易 transaction[通用响应数据结构][]

client.get_token_transfers_by_address

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_token_transfers_by_address(address="0x06dbc4fe79e2541b03fe4731b2579c0b7f46f099", last=True)
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
address str
mode AddressMode × AddressMode.ALL 其他值:AddressMode.FROM,AddressMode.TO
first bool × False
last bool × False
block_number_start int × None
block_number_end int × None
block_timestamp_start int × None
block_timestamp_end int × None

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 事件日志列表
result[n] 听写 事件簿 event log[通用响应数据结构][]

client.get_transfer

注意:此 API 需要参数api_keyofClient

恶魔

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_transfer(token_address="0xe9e7cea3dedca5984780bafc599bd69add087d56", first=True)
    print(result)

参数

查询参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
token_address str
from_or_to_address str
mode AddressMode × AddressMode.ALL 其他值:AddressMode.FROM,AddressMode.TO
first bool × False
block_number_start int × None
block_number_end int × None
block_timestamp_start int × None
block_timestamp_end int × None
page int × 0
page_size int × 1000 范围:[1, 1000]

结果

场地 类型 意义 笔记
domain str 当前 API 的 URI
id str 客户编号
result list 传输事件日志列表
result[n] dict 传输事件日志
result[n].category str
result[n].chain str
result[n].transactionHash str
result[n].transactionIndex int
result[n].blockNumber int
result[n].blockHash str
result[n].blockTimestamp int
result[n].logIndex int
result[n].tokenAddress str
result[n].token dict token[通用响应数据结构][]
result[n].senderAddress str
result[n].receiverAddress str
result[n].tokenAmount str

client.get_swap

注意:此 API 需要参数api_keyofClient

恶魔

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_swap(lp_address="0x7d3343bb04d897e928856eb287d2e8e1410ee333", block_number_start=10282384, block_number_end=10282384)
    print(result)

参数

查询参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
lp_address str
block_number_start int × None
block_number_end int × None
block_timestamp_start int × None
block_timestamp_end int × None
page int × 0
page_size int × 1000 范围:[1, 1000]

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 交换事件日志列表
result[n] 听写 交换事件日志
result[n].category 字符串
result[n].chain 字符串
result[n].transactionHash 字符串
result[n].transactionIndex 整数
result[n].blockNumber 整数
result[n].blockHash 字符串
result[n].blockTimestamp 整数
result[n].logIndex 整数
result[n].lpAddress 字符串
result[n].lp 目的 lp[通用响应数据结构][]
result[n].token0 目的 token[通用响应数据结构][]
result[n].token1 目的 token[通用响应数据结构][]
result[n].fromAddress 字符串
result[n].toAddress 字符串
result[n].amount0In 字符串 输入token0数量
result[n].amount1In 字符串 输入token1的数量
result[n].amount0Out 字符串 代币0输出量
result[n].amount1Out 字符串 token1的输出量

client.get_tick

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_tick()
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
lp_addrs str × None 多地址拆分,
block_number_start int × None
block_number_end int × None
block_timestamp_start int × None
block_timestamp_end int × None
page int × 0
page_size int × 100 范围:[1, 100]

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 滴答清单
result[n] 听写 打钩
result[n].blockNumber 整数
result[n].logIndex 整数
result[n].transactionIndex 整数
result[n].transactionHash 字符串
result[n].blockTimestamp 整数
result[n].localTimestamp 整数
result[n].lp 听写
result[n].lp.address 字符串
result[n].lp.minLiquidity 字符串
result[n].lp.decimals 整数
result[n].lp.factory 字符串
result[n].lp.name 字符串
result[n].lp.symbol 字符串
result[n].lp.totalSupply 字符串
result[n].token0 听写
result[n].token0.address 字符串
result[n].token0.symbol 字符串
result[n].token0.decimals 整数
result[n].token0.name 字符串
result[n].token0.totalSupply 字符串
result[n].token1 听写
result[n].token1.address 字符串
result[n].token1.symbol 字符串
result[n].token1.decimals 整数
result[n].token1.name 字符串
result[n].token1.totalSupply 字符串
result[n].reserve0 字符串
result[n].reserve1 字符串
result[n].lpAddress 字符串

client.get_previoustick

注意:此 API 需要参数api_keyofClient

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_previoustick(lp_addr="<lp_addr>", block_number_end=7900000, log_index=297)
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
lp_addr str
block_number_end int
block_number_start int × None
log_index int
block_timestamp_start int × None
block_timestamp_end int × None

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 听写 打钩
result.blockNumber 整数
result.logIndex 整数
result.transactionIndex 整数
result.transactionHash 字符串
result.blockTimestamp 整数
result.taggedMillis 整数
result.lp 听写
result.lp.address 字符串
result.lp.minLiquidity 字符串
result.lp.decimals 整数
result.lp.factory 字符串
result.lp.name 字符串
result.lp.symbol 字符串
result.token0 听写
result.token0.address 字符串
result.token0.symbol 字符串
result.token0.decimals 整数
result.token0.name 字符串
result.token1 听写
result.token1.address 字符串
result.token1.symbol 字符串
result.token1.decimals 整数
result.token1.name 字符串
result.reserve0 字符串
result.reserve1 字符串
result.lpAddress 字符串

client.get_factory

from PyGenphi import *

if __name__ == '__main__':

    client = Client()
    result = client.get_factory()
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
exchange_name str ×
page int × 0
page_size int × 1000 范围:[1, 1000]

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 工厂清单
result[n] 听写 工厂信息
result[n].chain 字符串
result[n].exchangeName 字符串
result[n].factoryAddress 字符串
result[n].startDate 整数 开始工厂的 Unix 时间(以秒为单位)
result[n].endDate 整数 结束工厂的 Unix 时间(秒)
result[n].isOpenSourced 布尔

client.get_tag_lp

注意:此 API 需要参数api_keyofClient

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_tag_lp()
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
lp_address str ×
is_secure bool ×
start_time int × LP 使用时间(以毫秒为单位)
end_time int × LP 使用时间(以毫秒为单位)
page int × 0
page_size int × 100 范围:[1, 100]

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 标记 LP 信息列表
result[n] 听写 标记 LP 信息
result[n].chain 字符串 标签LP的区块链
result[n].name 字符串 标记 LP 名称
result[n].symbol 字符串 标记 LP 符号
result[n].decimals 整数
result[n].token0Address 字符串
result[n].token1Address 字符串
result[n].minLiquidity 字符串
result[n].isSecure 布尔
result[n].flashLoanSupported 布尔 是否支持闪贷
result[n].isOpenSourced 布尔 当前合约是否开源
result[n].callee 字符串 FlashLoan的被调用者
result[n].feeRate 字符串
result[n].totalSupply 字符串
result[n].token0 听写
result[n].token0.address 字符串
result[n].token0.name 字符串
result[n].token0.symbol 字符串
result[n].token0.decimals 整数
result[n].token0.totalSupply 字符串
result[n].token1 听写
result[n].token1.address 字符串
result[n].token1.name 字符串
result[n].token1.symbol 字符串
result[n].token1.decimals 整数
result[n].token1.totalSupply 字符串
result[n].lpAddress 字符串
result[n].factory 字符串

注意:如果尚未计算费率,则result[n].feeRate可能是这样。None

client.get_tag_lp_pairs

注意:此 API 需要参数api_keyofClient

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_tag_lp_pairs()
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
org_id str ×
arbitrage_type ArbitrageType × None ArbitrageType见[常用请求参数][]中的枚举
start_time int × LP 对使用时间(以毫秒为单位)
end_time int × LP 对使用时间(以毫秒为单位)
page int × 0
page_size int × 100 范围:[1, 100]

结果

场地 类型 意义 笔记
domain 字符串 当前 API 的 URI
id 字符串 客户编号
result 列表 标记 LP Pair 信息列表
result[n] 听写 标记 LP 对信息
result[n].chain 字符串 标签LP的区块链
result[n].orgID 字符串
result[n].facotryCombo 字符串
result[n].decimals 整数
result[n].arbitrageType 字符串
result[n].createTime 整数
result[n].updateTime 整数
result[n].lpCombo 字符串

client.get_tag_transaction

注意:此 API 需要参数api_keyofClient

演示

from PyGenphi import *

if __name__ == '__main__':

    client = Client(api_key="<your-api-key>")
    result = client.get_tag_transaction()
    print(result)

参数

参数 类型 必需的 默认 笔记
client_id str × _
locator Locator × Locator.BSC 区块链
from_address str × None
to_address str × None
arbitrage_type ArbitrageType × None ArbitrageType见[常用请求参数][]中的枚举
taxed