四、区块量化 okx 合约操作文件续
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | 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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)