四、区块量化 okx 合约操作文件续
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)