自动交易 | ccxt库的使用

  • 卡卡
  • 更新于 2024-09-29 14:17
  • 阅读 1505

ccxt,全称CryptoCurrencyeXchangeTrading,是一个用于与加密货币交易所API进行交互的库。它支持多种交易所(如Binance、Okx、Coinbase等),可以方便地获取市场数据、查询账户信息并执行交易等。

0x00:介绍

ccxt,全称 CryptoCurrency eXchange Trading,是一个用于与加密货币交易所 API 进行交互的库。它支持多种交易所(如 Binance、Okx、Coinbase等),可以方便地获取市场数据、查询账户信息并执行交易等。ccxt库支持多种语言,如JavaScript、Python、PHP、C#,本文将使用Python进行演示。

项目地址:https://github.com/ccxt/ccxt

使用文档:https://docs.ccxt.com/

<br>

0x01:安装

确保安装了Python。

ccxt库的安装:

pip install ccxt

<br>

0x02:基础使用

在ccxt的操作中,根据权限可以分为两种操作,一种操作是需要可以直接进行的,另一种则需要API key。

public API:可以实现大众的操作,不涉及到个人的。

import ccxt   # 导入ccxt库
print(ccxt.exchanges)  # 输出ccxt支持的所有交易所

exchange = ccxt.binance()  # 创建Binance交易所实例
markets = exchange.load_markets()  # 获取Binance所有交易对信息
print(markets)  # 打印交易对信息

ticker = exchange.fetch_ticker('BTC/USDT')  # 获取 BTC/USDT 的最新市场数据
print(ticker)  # 打印价格信息

# timeframe: 时间帧,每根K线的时间长度; limit: K线条数
K_data = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
print(k_data)

<br>

private API:与个人账户相关联的操作。

对于Binance,API key在【账户】-> 【API管理】中创建。(需要一定的验证等级)

# 以API和私钥生成交易所实例
exchange = ccxt.binance({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET_KEY',
})

# 获取账户余额
balance = exchange.fetch_balance()
print(balance)

# 订单查询
order_info = exchange.fetch_orders(symbol)     # 所有订单
order_info = exchange.fetch_open_orders(symbol)  # 未完成的订单
order_info = exchange.fetch_closed_orders(symbol)  # 已完成的订单
print(order_info)

# 成交查询
exchange.fetchMyTrades(symbol)

# 限价交易,以60000美元价格买入0.001 BTC
order = exchange.CreateLimitBuyOrder('BTC/USDT', 0.001, 20000)
print(order)

# 市价交易,卖出0.001 BTC
order = exchange.CreateMarketSellOrder('BTC/USDT', 0.001)
print(order)

# 撤单
exchange.CancelOrder(order_id)

<br>

0x03:Demo

在实际应用中,需要对过往的数据进行分析,因此会结合数据分析的库使用,如panda。下面是一个demo,实现一个涨买跌卖的简单策略。使用pandas库对ohlcv数据进行分析,得出交易信号,然后执行交易。

import ccxt
import time
import pandas

# 初始化 Binance 交易所
exchange = ccxt.binance({
    'apiKey': '你的API_KEY',
    'secret': '你的SECRET',
})

# 获取市场数据
def fetch_ohlcv(symbol, timeframe, limit=2):
    ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
    df = pandas.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
    df['timestamp'] = pandas.to_datetime(df['timestamp'], unit='ms')
    # df.set_index('timestamp', inplace=True)  # 将 timestamp 列设为索引
    return df

# 简单交易策略
def strategy(df):
    if df.iloc[-1]['close'] > df.iloc[-2]['close']:
        return 'buy'
    elif df.iloc[-1]['close'] &lt; df.iloc[-2]['close']:
        return 'sell'
    else:
        return 'hold'

# 执行策略
symbol = 'BTC/USDT'
timeframe = '1m'  # 1分钟K线

while True:
    try:
        # 获取最近的两条K线数据
        df = fetch_ohlcv(symbol, timeframe)

        # 执行策略
        action = strategy(df)

        if action == 'buy':
            # 模拟买入0.001 BTC
            order = exchange.create_order(symbol, 'market', 'buy', 0.001)
            print(f'买入订单:{order}')

        elif action == 'sell':
            # 模拟卖出0.001 BTC
            order = exchange.create_order(symbol, 'market', 'sell', 0.001)
            print(f'卖出订单:{order}')

        # 每分钟检查一次
        time.sleep(60)

    except Exception as e:
        print(f"出错: {e}")

<br>

0x04:总结

本篇文章只是对ccxt的使用进行了简单介绍,对于更多的详细内容,可查阅官方文档

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
卡卡
卡卡
智能合约开发&安全,去中心化爱好者