《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据

《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据返回的结果是 撤销指定订单结果 info client oid code 0 error code amp

欢迎大家来到IT世界,在知识的湖畔探索吧!

CCXT是一个开源的数字货币交易框架,它封装了全世界绝大多数的交易所API. 我们通过登录chatgpt,使用gpt编写代码,获取数字货币的行情数据

比如:利用ccxt从OKY交易所获取比特币行情数据

获取结果如下,以后进行分析,如何运行起来。

《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据

后面所有的交易命令都可以通过会话的方式获取。这样,不需要学习代码也可以从事数字货币交易了。

安装ccxt框架

在windows或者linux上安装ccxt,安装命令如下:

pip install ccxt -i https://pypi.tuna.tsinghua.edu.cn/simple

OKX申请keys使用

登录OKX界面,在打开个人头像,选择API申请,申请界面如下:

《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据

《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据

然后选择申请v5 api,进入如下的申请界面。自定义用户名和密码,进行校验,选择交易功能,得到keys. 得到结果后,最好密码和kyes的信息保存起来,不能让他人套用,带来损失。

通过ccxt登录OKX交易所

首先连接到OKX,输入你的keys,代码如下:

import ccxt

exchange = ccxt.okex({

‘apiKey’: ’66e9e88-f6688′,

‘secret’: ”,

‘password’: ’66*’,

‘timeout’: 30000,

‘enableRateLimit’: True,

})

这里我们只需要关心几个问题:

1)import ccxt其实就是导入ccxt

2)exchange就是初始化一个交易所,其他交易的连接方式如下:
如果我们是使用OKEx交易所,那就是exchange = ccxt.okex()
如果是使用币安交易所:exchange = ccxt.binance()
如果是使用火币交易所:exchange = huobipro()

3)比如OKY交易所初始化的信息里:

apiKey就是我门在交易所申请的api的api key,字符串格式

secret就是secret key,字符串格式

password是OKEx交易所才有的passphrase,其他交易所不需要填这个。字符串格式。

获取OKY交易所数字币的行情

在OKY交易所,获取orderbook盘口深度数据,第一个参数symbol填上交易对名称,第二个参数limit是指定获取多少档深度数据。比如我们需要获取比特币的行情,核心代码如下。
orderbook = exchange.fetch_order_book(symbol=”BTC/USDT”, limit=5).

1)获取获取”BTC/USDT”交易对信息

获取”BTC/USDT”交易对数据的完整代码如下:

#获取最新价格数据

ticker = exchange.fetch_ticker(symbol=”BTC/USDT”)

print(“ticker:”, ticker)

#如果要从ticker数据中取出最新的价格,可以通过字典的键去查找它的值,因为返回的数据是字典格式:

last = ticker[“last”]

print(“最新价:”, last)

对应的ticker数据如下:

ticker: {‘symbol’: ‘BTC/USDT’,

‘timestamp’: 04,

‘datetime’: ‘2023-03-26T03:06:19.804Z’,

‘high’: 27792.8,

‘low’: 27152.8,

‘bid’: 27580.2,

‘bidVolume’: 0.00,

‘ask’: 27580.3,

‘askVolume’: 0.,

‘vwap’: 27485.6,

‘open’: 27610.8, ‘close’: 27580.2,

‘last’: 27580.2,

‘previousClose’: None,

‘change’: -30.6,

‘percentage’: -0.4087,

‘average’: 27595.5,

‘baseVolume’: 5531.,

‘quoteVolume’: .,

‘info’: {‘instType’: ‘SPOT’, ‘instId’: ‘BTC-USDT’, ‘last’: ‘27580.2’, ‘lastSz’: ‘0.003’, ‘askPx’: ‘27580.3’, ‘askSz’: ‘0.’, ‘bidPx’: ‘27580.2’, ‘bidSz’: ‘0.00’, ‘open24h’: ‘27610.8’, ‘high24h’: ‘27792.8’, ‘low24h’: ‘27152.8’, ‘volCcy24h’: ‘.’, ‘vol24h’: ‘5531.’, ‘ts’: ’04’, ‘sodUtc0’: ‘27461.8’, ‘sodUtc8’: ‘27648.2’}}

最新价: 27580.2

具体数据的结果描述如下:

行情的数据结构如下:

{

‘symbol’: string symbol of the market (‘BTC/USD’, ‘ETH/BTC’, …)

‘info’: { the original non-modified unparsed reply from exchange API },

‘timestamp’: int (64-bit Unix Timestamp in milliseconds since Epoch 1 Jan 1970)

‘datetime’: ISO8601 datetime string with milliseconds

‘high’: float, // highest price

‘low’: float, // lowest price

‘bid’: float, // current best bid (buy) price

‘bidVolume’: float, // current best bid (buy) amount (may be missing or undefined)

‘ask’: float, // current best ask (sell) price

‘askVolume’: float, // current best ask (sell) amount (may be missing or undefined)

‘vwap’: float, // volume weighed average price

‘open’: float, // opening price

‘close’: float, // price of last trade (closing price for current period)

‘last’: float, // same as `close`, duplicated for convenience

‘previousClose’: float, // closing price for the previous period

‘change’: float, // absolute change, `last – open`

‘percentage’: float, // relative change, `(change/open) * 100`

‘average’: float, // average price, `(last + open) / 2`

‘baseVolume’: float, // volume of base currency traded for last 24 hours

‘quoteVolume’: float, // volume of quote currency traded for last 24 hours

}

  1. 获取最近30天的交易数据

