def create_order(symbol='EOS-USDT-SWAP', side='buy', positionside='long', ordtype='limit', price='0', quantity='1',
tpTriggerPx='', tpOrdPx='', slTriggerPx='', slOrdPx='', message=''):
"""
全仓合约下单
@param symbol: 交易对
@param side: 订单方向:buy:买, sell:卖
@param positionside: 持仓方向:long 或 short
@param ordtype: 订单类型:market:市价单、limit:限价单
@param price: 委托价格
@param quantity: 委托数量
@param tpOrdPx: 止盈委托价
@param tpTriggerPx: 止盈触发价
@param slOrdPx: 止损委托价
@param slTriggerPx: 止损触发价
@param message: 判断依据
@return:
"""
params = dict()
if ordtype in ['limit', 'market']:
params.update({
'tdMode': 'cross'
})
if ordtype != 'market':
params.update({
'px': price
})
result = trade_api.create_order(instId=symbol, side=side, ordType=ordtype, posSide=positionside, sz=quantity,
tpTriggerPx=tpTriggerPx, tpOrdPx=tpOrdPx, slTriggerPx=slTriggerPx, slOrdPx=slOrdPx,
tpTriggerPxType=TRIGGER_PXTYPE_LAST, slTriggerPxType=TRIGGER_PXTYPE_LAST, **params)
if result["code"] == "0":
if side == 'sell':
sides = '卖出'
else:
sides = '买入'
if positionside == 'short':
possides = '做空'
else:
possides = '做多'
wxmsg = 'OKEX 下单成功,\n订单ID:{}\n交易对:{}\n买卖方式:{}\n购买方向:{}\n购买价格:{:.2f}\n购买数量:{}\n止盈价格:' \
'{:.2f}\n止损价格:{:.2f}\n判断依据:{}'.format(result["data"][0]["ordId"], symbol, sides, possides,
price,
quantity, tpOrdPx, slOrdPx, message)
weixin.senddata('@all', wxmsg)
return result["data"][0]["ordId"]
else:
weixin.senddata('@all', 'OKEX 下单失败,错误码:' + result["data"][0]["sCode"] + '\n错误信息:' +
result["data"][0]["sMsg"])
return "下单失败,错误码:", result["data"][0]["sCode"], ", 错误信息:", result["data"][0]["sMsg"]
def close_positions(symbol='EOS-USDT-SWAP', 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:
"""
create_order(symbol=symbol, side=side, positionside=positionside, ordtype='market', quantity='1',
message=message)
def up_cross_order(symbol='EOS-USDT-SWAP', ordtype='limit', tpTriggerPx='', tpOrdPx='', slTriggerPx='', slOrdPx='',
message=''):
"""
开多仓方法
@param symbol: 交易对
@param ordtype: 订单类型:market:市价单、limit:限价单
@param tpOrdPx: 止盈委托价
@param tpTriggerPx: 止盈触发价
@param slOrdPx: 止损委托价
@param slTriggerPx: 止损触发价
@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)
print('可成交价格:' + str(price))
quantity = 1
# 如果当时持有空仓,则先平仓,再开多仓;
if short_position != 0:
print('OKEX 如果当时持有空仓,则先平仓,再开多仓:' + symbol)
close_positions(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_SHORT,
message='已持空仓,先平空仓,再开多仓')
create_order(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_LONG, ordtype=ordtype, price=str(price),
quantity=str(quantity), tpTriggerPx=tpTriggerPx, tpOrdPx=tpOrdPx, slTriggerPx=slTriggerPx,
slOrdPx=slOrdPx, message=message)
# 如果没有持仓,则直接开多仓;
elif (short_position == 0.0) and (long_position == 0.0):
print('OKEX 如果没有持仓,则直接开多仓' + symbol)
create_order(symbol=symbol, side=SIDE_BUY, positionside=POS_SIDE_LONG, ordtype=ordtype, price=str(price),
quantity=str(quantity), tpTriggerPx=tpTriggerPx, tpOrdPx=tpOrdPx, slTriggerPx=slTriggerPx,
slOrdPx=slOrdPx, message=message)
def down_cross_order(symbol='EOS-USDT-SWAP', ordtype='limit', tpTriggerPx='', tpOrdPx='', slTriggerPx='', slOrdPx='',
message=''):
"""
开空仓方法
@param symbol: 交易对
@param ordtype: 订单类型:market:市价单、limit:限价单
@param tpOrdPx: 止盈委托价
@param tpTriggerPx: 止盈触发价
@param slOrdPx: 止损委托价
@param slTriggerPx: 止损触发价
@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)
print('可成交价格:' + str(price))
quantity = 1
# 如果当时持有多仓,则先平仓,再开空仓;
if long_position != 0:
print('OKEX 如果当时持有多仓,则先平仓,再开空仓:' + symbol)
close_positions(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_LONG,
message='已持多仓,先平多仓,再开空仓')
create_order(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_SHORT, ordtype=ordtype, price=str(price),
quantity=str(quantity), tpTriggerPx=tpTriggerPx, tpOrdPx=tpOrdPx, slTriggerPx=slTriggerPx,
slOrdPx=slOrdPx, message=message)
# 如果没有持仓,则直接开空仓;
elif (short_position == 0) and (long_position == 0):
print('OKEX 如果没有持仓,则直接开空仓;' + symbol)
create_order(symbol=symbol, side=SIDE_SELL, positionside=POS_SIDE_SHORT, ordtype=ordtype, price=str(price),
quantity=str(quantity), tpTriggerPx=tpTriggerPx, tpOrdPx=tpOrdPx, slTriggerPx=slTriggerPx,
slOrdPx=slOrdPx, message=message)