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

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


def create_order(symbol='EOSUSDT', side='BUY', positionside='LONG', ordtype='LIMIT', price=Decimal('0'),
quantity='1', message=''):
"""
全仓合约市价下单
@param symbol: 产品ID EOSUSDT
@param side: 订单方向:BUY:买, SELL:卖
@param positionside: 持仓方向:LONG 或 SHORT
@param ordtype: 订单类型:MARKET:市价单、LIMIT:限价单
@param price: 委托价格
@param quantity: 委托数量
@param message: 判断依据
@return:
"""
params = dict()
if ordtype in [ORDER_TYPE_LIMIT, ORDER_TYPE_STOP_LOSS_LIMIT]:
params.update({
'timeInForce': TIME_IN_FORCE_GTC
})
if ordtype != ORDER_TYPE_MARKET:
params.update({
'price': Decimal(price)
})
quantitys = float(quantity)
result = client.futures_create_order(symbol=symbol, side=side.upper(), positionSide=positionside.upper(),
type=ordtype.upper(), quantity=quantitys, **params)
if side == 'SELL':
sides = '卖出'
else:
sides = '买入'
if positionside == 'SHORT':
possides = '做空'
else:
possides = '做多'
weixin.senddata('@all', 'Binance 委托下单成功,\n 订单ID:' + str(result["orderId"]) + '\n 交易对:' + symbol +
'\n 买卖方式:' + sides + '\n 购买方向:' + possides + '\n 购买价格:' + str(
price) + '\n 购买数量:' + str(quantity) + '\n 判断依据:' + message)


def close_positions(symbol='EOSUSDT', side='SELL', positionside='LONG', message=''):
"""
平仓方法
开平仓模式下,side和posSide需要进行组合
开多:买入开多(side 填写 BUY; posSide 填写 LONG )
开空:卖出开空(side 填写 SELL; posSide 填写 SHORT )
平多:卖出平多(side 填写 SELL;posSide 填写 LONG )
平空:买入平空(side 填写 BUY; posSide 填写 SHORT )
@param symbol: 交易对
@param side: 订单方向:BUY:买, SELL:卖
@param positionside: 持仓方向:LONG 或 SHORT
@param message: 判断依据
@return:
"""
price = get_orderbook_ask(symbol)
client.futures_create_order(symbol=symbol, closePosition=True, type=FUTURE_ORDER_TYPE_STOP_MARKET, side=side,
positionSide=positionside, stopPrice=Decimal(price))
weixin.senddata('@all', 'Binance 平仓成功,\n 交易对:' + symbol + '\n 判断依据:' + message)


def up_cross_order(symbol, ordtype='LIMIT', message=''):
"""
市价开多仓
@param symbol: 交易对
@param ordtype: 订单类型:MARKET:市价单、LIMIT:限价单
@param message: 消息处理
@return:
"""
print('可做多的交易对:' + symbol)
# 获取标的可平多仓
long_position = get_long_positions(symbol=symbol)
print('可平多仓:' + str(long_position))
# 获取标的可平空仓
short_position = get_short_positions(symbol=symbol)
print('可平空仓:' + str(short_position))
if (long_position + short_position) > 5:
print('持仓数最多5个')
return
free_money = get_available_cash('USDT')
print('可用USDT:' + str(free_money))
if free_money > 0:
price = get_orderbook_bid(symbol)
if symbol == 'BTCUSDT':
amount = '0.01'
elif symbol == 'ETHUSDT':
amount = '0.1'
elif symbol == 'DASHUSDT':
amount = '0.2'
elif symbol == 'BCHUSDT':
amount = '0.1'
elif symbol == 'ZECUSDT':
amount = '0.2'
elif symbol == 'LTCUSDT':
amount = '0.1'
elif symbol == 'FILUSDT':
amount = '2'
elif symbol == 'XMRUSDT':
amount = '0.1'
elif symbol == 'DOTUSDT':
amount = '2'
elif symbol == 'SOLUSDT':
amount = '1'
else:
amount = '1'
# 如果当时持有空仓,则先平仓,再开多仓;
if short_position != 0:
print('Binance 如果当时持有空仓,则先平仓,再开多仓:' + symbol)
# 获取标的的最新价
close_positions(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_SHORT, message=message)
create_order(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_LONG, ordtype=ordtype,
price=Decimal(price), quantity=str(amount), message=message)
# 如果没有持仓,则直接开多仓;
elif (short_position == 0.0) and (long_position == 0.0):
print('Binance 如果没有持仓,则直接开多仓' + symbol)
create_order(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_LONG, ordtype=ordtype,
price=Decimal(price), quantity=str(amount), message=message)


def down_cross_order(symbol, ordtype='LIMIT', message=''):
"""
市价开空仓
@param symbol: 交易对
@param ordtype: 订单类型:MARKET:市价单、LIMIT:限价单
@param message: 消息处理
@return:
"""
print('可做空的交易对:' + symbol)
# 获取标的可平多仓
long_position = get_long_positions(symbol=symbol)
print('可平多仓:' + str(long_position))
# 获取标的可平空仓
short_position = get_short_positions(symbol=symbol)
print('可平空仓:' + str(short_position))
if (long_position + short_position) > 5:
print('持仓数最多5个')
return
free_money = get_available_cash('USDT')
print('可用USDT:' + str(free_money))
if free_money > 0:
price = get_orderbook_ask(symbol)
if symbol == 'BTCUSDT':
amount = '0.01'
elif symbol == 'ETHUSDT':
amount = '0.1'
elif symbol == 'DASHUSDT':
amount = '0.2'
elif symbol == 'BCHUSDT':
amount = '0.1'
elif symbol == 'ZECUSDT':
amount = '0.2'
elif symbol == 'LTCUSDT':
amount = '0.1'
elif symbol == 'FILUSDT':
amount = '2'
elif symbol == 'XMRUSDT':
amount = '0.1'
elif symbol == 'DOTUSDT':
amount = '2'
elif symbol == 'SOLUSDT':
amount = '1'
else:
amount = '1'
# 如果当时持有多仓,则先平仓,再开空仓;
if long_position != 0:
print('Binance 如果当时持有多仓,则先平仓,再开空仓:' + symbol)
close_positions(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_LONG, message=message)
create_order(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_SHORT, ordtype=ordtype,
price=Decimal(price), quantity=str(amount), message=message)
# 如果没有持仓,则直接开空仓;
elif (short_position == 0) and (long_position == 0):
print('Binance 如果没有持仓,则直接开空仓;' + symbol)
create_order(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_SHORT, ordtype=ordtype,
price=Decimal(price), quantity=str(amount), message=message)
 

 

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