# 定义交易对

symbol = ‘BTC/USDT’

# 获取最近 30 条 K 线数据

klines = exchange.fetch_ohlcv(symbol, ‘1d’, limit=30)

# 打印 K 线数据

for kline in klines:

print(kline)

BTC/USDT最近30天的行情结果如下:

[00, 23190.2, 23217.8, 22729.4, 23157.2, 5019.0]

[00, 23157.3, 23686.7, 23060.7, 23557.4, 4810.]

[00, 23552.7, 23891.2, 23101.0, 23491.2, 8356.]

[00, 23491.2, 23600.0, 23025.5, 23136.0, 4699.0]

[00, 23143.1, 24009.0, 23009.7, 23632.4, 8356.]

[00, 23632.0, 23792.7, 23181.5, 23466.0, 5511.]

[00, 23465.9, 23472.9, 21898.0, 22354.5, 17156.0]

[00, 22354.4, 22403.8, 22164.5, 22349.7, 2958.]

[00, 22349.6, 22666.4, 22185.5, 22427.6, 4206.]

[00, 22427.6, 22598.0, 22261.3, 22409.2, 5956.]

[00, 22409.2, 22553.3, 21934.6, 22201.5, 8308.]

[00, 22201.5, 22287.0, 21570.6, 21706.7, 9010.]

[00, 21706.8, 21830.0, 20037.0, 20367.2, 20102.0]

[00, 20364.8, 20368.3, 19529.7, 20152.6, 29477.]

[00, 20152.6, 20688.9, 19769.1, 20454.7, 21906.]

[00, 20454.7, 22160.0, 20263.2, 21995.2, 16535.]

[00, 21995.3, 24509.3, 21820.7, 24116.0, 40397.]

[00, 24116.1, 26424.2, 23957.5, 24676.0, 46895.]

[00, 24675.2, 25227.1, 23873.0, 24279.9, 26008.]

[00, 24279.9, 25179.5, 24125.2, 25005.4, 18077.]

[00, 25002.1, 27768.1, 24894.0, 27395.6, 30760.0]

[00, 27394.5, 27713.8, 26565.5, 26905.0, 15656.]

[00, 26905.0, 28400.3, 26825.6, 27966.6, 14606.]

[00, 27966.3, 28490.0, 27133.4, 27718.5, 15769.]

[00, 27716.5, 28448.8, 27300.1, 28108.8, 12272.]

[00, 28104.4, 28890.0, 26603.6, 27249.6, 23810.]

[00, 27249.7, 28775.4, 27114.3, 28293.7, 18433.]

[00, 28295.2, 28375.0, 26976.8, 27452.4, 17120.]

[00, 27452.4, 27792.8, 27152.8, 27462.4, 5694.]

[00, 27461.8, 27648.0, 27413.3, 27586.0, 487.]

3)获取账号内数字币资产

# 获取数字币资产

balance = exchange.fetch_balance()

print(“balance:”, balance)

返回的信息是字典格式,资产数据如下:

