(15-13)基于时间序列预测的比特币自动交易系统:真实交易

文章介绍了如何使用Python的Binance库获取BTC/USDT交易对的分钟级别历史K线数据,并展示了如何设计一个简单的交易策略,预测比特币价格并据此执行买卖操作。该策略涉及数据获取、可视化和基于时间序列的预测。
摘要由CSDN通过智能技术生成

1.5.13  真实交易

Binance是一个著名的交易平台,可以存储、购买、出售和交换加密货币,可以与其他加密货币进行交换,也可以与法定货币(如欧元或美元)进行交易。

(1)安装库python-binance,并导入与Binance API交互所需的模块。

!pip install python-binance
from binance.client import Client
from binance.exceptions import BinanceAPIException

(2)设置Binance API的密钥和密钥的密码,这是与Binance交互时身份验证所需的信息。这些信息将用于识别和授权与Binance API的通信,确保安全地执行相关操作,如查询账户信息或执行交易。

api_key="API_KEY_HERE"
api_secret="API_SECRET_HERE"

(3)使用Binance API获取了BTC/USDT交易对的最近30分钟的历史K线数据,并将其以DataFrame的形式显示出来。

client = Client(api_key,api_secret)
pd.DataFrame(client.get_historical_klines('BTCUSDT','1m','30 m ago UTC')).tail()

上述代码用于检索和查看加密货币交易对的历史价格走势数据,执行后会输出:

25	1643702100000	38414.36000000	38426.89000000	38407.57000000	38422.08000000	5.91164000	1643702159999	227094.93168070	337	4.19970000	161329.35863350	0
26	1643702160000	38422.08000000	38449.12000000	38416.35000000	38439.51000000	8.33217000	1643702219999	320206.31277940	432	4.71958000	181384.50943230	0
27	1643702220000	38439.51000000	38446.60000000	38431.68000000	38443.83000000	7.79801000	1643702279999	299751.57319570	314	6.20906000	238675.42153760	0
28	1643702280000	38443.83000000	38446.90000000	38433.82000000	38434.01000000	8.16838000	1643702339999	314003.29277350	313	4.00803000	154071.49661120	0
29	1643702340000	38434.02000000	38439.14000000	38432.05000000	38433.88000000	2.13736000	1643702399999	82151.18731860	176	1.27532000	49017.86610520	0

(4)定义函数 getminutedata,使用 Binance API 获取特定交易对的分钟级别历史K线数据,并返回一个包含时间、开盘价、最高价、最低价、收盘价和成交量的DataFrame。函数getminutedata的参数包括交易对的符号(symbol)、时间间隔(interval)和回溯时间(lookback)。返回的DataFrame具有适当的列名和时间戳索引,以方便进一步的分析和可视化工作。

def getminutedata(symbol, interval, lookback):
    frame = pd.DataFrame(client.get_historical_klines(symbol,interval, lookback+' m ago UTC'))
    frame = frame.iloc[:,:6]
    frame.columns = ['Time','Open','High','Low','Close','Volume']
    frame = frame.set_index('Time')
    frame.index = pd.to_datetime(frame.index, unit='ms')
    frame = frame.astype(float)
    return frame

(5)调用上面定义的函数getminutedata可视化测试获取的BTC/USD分钟级别历史K线数据,绘制了BTC/USD的开盘价随时间的变化趋势。

visual_test=getminutedata('BTCUSDT','1m','30')
fig = px.line(visual_test.Open)

fig.update_layout(title='BTC/USD Price',
                   xaxis_title='Time',
                   yaxis_title='Price',
                   plot_bgcolor='white')

fig.show()

执行效果如图7-8所示,展示比特币的每分钟的价格,通过这种方式可以更直观地了解价格的波动情况。

图7-8  BTC/USD分钟级别历史K线数据

(6)我们的交易机器人策略是:每天预测明天比特币的价值,如果预测值高于指定阈值,机器人将执行购买操作;否则,不执行任何交易。定义函数strategy实现我们的交易策略,首先获取过去30分钟的比特币分钟数据,并计算其累积收益率。如果尚未持仓(entried为False),并且最近的累积收益率低于-0.002,那么执行市价买入订单。如果已经持仓(entried为True),则在持续监视后续分钟数据,并在累积收益率超过0.0015或低于-0.0015时执行市价卖出订单。在每次交易执行后,会打印订单信息。

def strategy(symbol, qty, entried=False):
    df = getminutedata(symbol, '1m', '30')
    cumulret = (df.Open.pct_change() + 1).cumprod() - 1
    if not entried:
        if cumulret[-1] < -0.002:
            order = client.create_order(symbol=symbol, side='BUY', type='MARKET', quantity=qty)
            print(order)
            enteried = True
        else:
            print ("Aucune transaction n'a été exécutée")
    if entried:
        while True:
            df = getminutedata(symbol, '1m', '30')
            sincebuy = df.loc[df.index > pd.tp_datetime(order['transactTime'], unit='ms')]
            if len(sincebuy) > 0:
                sincebuyret = (sincebuy.Open.pct_change() + 1).cumprod() - 1
                if sincebuyret[-1] > 0.0015 or sincebuyret[-1] \
                    < -0.0015:
                    order = client.create_order(symbol=symbol,
                            side='SELL', type='MARKET', quantity=qty)
                    print(order)
                    break

(7)下面的代码试执行了一个名为strategy的函数,该函数根据 Bitcoin 的价格变化执行交易策略。在这段代码中使用了try和except块,以处理BinanceAPIException和其他可能发生的异常情况。如果账户余额不足,它会捕获BinanceAPIException并输出“le compte a un solde insuffisant pour l'action demandée.”。因为作者的账户上没有余额,所以我们无法在实践中测试这个交易机器人程序。

try:
    strategy('BTCUSDT',0.001)
except BinanceAPIException:
    print("le compte a un solde insuffisant pour l'action demandée.")
except Exception as e:
    print(e)

本项目已完结:

(15-1)基于时间序列预测的比特币自动交易系统:背景介绍+功能模块-CSDN博客

(15-2)基于时间序列预测的比特币自动交易系统:准备数据-CSDN博客

(15-3)基于时间序列预测的比特币自动交易系统:数据探索分析-CSDN博客

(15-4)基于时间序列预测的比特币自动交易系统:数据转换-CSDN博客

(15-5)基于时间序列预测的比特币自动交易系统:比特币价格的数据可视化-CSDN博客

(15-6)基于时间序列预测的比特币自动交易系统:创建机器学习模型-CSDN博客

(15-7)基于时间序列预测的比特币自动交易系统:构建深度学习模型-CSDN博客

(15-8)基于时间序列预测的比特币自动交易系统:使用时间序列法分解数据-CSDN博客

(15-9)基于时间序列预测的比特币自动交易系统:使用时间序列法转换数据-CSDN博客

(15-10)基于时间序列预测的比特币自动交易系统:使用时间序列预测-CSDN博客

(15-11)基于时间序列预测的比特币自动交易系统:时间序列验证-CSDN博客

(15-12)基于时间序列预测的比特币自动交易系统:自动交易模拟-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值