okxv5 1.8.9__tar.gz → 1.8.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {okxv5-1.8.9 → okxv5-1.8.10}/PKG-INFO +4 -2
- {okxv5-1.8.9 → okxv5-1.8.10}/README.md +22 -1
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/client.py +29 -16
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/utils.py +7 -1
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5.egg-info/PKG-INFO +4 -2
- {okxv5-1.8.9 → okxv5-1.8.10}/setup.py +2 -2
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Account_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Affiliate_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Broker_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Convert_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Copytrading_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/FDBroker_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Finance_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Funding_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Market_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Public_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Recurring_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Rfq_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Singal_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/SprdApi_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/Trade_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/TradingBot_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/TradingData_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/__init__.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/consts.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/exceptions.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/hunyuan_client.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/status_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5/subAccount_api.py +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5.egg-info/SOURCES.txt +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5.egg-info/dependency_links.txt +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5.egg-info/requires.txt +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/okxv5.egg-info/top_level.txt +0 -0
- {okxv5-1.8.9 → okxv5-1.8.10}/setup.cfg +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: okxv5
|
3
|
-
Version: 1.8.
|
4
|
-
Summary:
|
3
|
+
Version: 1.8.10
|
4
|
+
Summary: 自己个人上传使用,精力有限没有整理调用方法,不知道怎么调用的可以查看源码发给AI,有疑问联系QQ:935233452
|
5
5
|
Home-page:
|
6
6
|
Author:
|
7
7
|
Author-email:
|
@@ -54,3 +54,5 @@ print("客户端已成功实例化,发送认证请求。")
|
|
54
54
|
|
55
55
|
其他调用方法一致,调用相应的API文件里想要的相应的功能
|
56
56
|
|
57
|
+
此处实盘为1,模拟盘为0,与官方文档相反
|
58
|
+
|
@@ -21,4 +21,25 @@
|
|
21
21
|
├── subAccount_api.py # 子账户管理相关 API
|
22
22
|
├── Trade_api.py # 核心交易 API (下单、撤单、查订单等)
|
23
23
|
├── TradingBot_api.py # 交易机器人相关 API/功能
|
24
|
-
└── TradingData_api.py # 交易历史数据相关 API
|
24
|
+
└── TradingData_api.py # 交易历史数据相关 API
|
25
|
+
|
26
|
+
|
27
|
+
调用客户端示例:
|
28
|
+
|
29
|
+
完整导入:
|
30
|
+
from okxv5.client import Client
|
31
|
+
|
32
|
+
# 替换为你的真实API凭证
|
33
|
+
api_key = "你的API_KEY"
|
34
|
+
api_secret_key = "你的API_SECRET_KEY"
|
35
|
+
passphrase = "你的PASSPHRASE" # API的交易密码
|
36
|
+
|
37
|
+
# 实例化客户端,建议使用服务器时间
|
38
|
+
client = Client(api_key, api_secret_key, passphrase, use_server_time=True)
|
39
|
+
|
40
|
+
print("客户端已成功实例化,发送认证请求。")
|
41
|
+
|
42
|
+
|
43
|
+
其他调用方法一致,调用相应的API文件里想要的相应的功能
|
44
|
+
|
45
|
+
此处实盘为1,模拟盘为0,与官方文档相反
|
@@ -1,5 +1,7 @@
|
|
1
1
|
import requests # 导入requests库,用于发送HTTP请求
|
2
2
|
import json # 导入json库,用于处理JSON数据
|
3
|
+
import datetime # 导入datetime库,用于时间戳处理
|
4
|
+
import time # 导入time库,用于获取本地时间戳
|
3
5
|
from . import consts as c, utils, exceptions # 从当前包导入consts模块(别名为c)、utils模块和exceptions模块
|
4
6
|
|
5
7
|
class Client(object):
|
@@ -7,14 +9,14 @@ class Client(object):
|
|
7
9
|
API客户端类,用于与API进行交互
|
8
10
|
"""
|
9
11
|
|
10
|
-
def __init__(self, api_key, api_secret_key, passphrase, use_server_time=False, flag='
|
12
|
+
def __init__(self, api_key, api_secret_key, passphrase, use_server_time=False, flag='0'): # 1为实盘,0为模拟盘
|
11
13
|
"""
|
12
14
|
构造函数,初始化客户端
|
13
15
|
:param api_key: API密钥
|
14
16
|
:param api_secret_key: API私钥
|
15
17
|
:param passphrase: 交易密码
|
16
18
|
:param use_server_time: 是否使用服务器时间,默认为False
|
17
|
-
:param flag: 请求标记,默认为'
|
19
|
+
:param flag: 请求标记,默认为'0'
|
18
20
|
"""
|
19
21
|
self.API_KEY = api_key # 设置API密钥
|
20
22
|
self.API_SECRET_KEY = api_secret_key # 设置API私钥
|
@@ -37,21 +39,35 @@ class Client(object):
|
|
37
39
|
# 拼接完整的URL
|
38
40
|
url = c.API_URL + request_path
|
39
41
|
|
40
|
-
#
|
41
|
-
|
42
|
+
# 确定最终用于请求头和签名的 ISO 8601 格式时间戳
|
43
|
+
final_iso8601_timestamp = ""
|
42
44
|
|
43
|
-
# 签名和请求头
|
44
45
|
if self.use_server_time:
|
45
|
-
#
|
46
|
-
|
46
|
+
# 获取服务器时间(返回 Unix 毫秒字符串)
|
47
|
+
server_ts_ms_str = self._get_timestamp()
|
48
|
+
if server_ts_ms_str:
|
49
|
+
try:
|
50
|
+
ms = int(server_ts_ms_str)
|
51
|
+
dt_object = datetime.datetime.fromtimestamp(ms / 1000, tz=datetime.timezone.utc)
|
52
|
+
final_iso8601_timestamp = dt_object.isoformat(timespec='milliseconds').replace('+00:00', 'Z')
|
53
|
+
except ValueError:
|
54
|
+
print(f"Error: Could not convert server timestamp '{server_ts_ms_str}' to ISO 8601. Using raw for signing/header.")
|
55
|
+
final_iso8601_timestamp = server_ts_ms_str # 转换失败时,回退使用原始值
|
56
|
+
else:
|
57
|
+
# 如果获取服务器时间失败,则回退到本地 UTC 时间
|
58
|
+
print("Warning: Failed to get server time. Falling back to local UTC time for timestamp.")
|
59
|
+
final_iso8601_timestamp = utils.get_timestamp() # utils.get_timestamp() 已经返回 ISO 8601 格式
|
60
|
+
else:
|
61
|
+
# 使用本地时间(utils.get_timestamp() 已经返回 ISO 8601 格式)
|
62
|
+
final_iso8601_timestamp = utils.get_timestamp()
|
47
63
|
|
48
64
|
# 根据请求方法决定请求体
|
49
65
|
body = json.dumps(params) if method == c.POST else ""
|
50
66
|
|
51
|
-
#
|
52
|
-
sign = utils.sign(utils.pre_hash(
|
53
|
-
#
|
54
|
-
header = utils.get_header(self.API_KEY, sign,
|
67
|
+
# 生成签名,使用ISO 8601格式的时间戳
|
68
|
+
sign = utils.sign(utils.pre_hash(final_iso8601_timestamp, method, request_path, str(body)), self.API_SECRET_KEY)
|
69
|
+
# 获取请求头,使用ISO 8601格式的时间戳
|
70
|
+
header = utils.get_header(self.API_KEY, sign, final_iso8601_timestamp, self.PASSPHRASE, self.flag)
|
55
71
|
|
56
72
|
# 发送请求
|
57
73
|
response = None
|
@@ -63,9 +79,6 @@ class Client(object):
|
|
63
79
|
# 发送POST请求
|
64
80
|
response = requests.post(url, data=body, headers=header)
|
65
81
|
|
66
|
-
# 异常处理
|
67
|
-
# print(response.headers) # 调试用,打印响应头
|
68
|
-
|
69
82
|
if not str(response.status_code).startswith('2'):
|
70
83
|
# 如果响应状态码不是2xx,则抛出API异常
|
71
84
|
raise exceptions.OkxAPIException(response)
|
@@ -95,7 +108,7 @@ class Client(object):
|
|
95
108
|
def _get_timestamp(self):
|
96
109
|
"""
|
97
110
|
私有方法,获取服务器时间戳
|
98
|
-
:return: 服务器时间戳字符串
|
111
|
+
:return: 服务器时间戳字符串 (Unix毫秒)
|
99
112
|
"""
|
100
113
|
url = c.API_URL + c.SERVER_TIMESTAMP_URL # 拼接获取服务器时间戳的URL
|
101
114
|
response = requests.get(url) # 发送GET请求获取服务器时间
|
@@ -104,4 +117,4 @@ class Client(object):
|
|
104
117
|
return response.json()['data'][0]['ts']
|
105
118
|
else:
|
106
119
|
# 如果请求失败,返回空字符串
|
107
|
-
return ""
|
120
|
+
return ""
|
@@ -47,7 +47,13 @@ def get_header(api_key, sign, timestamp, passphrase, flag):
|
|
47
47
|
header[c.OK_ACCESS_SIGN] = sign # 设置签名
|
48
48
|
header[c.OK_ACCESS_TIMESTAMP] = str(timestamp) # 设置时间戳
|
49
49
|
header[c.OK_ACCESS_PASSPHRASE] = passphrase # 设置密码
|
50
|
-
|
50
|
+
|
51
|
+
# OKX API: 'x-simulated-trading': '1' for simulated, '0' for real
|
52
|
+
# Our 'flag' parameter: '1' for real, '0' for simulated
|
53
|
+
# 所以,如果我们的 flag 是 '0' (模拟盘),x-simulated-trading 设置为 '1'。
|
54
|
+
# 如果我们的 flag 是 '1' (实盘),x-simulated-trading 设置为 '0'。
|
55
|
+
header['x-simulated-trading'] = '1' if flag == '0' else '0'
|
56
|
+
|
51
57
|
return header
|
52
58
|
|
53
59
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: okxv5
|
3
|
-
Version: 1.8.
|
4
|
-
Summary:
|
3
|
+
Version: 1.8.10
|
4
|
+
Summary: 自己个人上传使用,精力有限没有整理调用方法,不知道怎么调用的可以查看源码发给AI,有疑问联系QQ:935233452
|
5
5
|
Home-page:
|
6
6
|
Author:
|
7
7
|
Author-email:
|
@@ -54,3 +54,5 @@ print("客户端已成功实例化,发送认证请求。")
|
|
54
54
|
|
55
55
|
其他调用方法一致,调用相应的API文件里想要的相应的功能
|
56
56
|
|
57
|
+
此处实盘为1,模拟盘为0,与官方文档相反
|
58
|
+
|
@@ -1,9 +1,9 @@
|
|
1
1
|
from setuptools import setup,find_packages
|
2
2
|
setup(name='okxv5',
|
3
|
-
version='1.8.
|
3
|
+
version='1.8.10',
|
4
4
|
author='',
|
5
5
|
author_email='',
|
6
|
-
description=f'
|
6
|
+
description=f'自己个人上传使用,精力有限没有整理调用方法,不知道怎么调用的可以查看源码发给AI,有疑问联系QQ:935233452 ',
|
7
7
|
long_description=open('说明', 'r', encoding='utf-8').read(),
|
8
8
|
long_description_content_type='',
|
9
9
|
url='',
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|