balance: {‘info’: {‘code’: ‘0’, ‘data’: [{‘adjEq’: ”, ‘details’: [{‘availBal’: ‘0.’, ‘availEq’: ‘0.’, ‘cashBal’: ‘0.’, ‘ccy’: ‘TON’, ‘crossLiab’: ”, ‘disEq’: ‘0.’, ‘eq’: ‘0.’, ‘eqUsd’: ‘0.’, ‘fixedBal’: ‘0’, ‘frozenBal’: ‘0’, ‘interest’: ”, ‘isoEq’: ‘0’, ‘isoLiab’: ”, ‘isoUpl’: ‘0’, ‘liab’: ”, ‘maxLoan’: ”, ‘mgnRatio’: ”, ‘notionalLever’: ‘0’, ‘ordFrozen’: ‘0’, ‘spotInUseAmt’: ”, ‘stgyEq’: ‘0’, ‘twap’: ‘0’, ‘uTime’: ’13’,

。。。。。。}}

特别注意:

有些交易所可能不会返回完整的余额信息。许多交易所不会返回你的空账户或者未用的账户, 这种情况下在返回的余额结构中可能会缺少某些货币的信息。

4)下单交易

限价委托,symbol是币对名称,amount是下单数量,price是下单价格。限价委托就是以指定的价格挂单。
result = exchange.create_limit_buy_order(symbol=”BTC/USDT”, amount=1, price=1)
print(“限价买入委托单结果:”, result)
如上是去下一个限价买入订单,下单返回的结果是:
限价买入委托单结果:

{‘info’: {‘client_oid’: ”, ‘code’: ‘0’, ‘error_code’: ‘0’, ‘error_message’: ”, ‘message’: ”, ‘order_id’: ‘6’, ‘result’: True}, ‘id’: ‘77088’, ‘clientOrderId’: None, ‘timestamp’: None, ‘datetime’: None, ‘lastTradeTimestamp’: None, ‘symbol’: ‘BTC/USDT’, ‘type’: ‘limit’, ‘timeInForce’: None, ‘postOnly’: None, ‘side’: ‘buy’, ‘price’: None, ‘stopPrice’: None, ‘average’: None, ‘cost’: None, ‘amount’: None, ‘filled’: None, ‘remaining’: None, ‘status’: None, ‘fee’: None, ‘trades’: None}

其中有一个数据是order_id,就是这笔订单的订单编号,我们可以将它取出来:

order_id = result[“info”][“order_id”]

# 得到这笔订单的编号是:6

同样道理,创建限价卖出委托是:

result = exchange.create_limit_sell_order(symbol=”BTC/USDT”, amount=1, price=1)

print(“限价卖出委托单结果:”, result)

#市价委托 市价委托就是为了尽快成交,所以交易所会用当时有效的最优价格来完成你的市价单。
result = exchange.create_market_buy_order(symbol=”BTC/USDT”, amount=1)
print(“市价买入委托单结果:”, result)

result = exchange.create_market_sell_order(symbol=”BTC/USDT”, amount=1)
print(“市价卖出委托单结果:”, result)
#市价委托订单是不需要填价格这个参数的。

5)查询指定订单

我们可以通过订单编号去查询一笔订单的状态:

order = exchange.fetch_order(id=“6*”, symbol=“BTC/USDT”)print(“order:”, order)

我们这里查询了一下先前创建的那个限价订单,返回的订单信息是:

order: {‘info’: {‘client_oid’: ”, ‘created_at’: ‘2021-04-30T16:23:42.502Z’, ‘fee’: ”, ‘fee_currency’: ”, ‘filled_notional’: ‘0’, ‘filled_size’: ‘0’, ‘funds’: ”, ‘instrument_id’: ‘BTC-USDT’, ‘notional’: ”, ‘order_id’: ‘6’, ‘order_type’: ‘0’, ‘price’: ‘1’, ‘price_avg’: ‘0’, ‘product_id’: ‘BTC-USDT’, ‘rebate’: ”, ‘rebate_currency’: ”, ‘side’: ‘buy’, ‘size’: ‘1’, ‘state’: ‘0’, ‘status’: ‘open’, ‘timestamp’: ‘2021-04-30T16:23:42.502Z’, ‘type’: ‘limit 。。。。}

其中有一些数据,当然,我们这个限价单并没有实际成交,所以有些数据是空值:

created_at: 订单创建时间

fee: 手续费用,按币种比如BTC计算的

fee_currency:按基础货币如USDT计算的手续费用

filled_size: 已成交数量

price: 委托价格

side: 订单方向

size: 订单数量

type: 订单是限价单还是市价单

price_avg: 成交均价

6)撤销未完成的订单

我们撤销一下之前创建的那个限价订单:

result = exchange.cancel_order(id=“6”, symbol=“BTC/USDT”)

print(“撤销指定订单结果:”, result)

返回的结果是:

撤销指定订单结果:

{‘info’: {‘client_oid’: ”, ‘code’: ‘0’, ‘error_code’: ‘0’, ‘error_message’: ”, ‘message’: ”, ‘order_id’: 6, ‘result’: True}, ‘id’: ‘6’, ‘clientOrderId’: None, ‘timestamp’: None, ‘datetime’: None, ‘lastTradeTimestamp’: None, ‘symbol’: ‘BTC/USDT’, ‘type’: None, ‘timeInForce’: None, ‘postOnly’: None, ‘side’: None, ‘price’: None, ‘stopPrice’: None, ‘average’: None, ‘cost’: None, ‘amount’: None, ‘filled’: None, ‘remaining’: None, ‘status’: None, ‘fee’: None, ‘trades’: None}

我们可以看到,结果里有一个info信息,其他的方法返回的结果也是这样,这个其实是ccxt统一处理过的,在info这个字典之后的,其实是交易所返回的原始信息。

info这个字典里有一个信息是result,我们这里是True,说明撤销订单成功了。

如果这个订单已经成交,去撤销就会失败,那这个result就会是Fasle,与此同时,error_message里会包含具体的错误信息,就是说因为什么原因导致撤单失败的。

欢迎您阅读《跟我学习AI量化投资》的作品!

欢迎加微信进行交流,谢谢!

《跟我学习AI量化投资》通过chatgpt利用ccxt获取比特币行情数据

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/96708.html

(0)
上一篇 2024年 12月 12日 下午7:23
下一篇 2024年 12月 12日 下午7:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信