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

四、区块量化 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)

 

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