三、区块量化 okx 合约操作文件
1、打开新增的cross_order.py 文件
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 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | # -*- coding: utf-8 -*- import pandas as pd import okx.Account as account import okx.Trade as trade import okx.MarketData as marketdata import okx.PublicData as publicdata from okx.config import Config import time from datetime import datetime import weixin from okx.enums import * # 用户账户接口 account_api = account.AccountAPI(Config.OKEX_API_KEY, Config.OKEX_API_SECRET, Config.OKEX_PASSPHRASE, False , Config.OKEX_FLAG) # 交易订单接口 trade_api = trade.TradeAPI(Config.OKEX_API_KEY, Config.OKEX_API_SECRET, Config.OKEX_PASSPHRASE, False , Config.OKEX_FLAG) # 市场行情接口 marketdata_api = marketdata.MarketAPI(Config.OKEX_FLAG) # 公共数据接口 publicdata_api = publicdata.PublicAPI(Config.OKEX_FLAG) pd.set_option( 'expand_frame_repr' , False ) # 交易对集合 # symbol:交易对 symbol_pool = [ 'BTC-USDT-SWAP' , 'ETH-USDT-SWAP' ] def get_symbol_info(symbol = 'EOS-USDT-SWAP' ): """ 查看币种信息 @param symbol: 交易对 @return: """ result = publicdata_api.get_instruments(instType = 'SWAP' , instId = symbol) if len (result[ 'data' ]) > 0 : return float (result[ 'data' ][ 0 ][ 'lotSz' ]), float (result[ 'data' ][ 0 ][ 'tickSz' ]) else : return 0 , 0 def get_orderbook(symbol = 'EOS-USDT-SWAP' ): """ 查看买一和卖一的价格 @param symbol: 交易对 @return: """ result = marketdata_api.get_orderbook(instId = symbol) if len (result[ 'data' ]) > 0 : return float (result[ 'data' ][ 0 ][ 'asks' ][ 0 ][ 0 ]), float (result[ 'data' ][ 0 ][ 'bids' ][ 0 ][ 0 ]) else : return 0 , 0 def get_orderbook_ask(symbol = 'EOS-USDT-SWAP' ): """ 查看买一的价格 @param symbol: 交易对 @return: """ result = marketdata_api.get_orderbook(instId = symbol) if len (result[ 'data' ]) > 0 : return float (result[ 'data' ][ 0 ][ 'asks' ][ 0 ][ 0 ]) else : return 0 def get_orderbook_bid(symbol = 'EOS-USDT-SWAP' ): """ 查看卖一的价格 @param symbol: 交易对 @return: """ result = marketdata_api.get_orderbook(instId = symbol) if len (result[ 'data' ]) > 0 : return float (result[ 'data' ][ 0 ][ 'bids' ][ 0 ][ 0 ]) else : return 0 def get_available_cash(asset = 'USDT' ): """ 查看账户余额 @param asset: 币种 @return: 可用余额、占用金额 """ result = account_api.get_account_balance(ccy = asset) if len (result[ 'data' ]) > 0 : return float (result[ 'data' ][ 0 ][ 'details' ][ 0 ][ 'availBal' ]) # return float(result['data'][0]['details'][0]['availBal']), float(result['data'][0]['details'][0]['frozenBal']) else : return 0 def get_candlesticks(symbol = 'EOS-USDT-SWAP' , interval = '5m' , limit = '30' ): """ 查看历吏价格 @param symbol: 交易对 @param interval: K线数据 @param limit: 显示条数 @return: """ result = marketdata_api.get_candlesticks(instId = symbol, bar = interval, limit = limit) for line in result[ 'data' ]: del line[ 6 :] df = pd.DataFrame(data = result[ 'data' ], columns = [ 'datetime' , 'open' , 'high' , 'low' , 'close' , 'volume' ]) df[ 'symbol' ] = symbol # 时区转换为+8.00 区域 df[ 'datetime' ] = pd.to_datetime(df[ 'datetime' ], unit = 'ms' , utc = True ).dt.tz_convert( 'Asia/Shanghai' ) # 删除重复数据 df.drop_duplicates([ 'datetime' ], inplace = True ) # 将数值数据转为float型,便于后续处理 convert_list = [ 'open' , 'high' , 'low' , 'close' , 'volume' ] df[convert_list] = df[convert_list].astype( float ) # 重新排序 df.sort_values(by = [ 'symbol' , 'datetime' ], ignore_index = True , ascending = True , inplace = True ) # 重置索引 df.reset_index(drop = True , inplace = True ) # 增加id列 df.index = df.index + 1 df = df.reset_index() df = df.rename(columns = { 'index' : 'id' }) return df def get_long_positions(symbol = 'EOS-USDT-SWAP' ): """ 查看合约多仓持仓信息 @param symbol: 交易对 @return: """ result = account_api.get_positions(instId = symbol, instType = 'SWAP' ) if len (result[ 'data' ]) > 0 : for value in result[ 'data' ]: if value[ 'posSide' ] = = POS_SIDE_LONG: return float (value[ 'pos' ]) else : return 0 def get_short_positions(symbol = 'EOS-USDT-SWAP' ): """ 查看合约空仓持仓信息 @param symbol: 交易对 @return: """ result = account_api.get_positions(instId = symbol, instType = 'SWAP' ) if len (result[ 'data' ]) > 0 : for value in result[ 'data' ]: if value[ 'posSide' ] = = POS_SIDE_SHORT: return float (value[ 'pos' ]) else : return 0 def set_leverage(symbol = 'EOS-USDT-SWAP' , leverage = '25' ): """ 设置合约杠杆倍数 @param symbol: 交易对 @param leverage: 倍数 @return: """ long_positions = get_long_positions(symbol) short_positions = get_short_positions(symbol) if (short_positions = = 0.0 ) and (long_positions = = 0.0 ): result = account_api.set_leverage(instId = symbol, lever = leverage, mgnMode = TD_MODE_CROSS) return result else : print ( '已持仓中,无法修改杠杆倍数' ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)