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博客