• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
金记缘
博客园    首页    新随笔    联系   管理    订阅  订阅

八、区块量化 binance 合约操作文件

新增cross_order.py文件

# -*- coding: utf-8 -*-
import pandas as pd
from binance import Client, Config
import time
import weixin
from binance.enums import *
from decimal import Decimal

client = Client(Config.BINANCE_API_KEY, Config.BINANCE_API_SECRET)
pd.set_option('expand_frame_repr', False)

# 交易对集合
# symbol:交易对
symbol_pool = ['BTCUSDT', 'ETHUSDT']


def get_orderbook(symbol='EOSUSDT'):
"""
查看买一和卖一的价格
@param symbol: 交易对
@return:
"""
result = client.get_orderbook_ticker(symbol=symbol)
if len(result) > 0:
return float(result['askPrice']), float(result['bidPrice'])
else:
return 0, 0


def get_orderbook_ask(symbol='EOSUSDT'):
"""
查看买一的价格
@param symbol: 币种
@return:
"""
result = client.get_orderbook_ticker(symbol=symbol)
if len(result) > 0:
return float(result['askPrice'])
else:
return 0


def get_orderbook_bid(symbol='EOSUSDT'):
"""
查看卖一的价格
@param symbol: 币种
@return:
"""
result = client.get_orderbook_ticker(symbol=symbol)
if len(result) > 0:
return float(result['bidPrice'])
else:
return 0


def get_available_cash(symbol='USDT'):
"""
查看账户余额
@param symbol: 币种
@return:
"""
result = client.futures_account_balance()
if len(result) > 0:
for value in result:
if value['asset'] == symbol:
balance = float(value['balance'])
return balance
else:
return 0


def get_candlesticks(symbol='EOSUSDT', interval='5m', limit='30'):
"""
查看历吏价格
@param symbol: 交易对
@param interval: K线数据
@param limit: 显示条数
@return:
"""
limits = int(limit)
result = client.futures_klines(symbol=symbol, interval=interval.lower(), limit=limits)
for line in result:
del line[6:]
df = pd.DataFrame(data=result, columns=['datetime', 'open', 'high', 'low', 'close', 'volume'])
df['symbol'] = symbol
# 时区转换为+8.00区域
df['datetime'] = pd.to_datetime(df['datetime'], unit='ms', utc=True).dt.tz_convert('Asia/Shanghai')
# 删除重复数据
df.drop_duplicates(['datetime'], inplace=True)
# 将数值数据转为float型,便于后续处理
convert_list = ['open', 'high', 'low', 'close', 'volume']
df[convert_list] = df[convert_list].astype(float)
# 重置索引
df.reset_index(drop=True, inplace=True)
# 增加id列
df.index = df.index + 1
df = df.reset_index()
df = df.rename(columns={'index': 'id'})
return df


def get_historicalticks(symbol='EOSUSDT', interval='5m', start_str='2023-05-01', end_str='2023-06-01'):
"""
查看历吏价格
@param symbol: 交易对
@param interval: K线数据
@param start_str: 开始时间
@param end_str: 结束时间
@return:
"""
result = client.futures_historical_klines(symbol=symbol, interval=interval.lower(), start_str=start_str,
end_str=end_str)
for line in result:
del line[6:]
df = pd.DataFrame(data=result, columns=['datetime', 'open', 'high', 'low', 'close', 'volume'])
df['symbol'] = symbol
# 时区转换为+8.00区域
df['datetime'] = pd.to_datetime(df['datetime'], unit='ms', utc=True).dt.tz_convert('Asia/Shanghai')
# 删除重复数据
df.drop_duplicates(['datetime'], inplace=True)
# 将数值数据转为float型,便于后续处理
convert_list = ['open', 'high', 'low', 'close', 'volume']
df[convert_list] = df[convert_list].astype(float)
# 重置索引
df.reset_index(drop=True, inplace=True)
# 增加id列
df.index = df.index + 1
df = df.reset_index()
df = df.rename(columns={'index': 'id'})
return df


def get_long_positions(symbol='EOSUSDT'):
"""
查看合约多仓持仓信息
@param symbol: 交易对
@return:
"""
result = client.futures_position_information(symbol=symbol)
if len(result) > 0:
for value in result:
if value['positionSide'] == POS_SIDE_LONG:
return float(value['positionAmt'])
else:
return 0


def get_short_positions(symbol='EOSUSDT'):
"""
查看合约空仓持仓信息
@param symbol: 交易对
@return:
"""
result = client.futures_position_information(symbol=symbol)
if len(result) > 0:
for value in result:
if value['positionSide'] == POS_SIDE_SHORT:
return float(value['positionAmt'])
else:
return 0


def set_leverage(symbol='EOSUSDT', leverage='5'):
"""
设置合约杠杆倍数
@param symbol: 交易对以-SWAP为结尾
@param leverage: 倍数
@return:
"""
long_positions = get_long_positions(symbol)
short_positions = get_short_positions(symbol)
if (short_positions == 0.0) and (long_positions == 0.0):
leverages = int(leverage)
result = client.futures_change_leverage(symbol=symbol, leverage=leverages)
return result
else:
print('已持仓中,无法修改杠杆倍数')
 

 

posted @ 2023-06-17 21:31  一生所悟  阅读(217)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3