Name | okx-candle JSON |
Version |
2.0.1
JSON |
| download |
home_page | https://github.com/pyted/okx_candle |
Summary | OKX local and real-time market candle server |
upload_time | 2023-10-21 06:43:38 |
maintainer | |
docs_url | None |
author | pyted |
requires_python | >=3.6.0 |
license | MIT |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Okx_candle v2.0.1 (文档待更新A)
## 1 Okx_candle的设计目的?
**1.为本地模拟交易提供历史数据**
- 支持OKX交易所中:SPOT现货交易、SWAP永续合约、FUTURES交割合约、OPTION期权的历史K线下载、管理与快速读取。
**2.为实盘交易决策依据**
- 支持现货、合约与期权产品实时最新历史K线数据的缓存更新
- 获取实时行情数据
**与Binance_candle的使用方法95%以上相似,降低多平台量化交易者的学习成本**
## 2 安装Okx_candle
GITHUB:https://github.com/pyted/okx_candle
```cmd
pip3 install okx_candle
```
## 3 快速开始
### 3.1 维护产品实时历史K线数据candle_map
以永续合约为例,运行run_candle_map函数后,会以多线程的方式维护candle_map属性,保证candle_map的时效性。
candle_map的格式:candle_map[\<symbol:str\>] = \<candle:np.ndarray\>
```python
from okx_candle import CandleServer
from pprint import pprint
candleServer = CandleServer('SWAP') # SWAP 永续合约
candleServer.run_candle_map()
pprint(candleServer.candle_map)
```
输出:
```text
>> {
>> 'BTC-USD-SWAP': array([[1.67556558e+12, 2.33180000e+04, 2.33181000e+04, ...,
>> 1.92990000e+00, 4.50000000e+04, 1.00000000e+00],
>> [1.67556564e+12, 2.33178000e+04, 2.33178000e+04, ...,
>> 7.12200000e-01, 1.66000000e+04, 1.00000000e+00],
>> [1.67556570e+12, 2.33078000e+04, 2.33078000e+04, ...,
>> 6.67600000e+00, 1.55600000e+05, 1.00000000e+00],
>> ...,
>> [1.67573820e+12, 2.28659000e+04, 2.28868000e+04, ...,
>> 3.51203000e+01, 8.03500000e+05, 1.00000000e+00],
>> [1.67573826e+12, 2.28770000e+04, 2.28849000e+04, ...,
>> 1.07466000e+01, 2.45900000e+05, 1.00000000e+00],
>> [1.67573832e+12, 2.28851000e+04, 2.28872000e+04, ...,
>> 7.61250000e+00, 1.74200000e+05, 1.00000000e+00]]),
>> ... ...
>> }
```
### 3.2 每日定时下载历史K线
以现货交易为例,每天定时下载前一天的历史K线数据。
```python
from okx_candle import CandleServer
candleServer = CandleServer('SPOT') # SPOT:现货交易
candleServer.download_daily()
```
### 3.3 获取实时全部产品的行情信息
以SWAP永续合约为例,获取实时行情信息
```python
from okx_candle import CandleServer
from pprint import pprint
candleServer = CandleServer('SWAP') # SWAP 永续合约
bookTickerMap = candleServer.market.get_tickersMap()
pprint(bookTickerMap)
```
输出:
```text
>> {'code': '0',
>> 'data': {'1INCH-USD-SWAP': {'askPx': '0.5533',
>> 'askSz': '25',
>> 'bidPx': '0.5529',
>> 'bidSz': '25',
>> 'high24h': '0.5731',
>> 'instId': '1INCH-USD-SWAP',
>> 'instType': 'SWAP',
>> 'last': '0.5534',
>> 'lastSz': '25',
>> 'low24h': '0.5449',
>> 'open24h': '0.5702',
>> 'sodUtc0': '0.5535',
>> 'sodUtc8': '0.5705',
>> 'ts': '1675746122612',
>> 'vol24h': '38496',
>> 'volCcy24h': '686356.4046'},
>> '1INCH-USDT-SWAP': {'askPx': '0.5529',
>> 'askSz': '602',
>> 'bidPx': '0.5528',
>> 'bidSz': '1309',
>> 'high24h': '0.5742',
>> 'instId': '1INCH-USDT-SWAP',
>> 'instType': 'SWAP',
>> 'last': '0.5528',
>> 'lastSz': '1',
>> 'low24h': '0.5447',
>> 'open24h': '0.5697',
>> 'sodUtc0': '0.5545',
>> 'sodUtc8': '0.5698',
>> 'ts': '1675746159138',
>> 'vol24h': '11849879',
>> 'volCcy24h': '11849879'},
>> ... ...
>> },
>> 'msg': ''}
```
## 4 历史K线candle的数据说明
### 4.1 K线的格式
为了保证运算的速度,candle采用np.ndarray类型存储。
|列索引|参数名|字段解释|例子|
|:---|:---|:---|:---|
|0|ts|开盘时间|1597026383085.0|
|1|o|开盘价格|3.721|
|2|h|最高价格|3.743|
|3|l|最低价格|3.677|
|4|c|收盘价格|3.708|
|5|vol|交易量,以张为单位<br/>如果是衍生品合约,数值为合约的张数<br/>如果是币币/币币杠杆,数值为交易货币的数量|8422410.0|
|6|volCcy|交易量,以币为单位<br/>如果是衍生品合约,数值为交易货币的数量<br/>如果是币币/币币杠杆,数值为计价货币的数量|22698348.04828491|
|7|volCcyQuote|交易量,以计价货币为单位<br/>如:BTC-USDT和BTC-USDT-SWAP单位均是 USDT;<br/>BTC-USD-SWAP 单位是 USD|12698348.04828491|
|8|confirm|K线状态<br/>0 代表 K 线未完结<br/>1 代表 K 线已完结|1.0|
官方返回的字段类型均为字符串,但对于历史K线数据,Okx_candle中均以np.float64作为存储格式。
注:Python对于数字精度的支持并不优秀,对于模拟运算或者实盘决策,使用浮点数是安全的,但对于交易接口,例如下单的数量和金额,采用字符串类型更为安全,在全部pyted的量化交易架构中,与订单相关的数字对象均采用字符串用于提交。
### 4.2 K线的存储规则
本地历史K线数据是按照日期拆分拆分存储,每个CSV文件保存指定日期指定产品的全部K线数据。
每个CSV文件的时间跨度为:00:00:00 ~ 24:00:00 - \<bar\>
如果保存ETH 2023年1月1日 时间粒度bar是1分钟的数据:CSV中的数据条数是1440条,起点为时间:00:00:00,终点时间为:23:59:00,同样如果保存时间粒度bar是1小时的数据,存储的数据时间终点是:23:00:00
由于是按照日期分片存储,'2023-01-01'在美式日期与中国日期对应的时间戳并不相同,okx_candle默认采用'Asia/Shanghai'时区。

### 4.3 K线的安全性
Okx_candle中的全部K线数据均会受到严格的验证,保证数据的安全性。
- valid_interval 验证数据时间间隔 = \<bar\>
- valid_start 验证数据时间起点
- valid_end 验证数据时间终点
- valid_length 验证数据长度 (仅在维护实时历史K线数据服务的时候使用)
## 5 产品类别instType代号
在实例化CandlerServer时,需要可以传递两个参数,一个是instType产品类别,另一个是rule服务规则。
|产品类别|代号|
|:---|:---|
|现货交易|SPOT|
|永续合约|SWAP|
|交割合约|FUTURES|
|期权|OPTION|
**注:Okx_candle的instType不支持Margin(现货杠杆)**
## 6 K线服务规则CandleRule
### 6.1 规则属性总览
CandleRule是CandleServer的运行规则,用户可以自定义规则内容以适应不同的交易场景。
```python
from okx_candle import CandleServer, CandleRule
CandleRule.BAR = '5m' # K线的时间粒度调整为5分钟
candleServer = CandleServer('SPOT', CandleRule)
```
在CandleServer中,有两个重要的异步方法:
- run_candle_map 异步的方式维护实时历史K线字典 candle_map
- download_daily 异步的方式每日下载上一天的K线数据
这两个方法均受到CandleRule的规则约束。下面是CandleRule中各个属性的作用规则。

### 6.2 产品名称条件
#### 6.2.1 SYMBOLS 产品名称
类型:Union[str,list],默认值:'all'
|例子|解释|
|:---|:---|
|SYMBOLS = 'all'|维护产品类型中的全部子产品|
|SYMBOLS = ['BTC-USDT','ETC-USDT']|仅维护BTC-USDT与ETC-USDT|
#### 6.2.2 SYMBOLS_FILTER 过滤产品
类型:list,默认值:''
|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOLS_FILTER = ['BTC-USDT']|维护除了BTC-USDT之外全部的产品|
#### 6.2.3 SYMBOL_CONTAINS 产品名称中需包含的内容
类型:str,默认值:''
过滤名称中不包含此内容的产品(区分大小写)。
|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOL_CONTAINS = 'BTC'|维护名称中包含'BTC'的全部产品|
#### 6.2.4 SYMBOL_ENDSWITH 产品名称必须以何结尾
类型:str,默认值:''
过滤名称中不以此内容结尾的产品(区分大小写)。
|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOL_ENDSWITH = 'USDT'|维护名称以USDT结尾的全部产品|
如果你仅要维护以USDT为交易货币的产品,可以设置:
- SYMBOLS = 'all'
- SYMBOLS_ENDSWITH = 'USDT'
### 6.3 K线参数
#### 6.3.1 BAR 时间粒度
类型:str,默认值:candlelite.crypto.okx_lite.OKX_DEFAULT_BAR
历史K线的时间粒度,目前仅支持以分m、小时h、天d为单位。
|例子|解释|
|:---|:---|
|1m|1分钟|
|5m|5分钟|
|15m|15分钟|
|1h|1小时|
|4h|4小时|
|1d|1天|
|..|...|
因为Okx_candle对于K线数据的读取使用的是candlelite,许多默认值使用的是candlelite中settings的配置内容。
```python
# 查看默认配置信息
candlelite show_settings
# 在终端中修改默认配置
candlelite console_settings
# 查看配置文件的路径->用编辑器自行编辑修改
candlelite settings_path
```
### 6.4 K线下载相关
#### 6.4.1 TIMEZONE 时区
类型:Union[str,None],默认值:candlelite.crypto.okx_lite.OKX_TIMEZONE
TIMEZONE所起的作用:
- 数据存储路径中的文件夹命名
- 划分一天的起始与终止时间戳
#### 6.4.2 CANDLE_DIR 日期为分割存储的数据路径
类型:str,默认值:candlelite.crypto.okx_lite.OKX_CANDLE_DATE_BASE_DIR
#### 6.4.3 DOWNLOAD_TIME 每日下载昨日K线数据的时间
类型:str,默认值:'00:10:00'
DOWNLAOD_TIME可以决定每天的哪个时间点下载昨日的历史K线数据,作用于两个异步函数:
- run_candle_map
- download_daily
这两个函数的下载方式不相同,run_candle_map函数会在DOWNLOAD_TIME时刻取出candle_map字典中昨日的K线数据,保存到本地。donwload_daily函数会在DOWNLOAD_TIME时刻向官方发送请求获取昨日K线数据,再保存到本地。
DOWNLOAD_TIME的时间格式为:%H:%M:%S,例如DOWNLOAD_TIME = '01:00:00'。
DOWNLOAD_TIME = None 表示禁用实时K线维护的每日下载功能。
需要注意的问题:
1. DOWNLOAD_TIME不应该过早,官方整合上一个单位时间的历史K线一般会有0~2分钟的延误,所以如果BAR='1m',在'00:00:00'可能无法获取昨日'23:59:00'时刻的历史K线,这样会引发错误。
2. DOWNLOAD_TIME对于run_candle_map异步线程来说,会从candle_map字典中获取昨日的K线数据,所以如果此时candle_map中昨日历史K线数据不足,也会引发异常,可以加大维护的K线长度LENGTH并调整合理的DOWNLOAD_TIME时刻。
### 6.5 秘钥
#### 6.5.1 KEY、SECRET与PASSPHRASE
类型:str,默认值:''
OKX获取行情数据,可以不填写秘钥。
### 6.6 run_candle_map实时K线相关配置
#### 6.6.1 LOCAL_CANDLE_DAYS 启动后下载近期多少日的历史K线数据
类型:Union[int,None],默认值:2(单位:天)
在启动实时K线服务后,CandleServer将校验本地是否有最近的LOCAL_CANDLE_DAYS产品K线数据,如果没有,则会自动下载
LOCAL_CANDLE_DAYS = None 表示禁用此功能
#### 6.6.2 LENGTH 保留实时K线的长度
类型:int,默认值:2880
保留candle_map字典中各个产品的最新K线数据的行数。
如果某产品刚刚上线,数据长度小于LENGTH,则会被过滤。
#### 6.6.3 UPDATE_INTERVAL_SECONDS 实时K线的更新间隔
类型:int,默认值:3(单位:秒)
将candle_map中的历史K线数据更新到最新时间,每次更新的时间间隔。
#### 6.6.4 CACHE_DELAY_SECONDS 实时K线本地缓存的时间间隔
类型:Union[int,None],默认值:3600(单位:秒)
间隔多少秒,将candle_map保存到本地,这样可以在服务重启后,快速读取缓存数据,减少访问量与等待时间。
CACHE_DELAY_SECONDS = None 表示禁用此功能
#### 6.6.5 CACHE_DIR 缓存数据路径
类型:str,默认值:'./OKX_CACHE'
candle_map缓存保存到的文件路径。
### 6.7 日志
#### 6.7.1 LOG_DIRPATH 日志文件夹路径
类型:str,默认值:./OKX_CANDLE_SERVER_LOG_DATA'
Okx_candle中的日志文件按照本地日期与级别分割存储在文件夹中。
#### 6.7.2 LOG_FILE_LEVEL 日志文件级别
类型:str,默认值:'INFO'
储存在日志文件中的级别。
#### 6.7.3 LOG_CONSOLE_LEVEL 日志打印级别
类型:str,默认值:'DEBUG'
终端打印日志的级别。
## 7 维护实时K线字典 candle_map
### 7.1 run_candle_map 方法
CandleServer.run_candle_map先会以堵塞的模式等待第一次candle_map更新完毕,随后以异步多线程的方式实时更新candle_map,以保证数据的实效性与安全性。
如果在更新candle_map中存在某个历史K线有错误,则会从candle_map字典中删除这个symbol的candle。
更新candle_map中默认验证的内容有:
- valid_interval 验证K线时间间隔需要与bar相同
- valid_end 验证K线的最大时间戳要等于被更新时间
- valid_length 验证K线的长度需要严格等于LENGTH
run_candle_map方法执行流程简图:

### 7.2 candle_map 实时K线字典属性
格式:candle_map[\<symbol:str\>] = \<candle:np.ndarray\>
- KEY:symbol 产品名称
- VALUE:candle np.ndarray类型的K线数据
### 7.3 get_candle_security 安全获取实时K线
|参数|类型|说明|
|:---|:---|:---|
|symbol|str|产品名称|
|security_seconds|int|安全间隔(单位:秒)|
为什么要有这个方法:
candle_map会使用基准产品的历史K线最新时间点为基准更新,但是官方更新最近时间点的历史K线数据往往存在0~2分钟的时间差甚至更多,服务器访问更新也需要花费时间,get_candle_security可以验证candle_map中产品的K线最大时间与当前时间的差值,如果差值过大,视为不安全,返回空数组,如果满足在预设时间差值以内,则正常返回。
以永续合约为例,实时更新全部产品的历史K线数据
```python
from okx_candle import CandleServer
import time
candleServer = CandleServer('SWAP')
candleServer.run_candle_map()
while True:
for symbol in candleServer.candle_map.keys():
print(
symbol,
candleServer.get_candle_security(symbol, security_seconds=60)
)
time.sleep(1)
```
### 7.4 close_run_candle_map 关闭实时K线数据更新服务
close_run_candle_map仅作用于异步运行,为了保证异步的安全性,关闭方法会等待异步程序阶段性运行结束后关闭,例如避免在保存本地数据的时候发生了终止,造成数据错误。
## 8 下载历史K线
### 8.1 download_candles_by_date 方法
下载从start日期到end日期(包括end),规则产品的历史K线数据。
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date,None]|None|终止日期 None表示昨日|
|replace|bool|False|如果本地数据已存在,是否下载替换|
start与end支持整数与浮点数类型的**毫秒**时间戳、日期格式的字符串与日期类型。
例如:
```python
start = 1672502400000 # 毫秒时间戳(北京时间2023-01-01 00:00:00)
start = '2023-01-02' # 日期类型字符串(中国时间格式)
start = '01/02/2023' # 日期类型字符串(美国时间格式)
start = pendulum.yesterday('Asia/Shanghai') # 日期类型
start = datetime.date(2023,1,2) # 日期格式
```
如果start或end为日期形式的字符串,Okx_candle会将其转化为CandleRule中TIMEZONE对应的日期。所以中国时间格式与美国时间格式是等价的。
下载从start~end的数据,数据终点是被包含的。
例如:start = '2023-01-01' end = '2023-01-03',会下载 ['2023-01-01','2023-01-02','2023-01-03'] 三天的数据。
以日期为拆分存储,每一天的数据不会包含下一天的时间起点。
例如:
|BAR|每天数据的最后时刻K线的开盘时间|
|:---|:---|
|1m|23:59:00|
|5m|23:55:00|
|1h|23:00:00|
例子:
下载现货BTC-USDT与ETC-USDT,从中国时间2023-01-01~2023-01-10,时间粒度为1m的K线数据。
```python
from okx_candle import CandleServer, CandleRule
CandleRule.BAR = '1m'
CandleRule.SYMBOLS = ['BTC-USDT', 'ETC-USDT']
CandleRule.TIMEZONE = 'Asia/Shanghai'
candleServer = CandleServer('SPOT', CandleRule)
candleServer.download_candles_by_date(
start='2022-01-01',
end='2022-01-10',
)
```
### 8.2 download_daily 方法
每日定点下载昨日历史K线数据的服务,异步执行。
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|start|Union[int,float,str,datetime.date,None]|None|补充下载从start~yesterday的数据 start=None等价于start=yesterday|
|replace|bool|False|本地已存在的数据是否重新下载替换|
download_daily是完全异步执行的,先补充下载start~yesterday的历史K线数据,随后在每天的DOWNLOAD_TIME下载昨日的历史K线数据。
例子:
开启服务,每天定时下载现货产品的历史K线数据,K线参数与时区均等均选择默认值。
```python
from okx_candle import CandleServer
candleServer = CandleServer('SPOT')
candleServer.download_daily()
```
### 8.3 close_download_daily 关闭每日K线下载服务
为了保证异步的安全性,关闭方法会等待异步程序阶段性运行结束后关闭,例如避免在保存本地数据的时候发生了终止,造成数据错误。
## 9 行情数据
### 9.1 行情数据的规则
行情数据支持:SPOT现货、SWAP永续合约、FUTURES交割合约与OPTION期权。
导入行情数据模块
```python
from okx_candle import Market
market = Market(
instType='SPOT', # 产品类型 SPOT | SWAP | FUTURES | OPTION
timezone='Asia/Shanghai' # 时区
)
```
也可以使用CandleServer中的market模块
```python
from okx_candle import CandleServer
candleServer = CandleServer('SPOT')
market = candleServer.market
```
行情数据的返回格式均为:{'code':<状态码>, 'data':<主体数据>, 'msg':<提示信息>}
状态码为'0'表示成功。
### 9.2 行情信息
#### 9.2.1 get_tickers 全部产品的行情列表
例如获取现货交易全部的行情信息列表
```python
from okx_candle.market import Market
from pprint import pprint
tickers = Market('SPOT').get_tickers()
pprint(tickers)
```
输出:
```text
>> {'code': '0',
>> 'data': [{'askPx': '0.00000727',
>> 'askSz': '15.9952',
>> 'bidPx': '0.00000719',
>> 'bidSz': '36.1832',
>> 'high24h': '0.00000725',
>> 'instId': 'BCD-BTC',
>> 'instType': 'SPOT',
>> 'last': '0.00000725',
>> 'lastSz': '7.0502',
>> 'low24h': '0.00000644',
>> 'open24h': '0.00000689',
>> 'sodUtc0': '0.0000067',
>> 'sodUtc8': '0.00000664',
>> 'ts': '1675746511714',
>> 'vol24h': '31478.67',
>> 'volCcy24h': '0.2129'},
>> ... ...
>> ],
>> 'msg': ''}
```
#### 9.2.2 get_tickersMap 全部产品的行情字典
例如获取SWAP永续合约交易全部的行情信息字典
```python
from okx_candle.market import Market
from pprint import pprint
tickersMap = Market('SPOT').get_tickersMap()
pprint(tickersMap)
```
输出:
```text
>> {'code': '0',
>> 'data': {'1INCH-USDC': {'askPx': '0.5543',
>> 'askSz': '488.759',
>> 'bidPx': '0.5532',
>> 'bidSz': '22.1968',
>> 'high24h': '0.5727',
>> 'instId': '1INCH-USDC',
>> 'instType': 'SPOT',
>> 'last': '0.5543',
>> 'lastSz': '94.4831',
>> 'low24h': '0.5467',
>> 'open24h': '0.57',
>> 'sodUtc0': '0.5487',
>> 'sodUtc8': '0.5704',
>> 'ts': '1675746666011',
>> 'vol24h': '12975.2687',
>> 'volCcy24h': '7331.7333'},
>> '1INCH-USDT': {'askPx': '0.5536',
>> 'askSz': '500.647097',
>> 'bidPx': '0.5534',
>> 'bidSz': '463.1052',
>> 'high24h': '0.5736',
>> 'instId': '1INCH-USDT',
>> 'instType': 'SPOT',
>> 'last': '0.5535',
>> 'lastSz': '36.127166',
>> 'low24h': '0.5444',
>> 'open24h': '0.5696',
>> 'sodUtc0': '0.5541',
>> 'sodUtc8': '0.5699',
>> 'ts': '1675746689411',
>> 'vol24h': '2620706.912348',
>> 'volCcy24h': '1471994.111741'},
>> ... ...
>> },
>> 'msg': ''}
```
#### 9.2.3 get_ticker单个产品的行情信息
获取现货交易BTC-USDT的行情信息
```python
from okx_candle.market import Market
from pprint import pprint
ticker= Market('SPOT').get_ticker('BTC-USDT')
pprint(ticker)
```
输出:
```text
>> {'code': '0',
>> 'data': {'askPx': '22899',
>> 'askSz': '2.33950433',
>> 'bidPx': '22898.9',
>> 'bidSz': '0.0158674',
>> 'high24h': '23158.5',
>> 'instId': 'BTC-USDT',
>> 'instType': 'SPOT',
>> 'last': '22899.1',
>> 'lastSz': '0.0088645',
>> 'low24h': '22617.6',
>> 'open24h': '22873.4',
>> 'sodUtc0': '22761.7',
>> 'sodUtc8': '23044',
>> 'ts': '1675746841912',
>> 'vol24h': '4964.63889278',
>> 'volCcy24h': '113460685.97182664'},
>> 'msg': ''}
```
### 9.3 深度信息
#### 9.3.1 get_books 获取指定数量的交易深度
获取BTC-USDT数量为10的交易深度
```python
from okx_candle.market import Market
from pprint import pprint
# 获取BTC-USDT数量为10的交易深度
books = Market('SPOT').get_books(symbol='BTC-USDT', sz=10)
pprint(books)
```
输出:
```text
>> {'code': '0',
>> 'data': {'asks': [['22984.1', '0.04262762', '0', '1'],
>> ['22984.4', '0.00001418', '0', '1'],
>> ['22984.6', '0.00122351', '0', '1'],
>> ['22984.7', '0.18242595', '0', '1'],
>> ['22984.8', '0.43504989', '0', '1'],
>> ['22984.9', '0.02', '0', '1'],
>> ['22985', '0.00073602', '0', '2'],
>> ['22985.2', '0.00027888', '0', '2'],
>> ['22985.6', '0.06865', '0', '1'],
>> ['22986', '0.2', '0', '1']],
>> 'bids': [['22984', '2.39785187', '0', '6'],
>> ['22983.9', '0.50376', '0', '1'],
>> ['22983.8', '0.50376', '0', '1'],
>> ['22983.3', '0.52508576', '0', '3'],
>> ['22983.2', '0.70027528', '0', '3'],
>> ['22982.4', '0.28512292', '0', '1'],
>> ['22982.2', '0.48940938', '0', '2'],
>> ['22982.1', '0.14110164', '0', '3'],
>> ['22981.7', '0.405', '0', '1'],
>> ['22981.4', '1.07226237', '0', '1']],
>> 'ts': '1675751273508'},
>> 'msg': ''}
```
#### 9.3.2 get_books_lite 获取产品轻量深度
获取BTC-USDT产品轻量深度
```python
from okx_candle.market import Market
from pprint import pprint
# 获取BTC-USDT产品轻量深度
books_lite = Market('SPOT').get_books_lite(symbol='BTC-USDT')
pprint(books_lite)
```
输出:
```text
>> {'code': '0',
>> 'data': {'asks': [['22971.9', '0.71286', '0', '2'],
>> ['22973.5', '0.23401145', '0', '1'],
>> ['22973.6', '0.081', '0', '1'],
>> ['22973.7', '0.43499859', '0', '1'],
>> ['22974', '0.06903', '0', '1'],
>> ['22974.4', '0.004', '0', '1'],
>> ['22974.5', '0.5', '0', '1'],
>> ['22974.6', '0.43564805', '0', '1'],
>> ['22974.7', '1.08912', '0', '1'],
>> ['22975.2', '0.47865', '0', '1'],
>> ['22975.7', '1.00070534', '0', '2'],
>> ['22975.8', '1.19917196', '0', '2'],
>> ['22976.1', '0.89389485', '0', '2'],
>> ['22976.3', '1.02', '0', '1'],
>> ['22976.5', '1.23', '0', '1'],
>> ['22976.9', '0.522369', '0', '1'],
>> ['22977', '0.06903', '0', '1'],
>> ['22977.2', '0.459716', '0', '2'],
>> ['22977.6', '0.19495', '0', '1'],
>> ['22977.7', '0.69824', '0', '3'],
>> ['22978.4', '0.04353153', '0', '1'],
>> ['22978.6', '0.03101096', '0', '1'],
>> ['22978.8', '0.19495', '0', '1'],
>> ['22979.8', '0.10400006', '0', '1'],
>> ['22979.9', '0.21753307', '0', '2']],
>> 'bids': [['22971.8', '0.46432166', '0', '9'],
>> ['22971.7', '0.21764725', '0', '1'],
>> ['22970.7', '0.25', '0', '1'],
>> ['22970.5', '0.25', '0', '1'],
>> ['22970.3', '0.45233576', '0', '1'],
>> ['22970.2', '1.32413482', '0', '3'],
>> ['22970.1', '0.26602378', '0', '1'],
>> ['22970', '2.17468626', '0', '2'],
>> ['22969.6', '0.06903', '0', '1'],
>> ['22969.5', '0.405', '0', '1'],
>> ['22969.1', '0.02829885', '0', '1'],
>> ['22969', '0.01004368', '0', '1'],
>> ['22968.9', '0.19497', '0', '1'],
>> ['22968.7', '1.026129', '0', '2'],
>> ['22968.6', '0.02211866', '0', '1'],
>> ['22968.5', '0.004', '0', '1'],
>> ['22968.4', '0.48971419', '0', '1'],
>> ['22968.2', '0.43536205', '0', '1'],
>> ['22968.1', '0.0131622', '0', '1'],
>> ['22968', '0.19496', '0', '1'],
>> ['22967.9', '0.10111929', '0', '1'],
>> ['22967.8', '0.049236', '0', '1'],
>> ['22967.6', '1.08912', '0', '1'],
>> ['22967.4', '0.00229642', '0', '1'],
>> ['22967.1', '15.97347853', '0', '1']],
>> 'ts': '1675751401319'},
>> 'msg': ''}
```
### 9.4 交易规范
#### 9.4.1 缓存机制
交易规范的返回信息内容较多,且本身改动频率较小,在Okx_candle中默认采用缓存的方式获取交易规范结果,以提高速度。
第一次获取交易规范信息会向官方发送请求,将请求结果保存在缓存中,随后再次获取交易规范信息会验证上次缓存的数据是否符合过期,过期则重新访问,否则返回缓存数据。
如果不使用缓存,可以将过期时间expire_seconds设置为0(单位:秒)。
#### 9.4.2 get_exchangeInfos 完整的交易规范
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|
|uly|str|''|标的指数,仅适用于交割/永续/期权,期权必填|
获取现货交易的交易规则信息。
```python
from okx_candle import Market
from pprint import pprint
exchangeInfos = Market('SPOT').get_exchangeInfos()
pprint(exchangeInfos)
```
输出:
```text
>> {'code': '0',
>> 'data': [{'alias': '',
>> 'baseCcy': 'BTC',
>> 'category': '1',
>> 'ctMult': '',
>> 'ctType': '',
>> 'ctVal': '',
>> 'ctValCcy': '',
>> 'expTime': '',
>> 'instFamily': '',
>> 'instId': 'BTC-USDT',
>> 'instType': 'SPOT',
>> 'lever': '10',
>> 'listTime': '1548133413000',
>> 'lotSz': '0.00000001',
>> 'maxIcebergSz': '9999999999',
>> 'maxLmtSz': '9999999999',
>> 'maxMktSz': '1000000',
>> 'maxStopSz': '1000000',
>> 'maxTriggerSz': '9999999999',
>> 'maxTwapSz': '9999999999',
>> 'minSz': '0.00001',
>> 'optType': '',
>> 'quoteCcy': 'USDT',
>> 'settleCcy': '',
>> 'state': 'live',
>> 'stk': '',
>> 'tickSz': '0.1',
>> 'uly': ''},
>> 'state': 'live',
>> 'stk': '',
>> 'tickSz': '0.01',
>> 'uly': ''},
>> ... ...
>> ],
>> 'msg': ''}
```
#### 9.4.3 get_exchangeInfo 单个产品的交易规范
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|symbol|str|无|产品名称|
|expire_seconds|int|300|缓存过期时间|
|uly|str|''|标的指数,仅适用于交割/永续/期权,期权必填|
获取永续合约中BTC-USDT-SWAP的交易规范
```python
from okx_candle import Market
from pprint import pprint
exchangeInfos = Market('SWAP').get_exchangeInfo(symbol='BTC-USDT-SWAP')
pprint(exchangeInfos)
```
输出:
```text
>> {'code': '0',
>> 'data': {'alias': '',
>> 'baseCcy': '',
>> 'category': '1',
>> 'ctMult': '1',
>> 'ctType': 'linear',
>> 'ctVal': '0.01',
>> 'ctValCcy': 'BTC',
>> 'expTime': '',
>> 'instFamily': 'BTC-USDT',
>> 'instId': 'BTC-USDT-SWAP',
>> 'instType': 'SWAP',
>> 'lever': '125',
>> 'listTime': '1611916828000',
>> 'lotSz': '1',
>> 'maxIcebergSz': '100000000',
>> 'maxLmtSz': '100000000',
>> 'maxMktSz': '10000',
>> 'maxStopSz': '10000',
>> 'maxTriggerSz': '100000000',
>> 'maxTwapSz': '100000000',
>> 'minSz': '1',
>> 'optType': '',
>> 'quoteCcy': '',
>> 'settleCcy': 'USDT',
>> 'state': 'live',
>> 'stk': '',
>> 'tickSz': '0.1',
>> 'uly': 'BTC-USDT'},
>> 'msg': ''}
```
#### 9.4.4 get_symbols_trading_on 获取可以交易的产品名称
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|
|uly|str|''|标的指数,仅适用于交割/永续/期权,期权必填|
获取交割合约正在交易的产品名称列表
```python
from okx_candle import Market
from pprint import pprint
exchangeInfos = Market('FUTURES').get_symbols_trading_on()
pprint(exchangeInfos)
```
输出:
```text
>> {'code': '0',
>> 'data': ['BTC-USD-230210',
>> 'BTC-USD-230217',
>> 'BTC-USD-230331',
>> 'BTC-USD-230630',
>> 'ETH-USD-230210',
>> ... ...
>> ],
>> 'msg': ''}
```
#### 9.4.5 get_symbols_trading_off 获取不可交易的产品名称
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|
|uly|str|''|标的指数,仅适用于交割/永续/期权,期权必填|
获取交割合约不可交易产品名称列表
```python
from okx_candle import Market
from pprint import pprint
exchangeInfos = Market('FUTURES').get_symbols_trading_off()
pprint(exchangeInfos)
```
输出:
```text
>> {'code': '0', 'data': [], 'msg': ''}
```
## 10 历史K线管理
### 10.1 OkxLite 简介
OkxLite基于candlelite的IO为底层,用于维护本地OKX历史K线数据,由于OkxLite采用日期分割的CSV文件存储,不需要安装第三方数据库。并且由于默认系统路径的配置可以使不同路径的项目共享历史K线数据。
```python
from okx_candle import OkxLite
okxLite = OkxLite()
candle = okxLite.load_candle_by_date(
instType='SPOT',
symbol='BTC-USDT',
start='2023-02-05',
end='2023-02-06',
)
print(candle)
```
对于任何历史K线数据的读取,都需要时区timezone、时间粒度bar、数据位置base_dir,如果在调用函数的时候不指定这三个内容,将使用candlelite的默认配置。
你可以在candlelite中查看OKX默认的配置内容。
```cmd
candlelite show_settings # 查看配置信息
```
输出:
```text
>> # 历史K线数据根目录
>> CANDLE_BASE_DIR = 'CANDLELITE_DATA'
>> # OKX以日期为单位的存储目录
>> OKX_DATE_DIRNAME = 'OKX'
>> # OKX以文件为单位的存储目录
>> OKX_FILE_DIRNAME = 'OKX_FILE'
>> # OKX的默认时区
>> OKX_TIMEZONE = 'Asia/Shanghai'
>> # OKX的默认时间粒度
>> OKX_DEFAULT_BAR = '1m'
>> # BINANCE以日期为单位的存储目录
>> BINANCE_DATE_DIRNAME = 'BINANCE'
>> # BINANCE以文件为单位的存储目录
>> BINANCE_FILE_DIRNAME = 'BINANCE_FILE'
>> # BINANCE的默认时区
>> BINANCE_TIMEZONE = 'America/New_York'
>> # BINANCE的默认时间粒度
>> BINANCE_DEFAULT_BAR = '1m'
```
修改配置内容
```cmd
candlelite console_settings
```
为了让多个不同路径本地项目可以共享数据,可以将"CANDLE_BASE_DIR"设置为绝对路径,例如:'/root/CANDLELITE_DATA' 或 'd:\CANDLELITE_DATA'。
### 10.2 读取数据
#### 10.2.1 load_candle_by_date
load_candle_by_date 以日期为单位读取单个产品历史K线数据
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|instType|str|无|产品类别(现货:SPOT、永续合约:SWAP、交割合约:FUTURES、期权:OPTION)|
|symbol|str|无|产品名称|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Okx的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Okx的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Okx的默认时间粒度|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|
读取永续合约中BTC-USDT-SWAP从2023-02-05 ~ 2023-02-06 的历史K线数据
```python
from okx_candle import OkxLite
from okx_candle.utils import candle_to_df
okxLite = OkxLite()
candle = okxLite.load_candle_by_date(
instType='SWAP',
symbol='BTC-USDT-SWAP',
start='2023-02-05',
end='2023-02-06',
)
print(candle)
print(candle_to_df(candle))
```
输出:
```text
>> [[1.67552640e+12 2.34210000e+04 2.34210000e+04 ... 1.43600000e+01
>> 3.36317906e+05 1.00000000e+00]
>> [1.67552646e+12 2.34180000e+04 2.34204000e+04 ... 1.14600000e+01
>> 2.68392212e+05 1.00000000e+00]
>> [1.67552652e+12 2.34189000e+04 2.34189000e+04 ... 2.64600000e+01
>> 6.19663133e+05 1.00000000e+00]
>> ...
>> [1.67569902e+12 2.30466000e+04 2.30646000e+04 ... 6.09610000e+02
>> 1.40355779e+07 1.00000000e+00]
>> [1.67569908e+12 2.30215000e+04 2.30581000e+04 ... 2.97780000e+02
>> 6.86059486e+06 1.00000000e+00]
>> [1.67569914e+12 2.30259000e+04 2.30500000e+04 ... 4.57730000e+02
>> 1.05412472e+07 1.00000000e+00]]
>> ts o h ... volCcy volCcyQuote confirm
>> 0 2023-02-05 00:00:00 23421.0 23421.0 ... 14.36 3.363179e+05 1
>> 1 2023-02-05 00:01:00 23418.0 23420.4 ... 11.46 2.683922e+05 1
>> 2 2023-02-05 00:02:00 23418.9 23418.9 ... 26.46 6.196631e+05 1
>> 3 2023-02-05 00:03:00 23418.9 23418.9 ... 29.65 6.943548e+05 1
>> 4 2023-02-05 00:04:00 23418.8 23418.8 ... 9.19 2.152163e+05 1
>> ... ... ... ... ... ... ... ...
>> 2875 2023-02-06 23:55:00 22904.4 22926.9 ... 190.28 4.359824e+06 1
>> 2876 2023-02-06 23:56:00 22905.9 23059.7 ... 2489.29 5.725731e+07 1
>> 2877 2023-02-06 23:57:00 23046.6 23064.6 ... 609.61 1.403558e+07 1
>> 2878 2023-02-06 23:58:00 23021.5 23058.1 ... 297.78 6.860595e+06 1
>> 2879 2023-02-06 23:59:00 23025.9 23050.0 ... 457.73 1.054125e+07 1
>>
>> [2880 rows x 9 columns]
```
#### 10.2.1 load_candle_map_by_date
load_candle_map_by_date 以日期为单位读取全部产品历史K线数据字典
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|instType|str|无|产品类别(现货:SPOT、永续合约:SWAP、交割合约:FUTURES、期权:OPTION)|
|symbols|list|无|产品名称列表,如果为空列表,读取从start~end范围数据完整的全部产品|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Okx的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Okx的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Okx的默认时间粒度|
|contains|str|''|产品名称中需包含的内容,不满足则过滤读取|
|endswith|str|''|产品名称中需以何结尾,不满足则过滤读取|
|p_num|int|4|使用多进程加速读取,进程个数|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|
读取SWAP永续合约从2023-02-05 ~ 2023-02-06 的历史K线数据字典
```python
from okx_candle import OkxLite
from pprint import pprint
okxLite = OkxLite()
candle_map = okxLite.load_candle_map_by_date(
instType='SWAP',
symbols=[],
start='2023-02-05',
end='2023-02-06',
)
pprint(candle_map)
```
输出:
```text
>> {'1INCH-USD-SWAP': array([[1.67552640e+12, 5.93500000e-01, 5.93500000e-01, ...,
>> 3.07623541e+04, 1.82200000e+04, 1.00000000e+00],
>> [1.67552646e+12, 5.91000000e-01, 5.91000000e-01, ...,
>> 2.03057100e+02, 1.20000000e+02, 1.00000000e+00],
>> [1.67552652e+12, 5.89700000e-01, 5.89700000e-01, ...,
>> 1.16300361e+04, 6.85000000e+03, 1.00000000e+00],
>> ...,
>> [1.67569902e+12, 5.69000000e-01, 5.69000000e-01, ...,
>> 1.00271660e+03, 5.70000000e+02, 1.00000000e+00],
>> [1.67569908e+12, 5.69300000e-01, 5.69300000e-01, ...,
>> 1.12456120e+03, 6.40000000e+02, 1.00000000e+00],
>> [1.67569914e+12, 5.69900000e-01, 5.69900000e-01, ...,
>> 2.63204100e+02, 1.50000000e+02, 1.00000000e+00]]),
>> '1INCH-USDT-SWAP': array([[1.67552640e+12, 5.92800000e-01, 5.92800000e-01, ...,
>> 2.85980000e+04, 1.69345529e+04, 1.00000000e+00],
>> [1.67552646e+12, 5.91600000e-01, 5.91900000e-01, ...,
>> 6.96700000e+03, 4.12095040e+03, 1.00000000e+00],
>> [1.67552652e+12, 5.90800000e-01, 5.90800000e-01, ...,
>> 4.13370000e+04, 2.43720806e+04, 1.00000000e+00],
>> ...,
>> [1.67569902e+12, 5.68500000e-01, 5.68900000e-01, ...,
>> 1.28770000e+04, 7.31486060e+03, 1.00000000e+00],
>> [1.67569908e+12, 5.67900000e-01, 5.69400000e-01, ...,
>> 1.89130000e+04, 1.07618407e+04, 1.00000000e+00],
>> [1.67569914e+12, 5.68900000e-01, 5.70200000e-01, ...,
>> 8.65900000e+03, 4.93041580e+03, 1.00000000e+00]]),
>> ... ...
>> }
```
### 10.3 保存数据
#### 10.3.1 save_candle_by_date
save_candle_by_date 以日期为单位保存单个产品历史K线数据
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|candle|np.ndarray|无|历史K线数据|
|instType|str|无|产品类别(现货:SPOT、永续合约:SWAP、交割合约:FUTURES、期权:OPTION)|
|symbol|str|无|产品名称|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Okx的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Okx的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Okx的默认时间粒度|
|replace|bool|False|是否替换本地数据|
|drop_duplicate|bool|True|是否去重|
|sort|bool|True|是否按照时间戳排序|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|
读取永续合约中BTC-USDT-SWAP从 2023-02-01 ~ 2023-02-06 日的历史K线数据,截取2023-02-05日的数据,保存到指定文件夹。
```python
from okx_candle import OkxLite
instType = 'SWAP'
symbol = 'BTC-USDT-SWAP'
okxLite = OkxLite()
# 读取
candle = okxLite.load_candle_by_date(
instType=instType,
symbol=symbol,
start='2023-02-01',
end='2023-02-6',
)
# 保存
okxLite.save_candle_by_date(
candle=candle,
instType=instType,
symbol=symbol,
start='2023-02-05',
end='2023-02-05',
base_dir='./target_dir'
)
```
#### 10.3.2 save_candle_map_by_date
save_candle_by_date 以日期为单位保存产品历史K线数据字典
|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|candle_map|dict|无|历史K线数据字典|
|instType|str|无|产品类别(现货:SPOT、永续合约:SWAP、交割合约:FUTURES、期权:OPTION)|
|symbols|list|无|保存的产品名称,空列表表示candle_map中的全部产品|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Okx的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Okx的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Okx的默认时间粒度|
|replace|bool|False|是否替换本地数据|
|drop_duplicate|bool|True|是否去重|
|sort|bool|True|是否按照时间戳排序|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|
读取现货从2023-01-01 ~ 2023-01-10 的历史K线数据字典,截取2023-01-05 ~ 2023-01-06 日期范围数据保存到指定文件夹中。
```python
from okx_candle import OkxLite
instType = 'SWAP'
okxLite = OkxLite()
# 读取
candle_map = okxLite.load_candle_map_by_date(
instType='SWAP',
symbols=[],
start='2023-01-01',
end='2023-01-10',
)
# 保存
okxLite.save_candle_map_by_date(
candle_map=candle_map,
instType=instType,
symbols=[],
start='2023-01-05',
end='2023-01-06',
base_dir='./target_dir'
)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/pyted/okx_candle",
"name": "okx-candle",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6.0",
"maintainer_email": "",
"keywords": "",
"author": "pyted",
"author_email": "pyted@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/14/3c/becca53eee7b48fb8ba018c1b43c3e7ce07ad59c5a907a167f21589edc37/okx_candle-2.0.1.tar.gz",
"platform": null,
"description": "\n# Okx_candle v2.0.1 (\u6587\u6863\u5f85\u66f4\u65b0A)\n\n## 1 Okx_candle\u7684\u8bbe\u8ba1\u76ee\u7684\uff1f\n\n**1.\u4e3a\u672c\u5730\u6a21\u62df\u4ea4\u6613\u63d0\u4f9b\u5386\u53f2\u6570\u636e**\n\n- \u652f\u6301OKX\u4ea4\u6613\u6240\u4e2d\uff1aSPOT\u73b0\u8d27\u4ea4\u6613\u3001SWAP\u6c38\u7eed\u5408\u7ea6\u3001FUTURES\u4ea4\u5272\u5408\u7ea6\u3001OPTION\u671f\u6743\u7684\u5386\u53f2K\u7ebf\u4e0b\u8f7d\u3001\u7ba1\u7406\u4e0e\u5feb\u901f\u8bfb\u53d6\u3002\n\n**2.\u4e3a\u5b9e\u76d8\u4ea4\u6613\u51b3\u7b56\u4f9d\u636e**\n\n- \u652f\u6301\u73b0\u8d27\u3001\u5408\u7ea6\u4e0e\u671f\u6743\u4ea7\u54c1\u5b9e\u65f6\u6700\u65b0\u5386\u53f2K\u7ebf\u6570\u636e\u7684\u7f13\u5b58\u66f4\u65b0\n- \u83b7\u53d6\u5b9e\u65f6\u884c\u60c5\u6570\u636e\n\n**\u4e0eBinance_candle\u7684\u4f7f\u7528\u65b9\u6cd595%\u4ee5\u4e0a\u76f8\u4f3c\uff0c\u964d\u4f4e\u591a\u5e73\u53f0\u91cf\u5316\u4ea4\u6613\u8005\u7684\u5b66\u4e60\u6210\u672c**\n\n## 2 \u5b89\u88c5Okx_candle\n\nGITHUB\uff1ahttps://github.com/pyted/okx_candle\n\n```cmd\npip3 install okx_candle\n```\n\n## 3 \u5feb\u901f\u5f00\u59cb\n\n### 3.1 \u7ef4\u62a4\u4ea7\u54c1\u5b9e\u65f6\u5386\u53f2K\u7ebf\u6570\u636ecandle_map\n\n\n\u4ee5\u6c38\u7eed\u5408\u7ea6\u4e3a\u4f8b\uff0c\u8fd0\u884crun_candle_map\u51fd\u6570\u540e\uff0c\u4f1a\u4ee5\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u7ef4\u62a4candle_map\u5c5e\u6027\uff0c\u4fdd\u8bc1candle_map\u7684\u65f6\u6548\u6027\u3002\n\ncandle_map\u7684\u683c\u5f0f\uff1acandle_map[\\<symbol:str\\>] = \\<candle:np.ndarray\\>\n\n```python\nfrom okx_candle import CandleServer\nfrom pprint import pprint\n\ncandleServer = CandleServer('SWAP') # SWAP \u6c38\u7eed\u5408\u7ea6\ncandleServer.run_candle_map()\npprint(candleServer.candle_map)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>> 'BTC-USD-SWAP': array([[1.67556558e+12, 2.33180000e+04, 2.33181000e+04, ...,\n>> 1.92990000e+00, 4.50000000e+04, 1.00000000e+00],\n>> [1.67556564e+12, 2.33178000e+04, 2.33178000e+04, ...,\n>> 7.12200000e-01, 1.66000000e+04, 1.00000000e+00],\n>> [1.67556570e+12, 2.33078000e+04, 2.33078000e+04, ...,\n>> 6.67600000e+00, 1.55600000e+05, 1.00000000e+00],\n>> ...,\n>> [1.67573820e+12, 2.28659000e+04, 2.28868000e+04, ...,\n>> 3.51203000e+01, 8.03500000e+05, 1.00000000e+00],\n>> [1.67573826e+12, 2.28770000e+04, 2.28849000e+04, ...,\n>> 1.07466000e+01, 2.45900000e+05, 1.00000000e+00],\n>> [1.67573832e+12, 2.28851000e+04, 2.28872000e+04, ...,\n>> 7.61250000e+00, 1.74200000e+05, 1.00000000e+00]]),\n>> ... ...\n>> }\n```\n\n### 3.2 \u6bcf\u65e5\u5b9a\u65f6\u4e0b\u8f7d\u5386\u53f2K\u7ebf\n\n\u4ee5\u73b0\u8d27\u4ea4\u6613\u4e3a\u4f8b\uff0c\u6bcf\u5929\u5b9a\u65f6\u4e0b\u8f7d\u524d\u4e00\u5929\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u3002\n\n```python\nfrom okx_candle import CandleServer\n\ncandleServer = CandleServer('SPOT') # SPOT\uff1a\u73b0\u8d27\u4ea4\u6613\ncandleServer.download_daily()\n```\n\n### 3.3 \u83b7\u53d6\u5b9e\u65f6\u5168\u90e8\u4ea7\u54c1\u7684\u884c\u60c5\u4fe1\u606f\n\n\u4ee5SWAP\u6c38\u7eed\u5408\u7ea6\u4e3a\u4f8b\uff0c\u83b7\u53d6\u5b9e\u65f6\u884c\u60c5\u4fe1\u606f\n\n```python\nfrom okx_candle import CandleServer\nfrom pprint import pprint\n\ncandleServer = CandleServer('SWAP') # SWAP \u6c38\u7eed\u5408\u7ea6\nbookTickerMap = candleServer.market.get_tickersMap()\npprint(bookTickerMap)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'1INCH-USD-SWAP': {'askPx': '0.5533',\n>> 'askSz': '25',\n>> 'bidPx': '0.5529',\n>> 'bidSz': '25',\n>> 'high24h': '0.5731',\n>> 'instId': '1INCH-USD-SWAP',\n>> 'instType': 'SWAP',\n>> 'last': '0.5534',\n>> 'lastSz': '25',\n>> 'low24h': '0.5449',\n>> 'open24h': '0.5702',\n>> 'sodUtc0': '0.5535',\n>> 'sodUtc8': '0.5705',\n>> 'ts': '1675746122612',\n>> 'vol24h': '38496',\n>> 'volCcy24h': '686356.4046'},\n>> '1INCH-USDT-SWAP': {'askPx': '0.5529',\n>> 'askSz': '602',\n>> 'bidPx': '0.5528',\n>> 'bidSz': '1309',\n>> 'high24h': '0.5742',\n>> 'instId': '1INCH-USDT-SWAP',\n>> 'instType': 'SWAP',\n>> 'last': '0.5528',\n>> 'lastSz': '1',\n>> 'low24h': '0.5447',\n>> 'open24h': '0.5697',\n>> 'sodUtc0': '0.5545',\n>> 'sodUtc8': '0.5698',\n>> 'ts': '1675746159138',\n>> 'vol24h': '11849879',\n>> 'volCcy24h': '11849879'},\n>> ... ...\n>> },\n>> 'msg': ''}\n```\n\n## 4 \u5386\u53f2K\u7ebfcandle\u7684\u6570\u636e\u8bf4\u660e\n\n### 4.1 K\u7ebf\u7684\u683c\u5f0f\n\n\u4e3a\u4e86\u4fdd\u8bc1\u8fd0\u7b97\u7684\u901f\u5ea6\uff0ccandle\u91c7\u7528np.ndarray\u7c7b\u578b\u5b58\u50a8\u3002\n\n|\u5217\u7d22\u5f15|\u53c2\u6570\u540d|\u5b57\u6bb5\u89e3\u91ca|\u4f8b\u5b50|\n|:---|:---|:---|:---|\n|0|ts|\u5f00\u76d8\u65f6\u95f4|1597026383085.0|\n|1|o|\u5f00\u76d8\u4ef7\u683c|3.721|\n|2|h|\u6700\u9ad8\u4ef7\u683c|3.743|\n|3|l|\u6700\u4f4e\u4ef7\u683c|3.677|\n|4|c|\u6536\u76d8\u4ef7\u683c|3.708|\n|5|vol|\u4ea4\u6613\u91cf\uff0c\u4ee5\u5f20\u4e3a\u5355\u4f4d<br/>\u5982\u679c\u662f\u884d\u751f\u54c1\u5408\u7ea6\uff0c\u6570\u503c\u4e3a\u5408\u7ea6\u7684\u5f20\u6570<br/>\u5982\u679c\u662f\u5e01\u5e01/\u5e01\u5e01\u6760\u6746\uff0c\u6570\u503c\u4e3a\u4ea4\u6613\u8d27\u5e01\u7684\u6570\u91cf|8422410.0|\n|6|volCcy|\u4ea4\u6613\u91cf\uff0c\u4ee5\u5e01\u4e3a\u5355\u4f4d<br/>\u5982\u679c\u662f\u884d\u751f\u54c1\u5408\u7ea6\uff0c\u6570\u503c\u4e3a\u4ea4\u6613\u8d27\u5e01\u7684\u6570\u91cf<br/>\u5982\u679c\u662f\u5e01\u5e01/\u5e01\u5e01\u6760\u6746\uff0c\u6570\u503c\u4e3a\u8ba1\u4ef7\u8d27\u5e01\u7684\u6570\u91cf|22698348.04828491|\n|7|volCcyQuote|\u4ea4\u6613\u91cf\uff0c\u4ee5\u8ba1\u4ef7\u8d27\u5e01\u4e3a\u5355\u4f4d<br/>\u5982\uff1aBTC-USDT\u548cBTC-USDT-SWAP\u5355\u4f4d\u5747\u662f USDT\uff1b<br/>BTC-USD-SWAP \u5355\u4f4d\u662f USD|12698348.04828491|\n|8|confirm|K\u7ebf\u72b6\u6001<br/>0 \u4ee3\u8868 K \u7ebf\u672a\u5b8c\u7ed3<br/>1 \u4ee3\u8868 K \u7ebf\u5df2\u5b8c\u7ed3|1.0|\n\n\n\u5b98\u65b9\u8fd4\u56de\u7684\u5b57\u6bb5\u7c7b\u578b\u5747\u4e3a\u5b57\u7b26\u4e32\uff0c\u4f46\u5bf9\u4e8e\u5386\u53f2K\u7ebf\u6570\u636e\uff0cOkx_candle\u4e2d\u5747\u4ee5np.float64\u4f5c\u4e3a\u5b58\u50a8\u683c\u5f0f\u3002\n\n\u6ce8\uff1aPython\u5bf9\u4e8e\u6570\u5b57\u7cbe\u5ea6\u7684\u652f\u6301\u5e76\u4e0d\u4f18\u79c0\uff0c\u5bf9\u4e8e\u6a21\u62df\u8fd0\u7b97\u6216\u8005\u5b9e\u76d8\u51b3\u7b56\uff0c\u4f7f\u7528\u6d6e\u70b9\u6570\u662f\u5b89\u5168\u7684\uff0c\u4f46\u5bf9\u4e8e\u4ea4\u6613\u63a5\u53e3\uff0c\u4f8b\u5982\u4e0b\u5355\u7684\u6570\u91cf\u548c\u91d1\u989d\uff0c\u91c7\u7528\u5b57\u7b26\u4e32\u7c7b\u578b\u66f4\u4e3a\u5b89\u5168\uff0c\u5728\u5168\u90e8pyted\u7684\u91cf\u5316\u4ea4\u6613\u67b6\u6784\u4e2d\uff0c\u4e0e\u8ba2\u5355\u76f8\u5173\u7684\u6570\u5b57\u5bf9\u8c61\u5747\u91c7\u7528\u5b57\u7b26\u4e32\u7528\u4e8e\u63d0\u4ea4\u3002\n\n### 4.2 K\u7ebf\u7684\u5b58\u50a8\u89c4\u5219\n\n\u672c\u5730\u5386\u53f2K\u7ebf\u6570\u636e\u662f\u6309\u7167\u65e5\u671f\u62c6\u5206\u62c6\u5206\u5b58\u50a8\uff0c\u6bcf\u4e2aCSV\u6587\u4ef6\u4fdd\u5b58\u6307\u5b9a\u65e5\u671f\u6307\u5b9a\u4ea7\u54c1\u7684\u5168\u90e8K\u7ebf\u6570\u636e\u3002\n\n\u6bcf\u4e2aCSV\u6587\u4ef6\u7684\u65f6\u95f4\u8de8\u5ea6\u4e3a\uff1a00:00:00 ~ 24:00:00 - \\<bar\\>\n\n\u5982\u679c\u4fdd\u5b58ETH 2023\u5e741\u67081\u65e5 \u65f6\u95f4\u7c92\u5ea6bar\u662f1\u5206\u949f\u7684\u6570\u636e\uff1aCSV\u4e2d\u7684\u6570\u636e\u6761\u6570\u662f1440\u6761\uff0c\u8d77\u70b9\u4e3a\u65f6\u95f4\uff1a00:00:00\uff0c\u7ec8\u70b9\u65f6\u95f4\u4e3a\uff1a23:59:00\uff0c\u540c\u6837\u5982\u679c\u4fdd\u5b58\u65f6\u95f4\u7c92\u5ea6bar\u662f1\u5c0f\u65f6\u7684\u6570\u636e\uff0c\u5b58\u50a8\u7684\u6570\u636e\u65f6\u95f4\u7ec8\u70b9\u662f\uff1a23:00:00\n\n\u7531\u4e8e\u662f\u6309\u7167\u65e5\u671f\u5206\u7247\u5b58\u50a8\uff0c'2023-01-01'\u5728\u7f8e\u5f0f\u65e5\u671f\u4e0e\u4e2d\u56fd\u65e5\u671f\u5bf9\u5e94\u7684\u65f6\u95f4\u6233\u5e76\u4e0d\u76f8\u540c\uff0cokx_candle\u9ed8\u8ba4\u91c7\u7528'Asia/Shanghai'\u65f6\u533a\u3002\n\n\n\n### 4.3 K\u7ebf\u7684\u5b89\u5168\u6027\n\nOkx_candle\u4e2d\u7684\u5168\u90e8K\u7ebf\u6570\u636e\u5747\u4f1a\u53d7\u5230\u4e25\u683c\u7684\u9a8c\u8bc1\uff0c\u4fdd\u8bc1\u6570\u636e\u7684\u5b89\u5168\u6027\u3002\n\n- valid_interval \u9a8c\u8bc1\u6570\u636e\u65f6\u95f4\u95f4\u9694 = \\<bar\\>\n- valid_start \u9a8c\u8bc1\u6570\u636e\u65f6\u95f4\u8d77\u70b9 \n- valid_end \u9a8c\u8bc1\u6570\u636e\u65f6\u95f4\u7ec8\u70b9\n- valid_length \u9a8c\u8bc1\u6570\u636e\u957f\u5ea6 \uff08\u4ec5\u5728\u7ef4\u62a4\u5b9e\u65f6\u5386\u53f2K\u7ebf\u6570\u636e\u670d\u52a1\u7684\u65f6\u5019\u4f7f\u7528\uff09\n\n## 5 \u4ea7\u54c1\u7c7b\u522binstType\u4ee3\u53f7\n\n\u5728\u5b9e\u4f8b\u5316CandlerServer\u65f6\uff0c\u9700\u8981\u53ef\u4ee5\u4f20\u9012\u4e24\u4e2a\u53c2\u6570\uff0c\u4e00\u4e2a\u662finstType\u4ea7\u54c1\u7c7b\u522b\uff0c\u53e6\u4e00\u4e2a\u662frule\u670d\u52a1\u89c4\u5219\u3002\n\n|\u4ea7\u54c1\u7c7b\u522b|\u4ee3\u53f7|\n|:---|:---|\n|\u73b0\u8d27\u4ea4\u6613|SPOT|\n|\u6c38\u7eed\u5408\u7ea6|SWAP|\n|\u4ea4\u5272\u5408\u7ea6|FUTURES|\n|\u671f\u6743|OPTION|\n\n**\u6ce8\uff1aOkx_candle\u7684instType\u4e0d\u652f\u6301Margin\uff08\u73b0\u8d27\u6760\u6746\uff09**\n\n## 6 K\u7ebf\u670d\u52a1\u89c4\u5219CandleRule\n\n### 6.1 \u89c4\u5219\u5c5e\u6027\u603b\u89c8\n\nCandleRule\u662fCandleServer\u7684\u8fd0\u884c\u89c4\u5219\uff0c\u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49\u89c4\u5219\u5185\u5bb9\u4ee5\u9002\u5e94\u4e0d\u540c\u7684\u4ea4\u6613\u573a\u666f\u3002\n\n```python\nfrom okx_candle import CandleServer, CandleRule\n\nCandleRule.BAR = '5m' # K\u7ebf\u7684\u65f6\u95f4\u7c92\u5ea6\u8c03\u6574\u4e3a5\u5206\u949f\ncandleServer = CandleServer('SPOT', CandleRule)\n```\n\n\u5728CandleServer\u4e2d\uff0c\u6709\u4e24\u4e2a\u91cd\u8981\u7684\u5f02\u6b65\u65b9\u6cd5\uff1a\n\n- run_candle_map \u5f02\u6b65\u7684\u65b9\u5f0f\u7ef4\u62a4\u5b9e\u65f6\u5386\u53f2K\u7ebf\u5b57\u5178 candle_map\n- download_daily \u5f02\u6b65\u7684\u65b9\u5f0f\u6bcf\u65e5\u4e0b\u8f7d\u4e0a\u4e00\u5929\u7684K\u7ebf\u6570\u636e\n\n\u8fd9\u4e24\u4e2a\u65b9\u6cd5\u5747\u53d7\u5230CandleRule\u7684\u89c4\u5219\u7ea6\u675f\u3002\u4e0b\u9762\u662fCandleRule\u4e2d\u5404\u4e2a\u5c5e\u6027\u7684\u4f5c\u7528\u89c4\u5219\u3002\n\n\n\n\n### 6.2 \u4ea7\u54c1\u540d\u79f0\u6761\u4ef6\n\n#### 6.2.1 SYMBOLS \u4ea7\u54c1\u540d\u79f0\n\n\u7c7b\u578b\uff1aUnion[str,list]\uff0c\u9ed8\u8ba4\u503c\uff1a'all'\n\n|\u4f8b\u5b50|\u89e3\u91ca|\n|:---|:---|\n|SYMBOLS = 'all'|\u7ef4\u62a4\u4ea7\u54c1\u7c7b\u578b\u4e2d\u7684\u5168\u90e8\u5b50\u4ea7\u54c1|\n|SYMBOLS = ['BTC-USDT','ETC-USDT']|\u4ec5\u7ef4\u62a4BTC-USDT\u4e0eETC-USDT|\n\n#### 6.2.2 SYMBOLS_FILTER \u8fc7\u6ee4\u4ea7\u54c1\n\n\u7c7b\u578b\uff1alist\uff0c\u9ed8\u8ba4\u503c\uff1a''\n\n|\u4f8b\u5982|\u89e3\u91ca|\n|:---|:---|\n|SYMBOLS = 'all' ; SYMBOLS_FILTER = ['BTC-USDT']|\u7ef4\u62a4\u9664\u4e86BTC-USDT\u4e4b\u5916\u5168\u90e8\u7684\u4ea7\u54c1|\n\n#### 6.2.3 SYMBOL_CONTAINS \u4ea7\u54c1\u540d\u79f0\u4e2d\u9700\u5305\u542b\u7684\u5185\u5bb9\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a''\n\n\u8fc7\u6ee4\u540d\u79f0\u4e2d\u4e0d\u5305\u542b\u6b64\u5185\u5bb9\u7684\u4ea7\u54c1\uff08\u533a\u5206\u5927\u5c0f\u5199\uff09\u3002\n\n\n|\u4f8b\u5982|\u89e3\u91ca|\n|:---|:---|\n|SYMBOLS = 'all' ; SYMBOL_CONTAINS = 'BTC'|\u7ef4\u62a4\u540d\u79f0\u4e2d\u5305\u542b'BTC'\u7684\u5168\u90e8\u4ea7\u54c1|\n\n#### 6.2.4 SYMBOL_ENDSWITH \u4ea7\u54c1\u540d\u79f0\u5fc5\u987b\u4ee5\u4f55\u7ed3\u5c3e\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a''\n\n\u8fc7\u6ee4\u540d\u79f0\u4e2d\u4e0d\u4ee5\u6b64\u5185\u5bb9\u7ed3\u5c3e\u7684\u4ea7\u54c1\uff08\u533a\u5206\u5927\u5c0f\u5199\uff09\u3002\n\n\n|\u4f8b\u5982|\u89e3\u91ca|\n|:---|:---|\n|SYMBOLS = 'all' ; SYMBOL_ENDSWITH = 'USDT'|\u7ef4\u62a4\u540d\u79f0\u4ee5USDT\u7ed3\u5c3e\u7684\u5168\u90e8\u4ea7\u54c1|\n\n\u5982\u679c\u4f60\u4ec5\u8981\u7ef4\u62a4\u4ee5USDT\u4e3a\u4ea4\u6613\u8d27\u5e01\u7684\u4ea7\u54c1\uff0c\u53ef\u4ee5\u8bbe\u7f6e\uff1a\n\n- SYMBOLS = 'all'\n- SYMBOLS_ENDSWITH = 'USDT'\n\n### 6.3 K\u7ebf\u53c2\u6570\n\n#### 6.3.1 BAR \u65f6\u95f4\u7c92\u5ea6\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1acandlelite.crypto.okx_lite.OKX_DEFAULT_BAR\n\n\u5386\u53f2K\u7ebf\u7684\u65f6\u95f4\u7c92\u5ea6\uff0c\u76ee\u524d\u4ec5\u652f\u6301\u4ee5\u5206m\u3001\u5c0f\u65f6h\u3001\u5929d\u4e3a\u5355\u4f4d\u3002\n\n|\u4f8b\u5b50|\u89e3\u91ca|\n|:---|:---|\n|1m|1\u5206\u949f|\n|5m|5\u5206\u949f|\n|15m|15\u5206\u949f|\n|1h|1\u5c0f\u65f6|\n|4h|4\u5c0f\u65f6|\n|1d|1\u5929|\n|..|...|\n\n\u56e0\u4e3aOkx_candle\u5bf9\u4e8eK\u7ebf\u6570\u636e\u7684\u8bfb\u53d6\u4f7f\u7528\u7684\u662fcandlelite\uff0c\u8bb8\u591a\u9ed8\u8ba4\u503c\u4f7f\u7528\u7684\u662fcandlelite\u4e2dsettings\u7684\u914d\u7f6e\u5185\u5bb9\u3002\n\n```python\n# \u67e5\u770b\u9ed8\u8ba4\u914d\u7f6e\u4fe1\u606f\ncandlelite show_settings \n# \u5728\u7ec8\u7aef\u4e2d\u4fee\u6539\u9ed8\u8ba4\u914d\u7f6e\ncandlelite console_settings\n# \u67e5\u770b\u914d\u7f6e\u6587\u4ef6\u7684\u8def\u5f84->\u7528\u7f16\u8f91\u5668\u81ea\u884c\u7f16\u8f91\u4fee\u6539\ncandlelite settings_path\n```\n\n### 6.4 K\u7ebf\u4e0b\u8f7d\u76f8\u5173\n\n#### 6.4.1 TIMEZONE \u65f6\u533a\n\n\u7c7b\u578b\uff1aUnion[str,None]\uff0c\u9ed8\u8ba4\u503c\uff1acandlelite.crypto.okx_lite.OKX_TIMEZONE\n\nTIMEZONE\u6240\u8d77\u7684\u4f5c\u7528\uff1a\n\n- \u6570\u636e\u5b58\u50a8\u8def\u5f84\u4e2d\u7684\u6587\u4ef6\u5939\u547d\u540d\n- \u5212\u5206\u4e00\u5929\u7684\u8d77\u59cb\u4e0e\u7ec8\u6b62\u65f6\u95f4\u6233\n\n#### 6.4.2 CANDLE_DIR \u65e5\u671f\u4e3a\u5206\u5272\u5b58\u50a8\u7684\u6570\u636e\u8def\u5f84\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1acandlelite.crypto.okx_lite.OKX_CANDLE_DATE_BASE_DIR\n\n#### 6.4.3 DOWNLOAD_TIME \u6bcf\u65e5\u4e0b\u8f7d\u6628\u65e5K\u7ebf\u6570\u636e\u7684\u65f6\u95f4\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a'00:10:00'\n\nDOWNLAOD_TIME\u53ef\u4ee5\u51b3\u5b9a\u6bcf\u5929\u7684\u54ea\u4e2a\u65f6\u95f4\u70b9\u4e0b\u8f7d\u6628\u65e5\u7684\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u4f5c\u7528\u4e8e\u4e24\u4e2a\u5f02\u6b65\u51fd\u6570\uff1a\n\n- run_candle_map\n- download_daily\n\n\u8fd9\u4e24\u4e2a\u51fd\u6570\u7684\u4e0b\u8f7d\u65b9\u5f0f\u4e0d\u76f8\u540c\uff0crun_candle_map\u51fd\u6570\u4f1a\u5728DOWNLOAD_TIME\u65f6\u523b\u53d6\u51facandle_map\u5b57\u5178\u4e2d\u6628\u65e5\u7684K\u7ebf\u6570\u636e\uff0c\u4fdd\u5b58\u5230\u672c\u5730\u3002donwload_daily\u51fd\u6570\u4f1a\u5728DOWNLOAD_TIME\u65f6\u523b\u5411\u5b98\u65b9\u53d1\u9001\u8bf7\u6c42\u83b7\u53d6\u6628\u65e5K\u7ebf\u6570\u636e\uff0c\u518d\u4fdd\u5b58\u5230\u672c\u5730\u3002\n\n\nDOWNLOAD_TIME\u7684\u65f6\u95f4\u683c\u5f0f\u4e3a\uff1a%H:%M:%S\uff0c\u4f8b\u5982DOWNLOAD_TIME = '01:00:00'\u3002\n\nDOWNLOAD_TIME = None \u8868\u793a\u7981\u7528\u5b9e\u65f6K\u7ebf\u7ef4\u62a4\u7684\u6bcf\u65e5\u4e0b\u8f7d\u529f\u80fd\u3002\n\n\u9700\u8981\u6ce8\u610f\u7684\u95ee\u9898\uff1a\n\n1. DOWNLOAD_TIME\u4e0d\u5e94\u8be5\u8fc7\u65e9\uff0c\u5b98\u65b9\u6574\u5408\u4e0a\u4e00\u4e2a\u5355\u4f4d\u65f6\u95f4\u7684\u5386\u53f2K\u7ebf\u4e00\u822c\u4f1a\u67090~2\u5206\u949f\u7684\u5ef6\u8bef\uff0c\u6240\u4ee5\u5982\u679cBAR='1m'\uff0c\u5728'00:00:00'\u53ef\u80fd\u65e0\u6cd5\u83b7\u53d6\u6628\u65e5'23:59:00'\u65f6\u523b\u7684\u5386\u53f2K\u7ebf\uff0c\u8fd9\u6837\u4f1a\u5f15\u53d1\u9519\u8bef\u3002\n\n2. DOWNLOAD_TIME\u5bf9\u4e8erun_candle_map\u5f02\u6b65\u7ebf\u7a0b\u6765\u8bf4\uff0c\u4f1a\u4ececandle_map\u5b57\u5178\u4e2d\u83b7\u53d6\u6628\u65e5\u7684K\u7ebf\u6570\u636e\uff0c\u6240\u4ee5\u5982\u679c\u6b64\u65f6candle_map\u4e2d\u6628\u65e5\u5386\u53f2K\u7ebf\u6570\u636e\u4e0d\u8db3\uff0c\u4e5f\u4f1a\u5f15\u53d1\u5f02\u5e38\uff0c\u53ef\u4ee5\u52a0\u5927\u7ef4\u62a4\u7684K\u7ebf\u957f\u5ea6LENGTH\u5e76\u8c03\u6574\u5408\u7406\u7684DOWNLOAD_TIME\u65f6\u523b\u3002\n\n### 6.5 \u79d8\u94a5\n\n#### 6.5.1 KEY\u3001SECRET\u4e0ePASSPHRASE\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a''\n\nOKX\u83b7\u53d6\u884c\u60c5\u6570\u636e\uff0c\u53ef\u4ee5\u4e0d\u586b\u5199\u79d8\u94a5\u3002\n\n### 6.6 run_candle_map\u5b9e\u65f6K\u7ebf\u76f8\u5173\u914d\u7f6e\n\n#### 6.6.1 LOCAL_CANDLE_DAYS \u542f\u52a8\u540e\u4e0b\u8f7d\u8fd1\u671f\u591a\u5c11\u65e5\u7684\u5386\u53f2K\u7ebf\u6570\u636e\n\n\u7c7b\u578b\uff1aUnion[int,None]\uff0c\u9ed8\u8ba4\u503c\uff1a2\uff08\u5355\u4f4d\uff1a\u5929\uff09\n\n\u5728\u542f\u52a8\u5b9e\u65f6K\u7ebf\u670d\u52a1\u540e\uff0cCandleServer\u5c06\u6821\u9a8c\u672c\u5730\u662f\u5426\u6709\u6700\u8fd1\u7684LOCAL_CANDLE_DAYS\u4ea7\u54c1K\u7ebf\u6570\u636e\uff0c\u5982\u679c\u6ca1\u6709\uff0c\u5219\u4f1a\u81ea\u52a8\u4e0b\u8f7d\n\nLOCAL_CANDLE_DAYS = None \u8868\u793a\u7981\u7528\u6b64\u529f\u80fd\n\n#### 6.6.2 LENGTH \u4fdd\u7559\u5b9e\u65f6K\u7ebf\u7684\u957f\u5ea6\n\n\u7c7b\u578b\uff1aint\uff0c\u9ed8\u8ba4\u503c\uff1a2880\n\n\u4fdd\u7559candle_map\u5b57\u5178\u4e2d\u5404\u4e2a\u4ea7\u54c1\u7684\u6700\u65b0K\u7ebf\u6570\u636e\u7684\u884c\u6570\u3002\n\n\u5982\u679c\u67d0\u4ea7\u54c1\u521a\u521a\u4e0a\u7ebf\uff0c\u6570\u636e\u957f\u5ea6\u5c0f\u4e8eLENGTH\uff0c\u5219\u4f1a\u88ab\u8fc7\u6ee4\u3002\n\n#### 6.6.3 UPDATE_INTERVAL_SECONDS \u5b9e\u65f6K\u7ebf\u7684\u66f4\u65b0\u95f4\u9694\n\n\u7c7b\u578b\uff1aint\uff0c\u9ed8\u8ba4\u503c\uff1a3\uff08\u5355\u4f4d\uff1a\u79d2\uff09\n\n\u5c06candle_map\u4e2d\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u66f4\u65b0\u5230\u6700\u65b0\u65f6\u95f4\uff0c\u6bcf\u6b21\u66f4\u65b0\u7684\u65f6\u95f4\u95f4\u9694\u3002\n\n#### 6.6.4 CACHE_DELAY_SECONDS \u5b9e\u65f6K\u7ebf\u672c\u5730\u7f13\u5b58\u7684\u65f6\u95f4\u95f4\u9694\n\n\u7c7b\u578b\uff1aUnion[int,None]\uff0c\u9ed8\u8ba4\u503c\uff1a3600\uff08\u5355\u4f4d\uff1a\u79d2\uff09\n\n\u95f4\u9694\u591a\u5c11\u79d2\uff0c\u5c06candle_map\u4fdd\u5b58\u5230\u672c\u5730\uff0c\u8fd9\u6837\u53ef\u4ee5\u5728\u670d\u52a1\u91cd\u542f\u540e\uff0c\u5feb\u901f\u8bfb\u53d6\u7f13\u5b58\u6570\u636e\uff0c\u51cf\u5c11\u8bbf\u95ee\u91cf\u4e0e\u7b49\u5f85\u65f6\u95f4\u3002\n\nCACHE_DELAY_SECONDS = None \u8868\u793a\u7981\u7528\u6b64\u529f\u80fd\n\n#### 6.6.5 CACHE_DIR \u7f13\u5b58\u6570\u636e\u8def\u5f84\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a'./OKX_CACHE'\n\ncandle_map\u7f13\u5b58\u4fdd\u5b58\u5230\u7684\u6587\u4ef6\u8def\u5f84\u3002\n\n### 6.7 \u65e5\u5fd7\n\n#### 6.7.1 LOG_DIRPATH \u65e5\u5fd7\u6587\u4ef6\u5939\u8def\u5f84\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a./OKX_CANDLE_SERVER_LOG_DATA'\n\nOkx_candle\u4e2d\u7684\u65e5\u5fd7\u6587\u4ef6\u6309\u7167\u672c\u5730\u65e5\u671f\u4e0e\u7ea7\u522b\u5206\u5272\u5b58\u50a8\u5728\u6587\u4ef6\u5939\u4e2d\u3002\n\n#### 6.7.2 LOG_FILE_LEVEL \u65e5\u5fd7\u6587\u4ef6\u7ea7\u522b\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a'INFO'\n\n\u50a8\u5b58\u5728\u65e5\u5fd7\u6587\u4ef6\u4e2d\u7684\u7ea7\u522b\u3002\n\n#### 6.7.3 LOG_CONSOLE_LEVEL \u65e5\u5fd7\u6253\u5370\u7ea7\u522b\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a'DEBUG'\n\n\u7ec8\u7aef\u6253\u5370\u65e5\u5fd7\u7684\u7ea7\u522b\u3002\n\n## 7 \u7ef4\u62a4\u5b9e\u65f6K\u7ebf\u5b57\u5178 candle_map\n\n### 7.1 run_candle_map \u65b9\u6cd5\n\nCandleServer.run_candle_map\u5148\u4f1a\u4ee5\u5835\u585e\u7684\u6a21\u5f0f\u7b49\u5f85\u7b2c\u4e00\u6b21candle_map\u66f4\u65b0\u5b8c\u6bd5\uff0c\u968f\u540e\u4ee5\u5f02\u6b65\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u5b9e\u65f6\u66f4\u65b0candle_map\uff0c\u4ee5\u4fdd\u8bc1\u6570\u636e\u7684\u5b9e\u6548\u6027\u4e0e\u5b89\u5168\u6027\u3002\n\n\u5982\u679c\u5728\u66f4\u65b0candle_map\u4e2d\u5b58\u5728\u67d0\u4e2a\u5386\u53f2K\u7ebf\u6709\u9519\u8bef\uff0c\u5219\u4f1a\u4ececandle_map\u5b57\u5178\u4e2d\u5220\u9664\u8fd9\u4e2asymbol\u7684candle\u3002\n\n\u66f4\u65b0candle_map\u4e2d\u9ed8\u8ba4\u9a8c\u8bc1\u7684\u5185\u5bb9\u6709\uff1a\n\n- valid_interval \u9a8c\u8bc1K\u7ebf\u65f6\u95f4\u95f4\u9694\u9700\u8981\u4e0ebar\u76f8\u540c\n- valid_end \u9a8c\u8bc1K\u7ebf\u7684\u6700\u5927\u65f6\u95f4\u6233\u8981\u7b49\u4e8e\u88ab\u66f4\u65b0\u65f6\u95f4\n- valid_length \u9a8c\u8bc1K\u7ebf\u7684\u957f\u5ea6\u9700\u8981\u4e25\u683c\u7b49\u4e8eLENGTH\n\nrun_candle_map\u65b9\u6cd5\u6267\u884c\u6d41\u7a0b\u7b80\u56fe\uff1a\n\n\n\n### 7.2 candle_map \u5b9e\u65f6K\u7ebf\u5b57\u5178\u5c5e\u6027\n\n\u683c\u5f0f\uff1acandle_map[\\<symbol:str\\>] = \\<candle:np.ndarray\\>\n\n- KEY\uff1asymbol \u4ea7\u54c1\u540d\u79f0\n- VALUE\uff1acandle np.ndarray\u7c7b\u578b\u7684K\u7ebf\u6570\u636e\n\n### 7.3 get_candle_security \u5b89\u5168\u83b7\u53d6\u5b9e\u65f6K\u7ebf\n\n|\u53c2\u6570|\u7c7b\u578b|\u8bf4\u660e|\n|:---|:---|:---|\n|symbol|str|\u4ea7\u54c1\u540d\u79f0|\n|security_seconds|int|\u5b89\u5168\u95f4\u9694\uff08\u5355\u4f4d\uff1a\u79d2\uff09|\n\n\u4e3a\u4ec0\u4e48\u8981\u6709\u8fd9\u4e2a\u65b9\u6cd5\uff1a\n\ncandle_map\u4f1a\u4f7f\u7528\u57fa\u51c6\u4ea7\u54c1\u7684\u5386\u53f2K\u7ebf\u6700\u65b0\u65f6\u95f4\u70b9\u4e3a\u57fa\u51c6\u66f4\u65b0\uff0c\u4f46\u662f\u5b98\u65b9\u66f4\u65b0\u6700\u8fd1\u65f6\u95f4\u70b9\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u5f80\u5f80\u5b58\u57280~2\u5206\u949f\u7684\u65f6\u95f4\u5dee\u751a\u81f3\u66f4\u591a\uff0c\u670d\u52a1\u5668\u8bbf\u95ee\u66f4\u65b0\u4e5f\u9700\u8981\u82b1\u8d39\u65f6\u95f4\uff0cget_candle_security\u53ef\u4ee5\u9a8c\u8bc1candle_map\u4e2d\u4ea7\u54c1\u7684K\u7ebf\u6700\u5927\u65f6\u95f4\u4e0e\u5f53\u524d\u65f6\u95f4\u7684\u5dee\u503c\uff0c\u5982\u679c\u5dee\u503c\u8fc7\u5927\uff0c\u89c6\u4e3a\u4e0d\u5b89\u5168\uff0c\u8fd4\u56de\u7a7a\u6570\u7ec4\uff0c\u5982\u679c\u6ee1\u8db3\u5728\u9884\u8bbe\u65f6\u95f4\u5dee\u503c\u4ee5\u5185\uff0c\u5219\u6b63\u5e38\u8fd4\u56de\u3002\n\n\n\u4ee5\u6c38\u7eed\u5408\u7ea6\u4e3a\u4f8b\uff0c\u5b9e\u65f6\u66f4\u65b0\u5168\u90e8\u4ea7\u54c1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\n\n```python\nfrom okx_candle import CandleServer\nimport time\n\ncandleServer = CandleServer('SWAP')\ncandleServer.run_candle_map()\n\nwhile True:\n for symbol in candleServer.candle_map.keys():\n print(\n symbol,\n candleServer.get_candle_security(symbol, security_seconds=60)\n )\n time.sleep(1)\n```\n\n### 7.4 close_run_candle_map \u5173\u95ed\u5b9e\u65f6K\u7ebf\u6570\u636e\u66f4\u65b0\u670d\u52a1\n\nclose_run_candle_map\u4ec5\u4f5c\u7528\u4e8e\u5f02\u6b65\u8fd0\u884c\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u5f02\u6b65\u7684\u5b89\u5168\u6027\uff0c\u5173\u95ed\u65b9\u6cd5\u4f1a\u7b49\u5f85\u5f02\u6b65\u7a0b\u5e8f\u9636\u6bb5\u6027\u8fd0\u884c\u7ed3\u675f\u540e\u5173\u95ed\uff0c\u4f8b\u5982\u907f\u514d\u5728\u4fdd\u5b58\u672c\u5730\u6570\u636e\u7684\u65f6\u5019\u53d1\u751f\u4e86\u7ec8\u6b62\uff0c\u9020\u6210\u6570\u636e\u9519\u8bef\u3002\n\n## 8 \u4e0b\u8f7d\u5386\u53f2K\u7ebf\n\n### 8.1 download_candles_by_date \u65b9\u6cd5\n\n\u4e0b\u8f7d\u4ecestart\u65e5\u671f\u5230end\u65e5\u671f\uff08\u5305\u62ecend\uff09\uff0c\u89c4\u5219\u4ea7\u54c1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u3002\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|start|Union[int,float,str,datetime.date]|\u65e0|\u8d77\u59cb\u65e5\u671f|\n|end|Union[int,float,str,datetime.date,None]|None|\u7ec8\u6b62\u65e5\u671f None\u8868\u793a\u6628\u65e5|\n|replace|bool|False|\u5982\u679c\u672c\u5730\u6570\u636e\u5df2\u5b58\u5728\uff0c\u662f\u5426\u4e0b\u8f7d\u66ff\u6362|\n\nstart\u4e0eend\u652f\u6301\u6574\u6570\u4e0e\u6d6e\u70b9\u6570\u7c7b\u578b\u7684**\u6beb\u79d2**\u65f6\u95f4\u6233\u3001\u65e5\u671f\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u4e0e\u65e5\u671f\u7c7b\u578b\u3002\n\n\u4f8b\u5982\uff1a\n\n```python\nstart = 1672502400000 # \u6beb\u79d2\u65f6\u95f4\u6233\uff08\u5317\u4eac\u65f6\u95f42023-01-01 00:00:00\uff09\nstart = '2023-01-02' # \u65e5\u671f\u7c7b\u578b\u5b57\u7b26\u4e32(\u4e2d\u56fd\u65f6\u95f4\u683c\u5f0f)\nstart = '01/02/2023' # \u65e5\u671f\u7c7b\u578b\u5b57\u7b26\u4e32(\u7f8e\u56fd\u65f6\u95f4\u683c\u5f0f)\nstart = pendulum.yesterday('Asia/Shanghai') # \u65e5\u671f\u7c7b\u578b\nstart = datetime.date(2023,1,2) # \u65e5\u671f\u683c\u5f0f\n```\n\n\u5982\u679cstart\u6216end\u4e3a\u65e5\u671f\u5f62\u5f0f\u7684\u5b57\u7b26\u4e32\uff0cOkx_candle\u4f1a\u5c06\u5176\u8f6c\u5316\u4e3aCandleRule\u4e2dTIMEZONE\u5bf9\u5e94\u7684\u65e5\u671f\u3002\u6240\u4ee5\u4e2d\u56fd\u65f6\u95f4\u683c\u5f0f\u4e0e\u7f8e\u56fd\u65f6\u95f4\u683c\u5f0f\u662f\u7b49\u4ef7\u7684\u3002\n\n\u4e0b\u8f7d\u4ecestart~end\u7684\u6570\u636e\uff0c\u6570\u636e\u7ec8\u70b9\u662f\u88ab\u5305\u542b\u7684\u3002\n\n\u4f8b\u5982\uff1astart = '2023-01-01' end = '2023-01-03'\uff0c\u4f1a\u4e0b\u8f7d ['2023-01-01','2023-01-02','2023-01-03'] \u4e09\u5929\u7684\u6570\u636e\u3002\n\n\u4ee5\u65e5\u671f\u4e3a\u62c6\u5206\u5b58\u50a8\uff0c\u6bcf\u4e00\u5929\u7684\u6570\u636e\u4e0d\u4f1a\u5305\u542b\u4e0b\u4e00\u5929\u7684\u65f6\u95f4\u8d77\u70b9\u3002\n\n\u4f8b\u5982\uff1a\n\n|BAR|\u6bcf\u5929\u6570\u636e\u7684\u6700\u540e\u65f6\u523bK\u7ebf\u7684\u5f00\u76d8\u65f6\u95f4|\n|:---|:---| \n|1m|23:59:00|\n|5m|23:55:00|\n|1h|23:00:00|\n\n\u4f8b\u5b50\uff1a\n\n\u4e0b\u8f7d\u73b0\u8d27BTC-USDT\u4e0eETC-USDT\uff0c\u4ece\u4e2d\u56fd\u65f6\u95f42023-01-01~2023-01-10\uff0c\u65f6\u95f4\u7c92\u5ea6\u4e3a1m\u7684K\u7ebf\u6570\u636e\u3002\n\n```python\nfrom okx_candle import CandleServer, CandleRule\n\nCandleRule.BAR = '1m'\nCandleRule.SYMBOLS = ['BTC-USDT', 'ETC-USDT']\nCandleRule.TIMEZONE = 'Asia/Shanghai'\n\ncandleServer = CandleServer('SPOT', CandleRule)\n\ncandleServer.download_candles_by_date(\n start='2022-01-01',\n end='2022-01-10',\n)\n```\n\n### 8.2 download_daily \u65b9\u6cd5\n\n\u6bcf\u65e5\u5b9a\u70b9\u4e0b\u8f7d\u6628\u65e5\u5386\u53f2K\u7ebf\u6570\u636e\u7684\u670d\u52a1\uff0c\u5f02\u6b65\u6267\u884c\u3002\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|start|Union[int,float,str,datetime.date,None]|None|\u8865\u5145\u4e0b\u8f7d\u4ecestart~yesterday\u7684\u6570\u636e start=None\u7b49\u4ef7\u4e8estart=yesterday|\n|replace|bool|False|\u672c\u5730\u5df2\u5b58\u5728\u7684\u6570\u636e\u662f\u5426\u91cd\u65b0\u4e0b\u8f7d\u66ff\u6362|\n\ndownload_daily\u662f\u5b8c\u5168\u5f02\u6b65\u6267\u884c\u7684\uff0c\u5148\u8865\u5145\u4e0b\u8f7dstart~yesterday\u7684\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u968f\u540e\u5728\u6bcf\u5929\u7684DOWNLOAD_TIME\u4e0b\u8f7d\u6628\u65e5\u7684\u5386\u53f2K\u7ebf\u6570\u636e\u3002\n\n\u4f8b\u5b50\uff1a\n\n\u5f00\u542f\u670d\u52a1\uff0c\u6bcf\u5929\u5b9a\u65f6\u4e0b\u8f7d\u73b0\u8d27\u4ea7\u54c1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\uff0cK\u7ebf\u53c2\u6570\u4e0e\u65f6\u533a\u5747\u7b49\u5747\u9009\u62e9\u9ed8\u8ba4\u503c\u3002\n\n```python\nfrom okx_candle import CandleServer\n\ncandleServer = CandleServer('SPOT')\ncandleServer.download_daily()\n```\n\n### 8.3 close_download_daily \u5173\u95ed\u6bcf\u65e5K\u7ebf\u4e0b\u8f7d\u670d\u52a1\n\n\u4e3a\u4e86\u4fdd\u8bc1\u5f02\u6b65\u7684\u5b89\u5168\u6027\uff0c\u5173\u95ed\u65b9\u6cd5\u4f1a\u7b49\u5f85\u5f02\u6b65\u7a0b\u5e8f\u9636\u6bb5\u6027\u8fd0\u884c\u7ed3\u675f\u540e\u5173\u95ed\uff0c\u4f8b\u5982\u907f\u514d\u5728\u4fdd\u5b58\u672c\u5730\u6570\u636e\u7684\u65f6\u5019\u53d1\u751f\u4e86\u7ec8\u6b62\uff0c\u9020\u6210\u6570\u636e\u9519\u8bef\u3002\n\n## 9 \u884c\u60c5\u6570\u636e\n\n### 9.1 \u884c\u60c5\u6570\u636e\u7684\u89c4\u5219\n\n\u884c\u60c5\u6570\u636e\u652f\u6301\uff1aSPOT\u73b0\u8d27\u3001SWAP\u6c38\u7eed\u5408\u7ea6\u3001FUTURES\u4ea4\u5272\u5408\u7ea6\u4e0eOPTION\u671f\u6743\u3002\n\n\u5bfc\u5165\u884c\u60c5\u6570\u636e\u6a21\u5757\n\n```python\nfrom okx_candle import Market\n\nmarket = Market(\n instType='SPOT', # \u4ea7\u54c1\u7c7b\u578b SPOT | SWAP | FUTURES | OPTION\n timezone='Asia/Shanghai' # \u65f6\u533a\n)\n```\n\n\u4e5f\u53ef\u4ee5\u4f7f\u7528CandleServer\u4e2d\u7684market\u6a21\u5757\n\n```python\nfrom okx_candle import CandleServer\n\ncandleServer = CandleServer('SPOT')\nmarket = candleServer.market\n```\n\n\u884c\u60c5\u6570\u636e\u7684\u8fd4\u56de\u683c\u5f0f\u5747\u4e3a\uff1a{'code':<\u72b6\u6001\u7801>, 'data':<\u4e3b\u4f53\u6570\u636e>, 'msg':<\u63d0\u793a\u4fe1\u606f>}\n\n\u72b6\u6001\u7801\u4e3a'0'\u8868\u793a\u6210\u529f\u3002\n\n### 9.2 \u884c\u60c5\u4fe1\u606f\n\n#### 9.2.1 get_tickers \u5168\u90e8\u4ea7\u54c1\u7684\u884c\u60c5\u5217\u8868\n\n\u4f8b\u5982\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613\u5168\u90e8\u7684\u884c\u60c5\u4fe1\u606f\u5217\u8868\n\n```python\nfrom okx_candle.market import Market\nfrom pprint import pprint\n\ntickers = Market('SPOT').get_tickers()\npprint(tickers)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': [{'askPx': '0.00000727',\n>> 'askSz': '15.9952',\n>> 'bidPx': '0.00000719',\n>> 'bidSz': '36.1832',\n>> 'high24h': '0.00000725',\n>> 'instId': 'BCD-BTC',\n>> 'instType': 'SPOT',\n>> 'last': '0.00000725',\n>> 'lastSz': '7.0502',\n>> 'low24h': '0.00000644',\n>> 'open24h': '0.00000689',\n>> 'sodUtc0': '0.0000067',\n>> 'sodUtc8': '0.00000664',\n>> 'ts': '1675746511714',\n>> 'vol24h': '31478.67',\n>> 'volCcy24h': '0.2129'},\n>> ... ...\n>> ],\n>> 'msg': ''}\n```\n\n#### 9.2.2 get_tickersMap \u5168\u90e8\u4ea7\u54c1\u7684\u884c\u60c5\u5b57\u5178\n\n\u4f8b\u5982\u83b7\u53d6SWAP\u6c38\u7eed\u5408\u7ea6\u4ea4\u6613\u5168\u90e8\u7684\u884c\u60c5\u4fe1\u606f\u5b57\u5178\n\n```python\nfrom okx_candle.market import Market\nfrom pprint import pprint\n\ntickersMap = Market('SPOT').get_tickersMap()\npprint(tickersMap)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'1INCH-USDC': {'askPx': '0.5543',\n>> 'askSz': '488.759',\n>> 'bidPx': '0.5532',\n>> 'bidSz': '22.1968',\n>> 'high24h': '0.5727',\n>> 'instId': '1INCH-USDC',\n>> 'instType': 'SPOT',\n>> 'last': '0.5543',\n>> 'lastSz': '94.4831',\n>> 'low24h': '0.5467',\n>> 'open24h': '0.57',\n>> 'sodUtc0': '0.5487',\n>> 'sodUtc8': '0.5704',\n>> 'ts': '1675746666011',\n>> 'vol24h': '12975.2687',\n>> 'volCcy24h': '7331.7333'},\n>> '1INCH-USDT': {'askPx': '0.5536',\n>> 'askSz': '500.647097',\n>> 'bidPx': '0.5534',\n>> 'bidSz': '463.1052',\n>> 'high24h': '0.5736',\n>> 'instId': '1INCH-USDT',\n>> 'instType': 'SPOT',\n>> 'last': '0.5535',\n>> 'lastSz': '36.127166',\n>> 'low24h': '0.5444',\n>> 'open24h': '0.5696',\n>> 'sodUtc0': '0.5541',\n>> 'sodUtc8': '0.5699',\n>> 'ts': '1675746689411',\n>> 'vol24h': '2620706.912348',\n>> 'volCcy24h': '1471994.111741'},\n>> ... ...\n>> },\n>> 'msg': ''}\n```\n\n#### 9.2.3 get_ticker\u5355\u4e2a\u4ea7\u54c1\u7684\u884c\u60c5\u4fe1\u606f\n\n\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613BTC-USDT\u7684\u884c\u60c5\u4fe1\u606f\n\n```python\nfrom okx_candle.market import Market\nfrom pprint import pprint\n\nticker= Market('SPOT').get_ticker('BTC-USDT')\npprint(ticker)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'askPx': '22899',\n>> 'askSz': '2.33950433',\n>> 'bidPx': '22898.9',\n>> 'bidSz': '0.0158674',\n>> 'high24h': '23158.5',\n>> 'instId': 'BTC-USDT',\n>> 'instType': 'SPOT',\n>> 'last': '22899.1',\n>> 'lastSz': '0.0088645',\n>> 'low24h': '22617.6',\n>> 'open24h': '22873.4',\n>> 'sodUtc0': '22761.7',\n>> 'sodUtc8': '23044',\n>> 'ts': '1675746841912',\n>> 'vol24h': '4964.63889278',\n>> 'volCcy24h': '113460685.97182664'},\n>> 'msg': ''}\n```\n\n### 9.3 \u6df1\u5ea6\u4fe1\u606f\n\n\n#### 9.3.1 get_books \u83b7\u53d6\u6307\u5b9a\u6570\u91cf\u7684\u4ea4\u6613\u6df1\u5ea6\n\n\u83b7\u53d6BTC-USDT\u6570\u91cf\u4e3a10\u7684\u4ea4\u6613\u6df1\u5ea6\n\n```python\nfrom okx_candle.market import Market\nfrom pprint import pprint\n\n# \u83b7\u53d6BTC-USDT\u6570\u91cf\u4e3a10\u7684\u4ea4\u6613\u6df1\u5ea6\nbooks = Market('SPOT').get_books(symbol='BTC-USDT', sz=10)\npprint(books)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'asks': [['22984.1', '0.04262762', '0', '1'],\n>> ['22984.4', '0.00001418', '0', '1'],\n>> ['22984.6', '0.00122351', '0', '1'],\n>> ['22984.7', '0.18242595', '0', '1'],\n>> ['22984.8', '0.43504989', '0', '1'],\n>> ['22984.9', '0.02', '0', '1'],\n>> ['22985', '0.00073602', '0', '2'],\n>> ['22985.2', '0.00027888', '0', '2'],\n>> ['22985.6', '0.06865', '0', '1'],\n>> ['22986', '0.2', '0', '1']],\n>> 'bids': [['22984', '2.39785187', '0', '6'],\n>> ['22983.9', '0.50376', '0', '1'],\n>> ['22983.8', '0.50376', '0', '1'],\n>> ['22983.3', '0.52508576', '0', '3'],\n>> ['22983.2', '0.70027528', '0', '3'],\n>> ['22982.4', '0.28512292', '0', '1'],\n>> ['22982.2', '0.48940938', '0', '2'],\n>> ['22982.1', '0.14110164', '0', '3'],\n>> ['22981.7', '0.405', '0', '1'],\n>> ['22981.4', '1.07226237', '0', '1']],\n>> 'ts': '1675751273508'},\n>> 'msg': ''}\n```\n\n#### 9.3.2 get_books_lite \u83b7\u53d6\u4ea7\u54c1\u8f7b\u91cf\u6df1\u5ea6\n\n\u83b7\u53d6BTC-USDT\u4ea7\u54c1\u8f7b\u91cf\u6df1\u5ea6\n\n```python\nfrom okx_candle.market import Market\nfrom pprint import pprint\n\n# \u83b7\u53d6BTC-USDT\u4ea7\u54c1\u8f7b\u91cf\u6df1\u5ea6\nbooks_lite = Market('SPOT').get_books_lite(symbol='BTC-USDT')\npprint(books_lite)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'asks': [['22971.9', '0.71286', '0', '2'],\n>> ['22973.5', '0.23401145', '0', '1'],\n>> ['22973.6', '0.081', '0', '1'],\n>> ['22973.7', '0.43499859', '0', '1'],\n>> ['22974', '0.06903', '0', '1'],\n>> ['22974.4', '0.004', '0', '1'],\n>> ['22974.5', '0.5', '0', '1'],\n>> ['22974.6', '0.43564805', '0', '1'],\n>> ['22974.7', '1.08912', '0', '1'],\n>> ['22975.2', '0.47865', '0', '1'],\n>> ['22975.7', '1.00070534', '0', '2'],\n>> ['22975.8', '1.19917196', '0', '2'],\n>> ['22976.1', '0.89389485', '0', '2'],\n>> ['22976.3', '1.02', '0', '1'],\n>> ['22976.5', '1.23', '0', '1'],\n>> ['22976.9', '0.522369', '0', '1'],\n>> ['22977', '0.06903', '0', '1'],\n>> ['22977.2', '0.459716', '0', '2'],\n>> ['22977.6', '0.19495', '0', '1'],\n>> ['22977.7', '0.69824', '0', '3'],\n>> ['22978.4', '0.04353153', '0', '1'],\n>> ['22978.6', '0.03101096', '0', '1'],\n>> ['22978.8', '0.19495', '0', '1'],\n>> ['22979.8', '0.10400006', '0', '1'],\n>> ['22979.9', '0.21753307', '0', '2']],\n>> 'bids': [['22971.8', '0.46432166', '0', '9'],\n>> ['22971.7', '0.21764725', '0', '1'],\n>> ['22970.7', '0.25', '0', '1'],\n>> ['22970.5', '0.25', '0', '1'],\n>> ['22970.3', '0.45233576', '0', '1'],\n>> ['22970.2', '1.32413482', '0', '3'],\n>> ['22970.1', '0.26602378', '0', '1'],\n>> ['22970', '2.17468626', '0', '2'],\n>> ['22969.6', '0.06903', '0', '1'],\n>> ['22969.5', '0.405', '0', '1'],\n>> ['22969.1', '0.02829885', '0', '1'],\n>> ['22969', '0.01004368', '0', '1'],\n>> ['22968.9', '0.19497', '0', '1'],\n>> ['22968.7', '1.026129', '0', '2'],\n>> ['22968.6', '0.02211866', '0', '1'],\n>> ['22968.5', '0.004', '0', '1'],\n>> ['22968.4', '0.48971419', '0', '1'],\n>> ['22968.2', '0.43536205', '0', '1'],\n>> ['22968.1', '0.0131622', '0', '1'],\n>> ['22968', '0.19496', '0', '1'],\n>> ['22967.9', '0.10111929', '0', '1'],\n>> ['22967.8', '0.049236', '0', '1'],\n>> ['22967.6', '1.08912', '0', '1'],\n>> ['22967.4', '0.00229642', '0', '1'],\n>> ['22967.1', '15.97347853', '0', '1']],\n>> 'ts': '1675751401319'},\n>> 'msg': ''}\n```\n\n### 9.4 \u4ea4\u6613\u89c4\u8303\n\n#### 9.4.1 \u7f13\u5b58\u673a\u5236\n\n\u4ea4\u6613\u89c4\u8303\u7684\u8fd4\u56de\u4fe1\u606f\u5185\u5bb9\u8f83\u591a\uff0c\u4e14\u672c\u8eab\u6539\u52a8\u9891\u7387\u8f83\u5c0f\uff0c\u5728Okx_candle\u4e2d\u9ed8\u8ba4\u91c7\u7528\u7f13\u5b58\u7684\u65b9\u5f0f\u83b7\u53d6\u4ea4\u6613\u89c4\u8303\u7ed3\u679c\uff0c\u4ee5\u63d0\u9ad8\u901f\u5ea6\u3002\n\n\u7b2c\u4e00\u6b21\u83b7\u53d6\u4ea4\u6613\u89c4\u8303\u4fe1\u606f\u4f1a\u5411\u5b98\u65b9\u53d1\u9001\u8bf7\u6c42\uff0c\u5c06\u8bf7\u6c42\u7ed3\u679c\u4fdd\u5b58\u5728\u7f13\u5b58\u4e2d\uff0c\u968f\u540e\u518d\u6b21\u83b7\u53d6\u4ea4\u6613\u89c4\u8303\u4fe1\u606f\u4f1a\u9a8c\u8bc1\u4e0a\u6b21\u7f13\u5b58\u7684\u6570\u636e\u662f\u5426\u7b26\u5408\u8fc7\u671f\uff0c\u8fc7\u671f\u5219\u91cd\u65b0\u8bbf\u95ee\uff0c\u5426\u5219\u8fd4\u56de\u7f13\u5b58\u6570\u636e\u3002\n\n\u5982\u679c\u4e0d\u4f7f\u7528\u7f13\u5b58\uff0c\u53ef\u4ee5\u5c06\u8fc7\u671f\u65f6\u95f4expire_seconds\u8bbe\u7f6e\u4e3a0\uff08\u5355\u4f4d\uff1a\u79d2\uff09\u3002\n\n#### 9.4.2 get_exchangeInfos \u5b8c\u6574\u7684\u4ea4\u6613\u89c4\u8303\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|expire_seconds|int|300|\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4|\n|uly|str|''|\u6807\u7684\u6307\u6570\uff0c\u4ec5\u9002\u7528\u4e8e\u4ea4\u5272/\u6c38\u7eed/\u671f\u6743\uff0c\u671f\u6743\u5fc5\u586b|\n\n\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613\u7684\u4ea4\u6613\u89c4\u5219\u4fe1\u606f\u3002\n\n```python\nfrom okx_candle import Market\nfrom pprint import pprint\n\nexchangeInfos = Market('SPOT').get_exchangeInfos()\npprint(exchangeInfos)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': [{'alias': '',\n>> 'baseCcy': 'BTC',\n>> 'category': '1',\n>> 'ctMult': '',\n>> 'ctType': '',\n>> 'ctVal': '',\n>> 'ctValCcy': '',\n>> 'expTime': '',\n>> 'instFamily': '',\n>> 'instId': 'BTC-USDT',\n>> 'instType': 'SPOT',\n>> 'lever': '10',\n>> 'listTime': '1548133413000',\n>> 'lotSz': '0.00000001',\n>> 'maxIcebergSz': '9999999999',\n>> 'maxLmtSz': '9999999999',\n>> 'maxMktSz': '1000000',\n>> 'maxStopSz': '1000000',\n>> 'maxTriggerSz': '9999999999',\n>> 'maxTwapSz': '9999999999',\n>> 'minSz': '0.00001',\n>> 'optType': '',\n>> 'quoteCcy': 'USDT',\n>> 'settleCcy': '',\n>> 'state': 'live',\n>> 'stk': '',\n>> 'tickSz': '0.1',\n>> 'uly': ''},\n>> 'state': 'live',\n>> 'stk': '',\n>> 'tickSz': '0.01',\n>> 'uly': ''},\n>> ... ...\n>> ],\n>> 'msg': ''}\n```\n\n#### 9.4.3 get_exchangeInfo \u5355\u4e2a\u4ea7\u54c1\u7684\u4ea4\u6613\u89c4\u8303\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|symbol|str|\u65e0|\u4ea7\u54c1\u540d\u79f0|\n|expire_seconds|int|300|\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4|\n|uly|str|''|\u6807\u7684\u6307\u6570\uff0c\u4ec5\u9002\u7528\u4e8e\u4ea4\u5272/\u6c38\u7eed/\u671f\u6743\uff0c\u671f\u6743\u5fc5\u586b|\n\n\n\u83b7\u53d6\u6c38\u7eed\u5408\u7ea6\u4e2dBTC-USDT-SWAP\u7684\u4ea4\u6613\u89c4\u8303\n\n```python\nfrom okx_candle import Market\nfrom pprint import pprint\n\nexchangeInfos = Market('SWAP').get_exchangeInfo(symbol='BTC-USDT-SWAP')\npprint(exchangeInfos)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': {'alias': '',\n>> 'baseCcy': '',\n>> 'category': '1',\n>> 'ctMult': '1',\n>> 'ctType': 'linear',\n>> 'ctVal': '0.01',\n>> 'ctValCcy': 'BTC',\n>> 'expTime': '',\n>> 'instFamily': 'BTC-USDT',\n>> 'instId': 'BTC-USDT-SWAP',\n>> 'instType': 'SWAP',\n>> 'lever': '125',\n>> 'listTime': '1611916828000',\n>> 'lotSz': '1',\n>> 'maxIcebergSz': '100000000',\n>> 'maxLmtSz': '100000000',\n>> 'maxMktSz': '10000',\n>> 'maxStopSz': '10000',\n>> 'maxTriggerSz': '100000000',\n>> 'maxTwapSz': '100000000',\n>> 'minSz': '1',\n>> 'optType': '',\n>> 'quoteCcy': '',\n>> 'settleCcy': 'USDT',\n>> 'state': 'live',\n>> 'stk': '',\n>> 'tickSz': '0.1',\n>> 'uly': 'BTC-USDT'},\n>> 'msg': ''}\n```\n\n\n#### 9.4.4 get_symbols_trading_on \u83b7\u53d6\u53ef\u4ee5\u4ea4\u6613\u7684\u4ea7\u54c1\u540d\u79f0\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|expire_seconds|int|300|\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4|\n|uly|str|''|\u6807\u7684\u6307\u6570\uff0c\u4ec5\u9002\u7528\u4e8e\u4ea4\u5272/\u6c38\u7eed/\u671f\u6743\uff0c\u671f\u6743\u5fc5\u586b|\n\n\u83b7\u53d6\u4ea4\u5272\u5408\u7ea6\u6b63\u5728\u4ea4\u6613\u7684\u4ea7\u54c1\u540d\u79f0\u5217\u8868\n\n```python\nfrom okx_candle import Market\nfrom pprint import pprint\n\nexchangeInfos = Market('FUTURES').get_symbols_trading_on()\npprint(exchangeInfos)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0',\n>> 'data': ['BTC-USD-230210',\n>> 'BTC-USD-230217',\n>> 'BTC-USD-230331',\n>> 'BTC-USD-230630',\n>> 'ETH-USD-230210',\n>> ... ...\n>> ],\n>> 'msg': ''}\n```\n\n#### 9.4.5 get_symbols_trading_off \u83b7\u53d6\u4e0d\u53ef\u4ea4\u6613\u7684\u4ea7\u54c1\u540d\u79f0\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|expire_seconds|int|300|\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4|\n|uly|str|''|\u6807\u7684\u6307\u6570\uff0c\u4ec5\u9002\u7528\u4e8e\u4ea4\u5272/\u6c38\u7eed/\u671f\u6743\uff0c\u671f\u6743\u5fc5\u586b|\n\n\u83b7\u53d6\u4ea4\u5272\u5408\u7ea6\u4e0d\u53ef\u4ea4\u6613\u4ea7\u54c1\u540d\u79f0\u5217\u8868\n\n```python\nfrom okx_candle import Market\nfrom pprint import pprint\n\nexchangeInfos = Market('FUTURES').get_symbols_trading_off()\npprint(exchangeInfos)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': '0', 'data': [], 'msg': ''}\n```\n\n## 10 \u5386\u53f2K\u7ebf\u7ba1\u7406\n\n### 10.1 OkxLite \u7b80\u4ecb\n\n\nOkxLite\u57fa\u4e8ecandlelite\u7684IO\u4e3a\u5e95\u5c42\uff0c\u7528\u4e8e\u7ef4\u62a4\u672c\u5730OKX\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u7531\u4e8eOkxLite\u91c7\u7528\u65e5\u671f\u5206\u5272\u7684CSV\u6587\u4ef6\u5b58\u50a8\uff0c\u4e0d\u9700\u8981\u5b89\u88c5\u7b2c\u4e09\u65b9\u6570\u636e\u5e93\u3002\u5e76\u4e14\u7531\u4e8e\u9ed8\u8ba4\u7cfb\u7edf\u8def\u5f84\u7684\u914d\u7f6e\u53ef\u4ee5\u4f7f\u4e0d\u540c\u8def\u5f84\u7684\u9879\u76ee\u5171\u4eab\u5386\u53f2K\u7ebf\u6570\u636e\u3002\n\n```python\nfrom okx_candle import OkxLite\n\nokxLite = OkxLite()\ncandle = okxLite.load_candle_by_date(\n instType='SPOT',\n symbol='BTC-USDT',\n start='2023-02-05',\n end='2023-02-06',\n)\nprint(candle)\n```\n\n\u5bf9\u4e8e\u4efb\u4f55\u5386\u53f2K\u7ebf\u6570\u636e\u7684\u8bfb\u53d6\uff0c\u90fd\u9700\u8981\u65f6\u533atimezone\u3001\u65f6\u95f4\u7c92\u5ea6bar\u3001\u6570\u636e\u4f4d\u7f6ebase_dir\uff0c\u5982\u679c\u5728\u8c03\u7528\u51fd\u6570\u7684\u65f6\u5019\u4e0d\u6307\u5b9a\u8fd9\u4e09\u4e2a\u5185\u5bb9\uff0c\u5c06\u4f7f\u7528candlelite\u7684\u9ed8\u8ba4\u914d\u7f6e\u3002\n\n\u4f60\u53ef\u4ee5\u5728candlelite\u4e2d\u67e5\u770bOKX\u9ed8\u8ba4\u7684\u914d\u7f6e\u5185\u5bb9\u3002\n\n```cmd\ncandlelite show_settings # \u67e5\u770b\u914d\u7f6e\u4fe1\u606f\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> # \u5386\u53f2K\u7ebf\u6570\u636e\u6839\u76ee\u5f55\n>> CANDLE_BASE_DIR = 'CANDLELITE_DATA'\n>> # OKX\u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u7684\u5b58\u50a8\u76ee\u5f55\n>> OKX_DATE_DIRNAME = 'OKX'\n>> # OKX\u4ee5\u6587\u4ef6\u4e3a\u5355\u4f4d\u7684\u5b58\u50a8\u76ee\u5f55\n>> OKX_FILE_DIRNAME = 'OKX_FILE'\n>> # OKX\u7684\u9ed8\u8ba4\u65f6\u533a\n>> OKX_TIMEZONE = 'Asia/Shanghai'\n>> # OKX\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6\n>> OKX_DEFAULT_BAR = '1m'\n>> # BINANCE\u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u7684\u5b58\u50a8\u76ee\u5f55\n>> BINANCE_DATE_DIRNAME = 'BINANCE'\n>> # BINANCE\u4ee5\u6587\u4ef6\u4e3a\u5355\u4f4d\u7684\u5b58\u50a8\u76ee\u5f55\n>> BINANCE_FILE_DIRNAME = 'BINANCE_FILE'\n>> # BINANCE\u7684\u9ed8\u8ba4\u65f6\u533a\n>> BINANCE_TIMEZONE = 'America/New_York'\n>> # BINANCE\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6\n>> BINANCE_DEFAULT_BAR = '1m'\n```\n\n\u4fee\u6539\u914d\u7f6e\u5185\u5bb9\n\n```cmd\ncandlelite console_settings\n```\n\n\u4e3a\u4e86\u8ba9\u591a\u4e2a\u4e0d\u540c\u8def\u5f84\u672c\u5730\u9879\u76ee\u53ef\u4ee5\u5171\u4eab\u6570\u636e\uff0c\u53ef\u4ee5\u5c06\"CANDLE_BASE_DIR\"\u8bbe\u7f6e\u4e3a\u7edd\u5bf9\u8def\u5f84\uff0c\u4f8b\u5982\uff1a'/root/CANDLELITE_DATA' \u6216 'd:\\CANDLELITE_DATA'\u3002\n\n### 10.2 \u8bfb\u53d6\u6570\u636e\n\n#### 10.2.1 load_candle_by_date \n\nload_candle_by_date \u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u8bfb\u53d6\u5355\u4e2a\u4ea7\u54c1\u5386\u53f2K\u7ebf\u6570\u636e\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|instType|str|\u65e0|\u4ea7\u54c1\u7c7b\u522b\uff08\u73b0\u8d27\uff1aSPOT\u3001\u6c38\u7eed\u5408\u7ea6\uff1aSWAP\u3001\u4ea4\u5272\u5408\u7ea6\uff1aFUTURES\u3001\u671f\u6743\uff1aOPTION\uff09|\n|symbol|str|\u65e0|\u4ea7\u54c1\u540d\u79f0|\n|start|Union[int,float,str,datetime.date]|\u65e0|\u8d77\u59cb\u65e5\u671f|\n|end|Union[int,float,str,datetime.date]|\u65e0|\u7ec8\u6b62\u65e5\u671f|\n|base_dir|Union[str,None]|None|\u6570\u636e\u6839\u76ee\u5f55\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6|\n|valid_interval|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u95f4\u9694|\n|valid_start|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u8d77\u70b9|\n|valid_end|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u7ec8\u70b9|\n\n\n\u8bfb\u53d6\u6c38\u7eed\u5408\u7ea6\u4e2dBTC-USDT-SWAP\u4ece2023-02-05 ~ 2023-02-06 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\n\n```python\nfrom okx_candle import OkxLite\nfrom okx_candle.utils import candle_to_df\n\nokxLite = OkxLite()\ncandle = okxLite.load_candle_by_date(\n instType='SWAP',\n symbol='BTC-USDT-SWAP',\n start='2023-02-05',\n end='2023-02-06',\n)\nprint(candle)\nprint(candle_to_df(candle))\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> [[1.67552640e+12 2.34210000e+04 2.34210000e+04 ... 1.43600000e+01\n>> 3.36317906e+05 1.00000000e+00]\n>> [1.67552646e+12 2.34180000e+04 2.34204000e+04 ... 1.14600000e+01\n>> 2.68392212e+05 1.00000000e+00]\n>> [1.67552652e+12 2.34189000e+04 2.34189000e+04 ... 2.64600000e+01\n>> 6.19663133e+05 1.00000000e+00]\n>> ...\n>> [1.67569902e+12 2.30466000e+04 2.30646000e+04 ... 6.09610000e+02\n>> 1.40355779e+07 1.00000000e+00]\n>> [1.67569908e+12 2.30215000e+04 2.30581000e+04 ... 2.97780000e+02\n>> 6.86059486e+06 1.00000000e+00]\n>> [1.67569914e+12 2.30259000e+04 2.30500000e+04 ... 4.57730000e+02\n>> 1.05412472e+07 1.00000000e+00]]\n>> ts o h ... volCcy volCcyQuote confirm\n>> 0 2023-02-05 00:00:00 23421.0 23421.0 ... 14.36 3.363179e+05 1\n>> 1 2023-02-05 00:01:00 23418.0 23420.4 ... 11.46 2.683922e+05 1\n>> 2 2023-02-05 00:02:00 23418.9 23418.9 ... 26.46 6.196631e+05 1\n>> 3 2023-02-05 00:03:00 23418.9 23418.9 ... 29.65 6.943548e+05 1\n>> 4 2023-02-05 00:04:00 23418.8 23418.8 ... 9.19 2.152163e+05 1\n>> ... ... ... ... ... ... ... ...\n>> 2875 2023-02-06 23:55:00 22904.4 22926.9 ... 190.28 4.359824e+06 1\n>> 2876 2023-02-06 23:56:00 22905.9 23059.7 ... 2489.29 5.725731e+07 1\n>> 2877 2023-02-06 23:57:00 23046.6 23064.6 ... 609.61 1.403558e+07 1\n>> 2878 2023-02-06 23:58:00 23021.5 23058.1 ... 297.78 6.860595e+06 1\n>> 2879 2023-02-06 23:59:00 23025.9 23050.0 ... 457.73 1.054125e+07 1\n>> \n>> [2880 rows x 9 columns]\n```\n\n#### 10.2.1 load_candle_map_by_date\n\n load_candle_map_by_date \u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u8bfb\u53d6\u5168\u90e8\u4ea7\u54c1\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|instType|str|\u65e0|\u4ea7\u54c1\u7c7b\u522b\uff08\u73b0\u8d27\uff1aSPOT\u3001\u6c38\u7eed\u5408\u7ea6\uff1aSWAP\u3001\u4ea4\u5272\u5408\u7ea6\uff1aFUTURES\u3001\u671f\u6743\uff1aOPTION\uff09|\n|symbols|list|\u65e0|\u4ea7\u54c1\u540d\u79f0\u5217\u8868\uff0c\u5982\u679c\u4e3a\u7a7a\u5217\u8868\uff0c\u8bfb\u53d6\u4ecestart~end\u8303\u56f4\u6570\u636e\u5b8c\u6574\u7684\u5168\u90e8\u4ea7\u54c1|\n|start|Union[int,float,str,datetime.date]|\u65e0|\u8d77\u59cb\u65e5\u671f|\n|end|Union[int,float,str,datetime.date]|\u65e0|\u7ec8\u6b62\u65e5\u671f|\n|base_dir|Union[str,None]|None|\u6570\u636e\u6839\u76ee\u5f55\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6|\n|contains|str|''|\u4ea7\u54c1\u540d\u79f0\u4e2d\u9700\u5305\u542b\u7684\u5185\u5bb9\uff0c\u4e0d\u6ee1\u8db3\u5219\u8fc7\u6ee4\u8bfb\u53d6|\n|endswith|str|''|\u4ea7\u54c1\u540d\u79f0\u4e2d\u9700\u4ee5\u4f55\u7ed3\u5c3e\uff0c\u4e0d\u6ee1\u8db3\u5219\u8fc7\u6ee4\u8bfb\u53d6|\n|p_num|int|4|\u4f7f\u7528\u591a\u8fdb\u7a0b\u52a0\u901f\u8bfb\u53d6\uff0c\u8fdb\u7a0b\u4e2a\u6570|\n|valid_interval|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u95f4\u9694|\n|valid_start|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u8d77\u70b9|\n|valid_end|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u7ec8\u70b9|\n\n\n\n\n\u8bfb\u53d6SWAP\u6c38\u7eed\u5408\u7ea6\u4ece2023-02-05 ~ 2023-02-06 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178\n\n```python\nfrom okx_candle import OkxLite\nfrom pprint import pprint\n\nokxLite = OkxLite()\ncandle_map = okxLite.load_candle_map_by_date(\n instType='SWAP',\n symbols=[],\n start='2023-02-05',\n end='2023-02-06',\n)\npprint(candle_map)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'1INCH-USD-SWAP': array([[1.67552640e+12, 5.93500000e-01, 5.93500000e-01, ...,\n>> 3.07623541e+04, 1.82200000e+04, 1.00000000e+00],\n>> [1.67552646e+12, 5.91000000e-01, 5.91000000e-01, ...,\n>> 2.03057100e+02, 1.20000000e+02, 1.00000000e+00],\n>> [1.67552652e+12, 5.89700000e-01, 5.89700000e-01, ...,\n>> 1.16300361e+04, 6.85000000e+03, 1.00000000e+00],\n>> ...,\n>> [1.67569902e+12, 5.69000000e-01, 5.69000000e-01, ...,\n>> 1.00271660e+03, 5.70000000e+02, 1.00000000e+00],\n>> [1.67569908e+12, 5.69300000e-01, 5.69300000e-01, ...,\n>> 1.12456120e+03, 6.40000000e+02, 1.00000000e+00],\n>> [1.67569914e+12, 5.69900000e-01, 5.69900000e-01, ...,\n>> 2.63204100e+02, 1.50000000e+02, 1.00000000e+00]]),\n>> '1INCH-USDT-SWAP': array([[1.67552640e+12, 5.92800000e-01, 5.92800000e-01, ...,\n>> 2.85980000e+04, 1.69345529e+04, 1.00000000e+00],\n>> [1.67552646e+12, 5.91600000e-01, 5.91900000e-01, ...,\n>> 6.96700000e+03, 4.12095040e+03, 1.00000000e+00],\n>> [1.67552652e+12, 5.90800000e-01, 5.90800000e-01, ...,\n>> 4.13370000e+04, 2.43720806e+04, 1.00000000e+00],\n>> ...,\n>> [1.67569902e+12, 5.68500000e-01, 5.68900000e-01, ...,\n>> 1.28770000e+04, 7.31486060e+03, 1.00000000e+00],\n>> [1.67569908e+12, 5.67900000e-01, 5.69400000e-01, ...,\n>> 1.89130000e+04, 1.07618407e+04, 1.00000000e+00],\n>> [1.67569914e+12, 5.68900000e-01, 5.70200000e-01, ...,\n>> 8.65900000e+03, 4.93041580e+03, 1.00000000e+00]]),\n>> ... ...\n>> }\n```\n\n\n\n### 10.3 \u4fdd\u5b58\u6570\u636e\n\n#### 10.3.1 save_candle_by_date\n\nsave_candle_by_date \u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u4fdd\u5b58\u5355\u4e2a\u4ea7\u54c1\u5386\u53f2K\u7ebf\u6570\u636e\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|candle|np.ndarray|\u65e0|\u5386\u53f2K\u7ebf\u6570\u636e|\n|instType|str|\u65e0|\u4ea7\u54c1\u7c7b\u522b\uff08\u73b0\u8d27\uff1aSPOT\u3001\u6c38\u7eed\u5408\u7ea6\uff1aSWAP\u3001\u4ea4\u5272\u5408\u7ea6\uff1aFUTURES\u3001\u671f\u6743\uff1aOPTION\uff09|\n|symbol|str|\u65e0|\u4ea7\u54c1\u540d\u79f0|\n|start|Union[int,float,str,datetime.date]|\u65e0|\u8d77\u59cb\u65e5\u671f|\n|end|Union[int,float,str,datetime.date]|\u65e0|\u7ec8\u6b62\u65e5\u671f|\n|base_dir|Union[str,None]|None|\u6570\u636e\u6839\u76ee\u5f55\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6|\n|replace|bool|False|\u662f\u5426\u66ff\u6362\u672c\u5730\u6570\u636e|\n|drop_duplicate|bool|True|\u662f\u5426\u53bb\u91cd|\n|sort|bool|True|\u662f\u5426\u6309\u7167\u65f6\u95f4\u6233\u6392\u5e8f|\n|valid_interval|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u95f4\u9694|\n|valid_start|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u8d77\u70b9|\n|valid_end|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u7ec8\u70b9|\n\n\u8bfb\u53d6\u6c38\u7eed\u5408\u7ea6\u4e2dBTC-USDT-SWAP\u4ece 2023-02-01 ~ 2023-02-06 \u65e5\u7684\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u622a\u53d62023-02-05\u65e5\u7684\u6570\u636e\uff0c\u4fdd\u5b58\u5230\u6307\u5b9a\u6587\u4ef6\u5939\u3002\n\n```python\nfrom okx_candle import OkxLite\n\ninstType = 'SWAP'\nsymbol = 'BTC-USDT-SWAP'\nokxLite = OkxLite()\n\n# \u8bfb\u53d6\ncandle = okxLite.load_candle_by_date(\n instType=instType,\n symbol=symbol,\n start='2023-02-01',\n end='2023-02-6',\n)\n\n# \u4fdd\u5b58\nokxLite.save_candle_by_date(\n candle=candle,\n instType=instType,\n symbol=symbol,\n start='2023-02-05',\n end='2023-02-05',\n base_dir='./target_dir'\n)\n```\n\n\n#### 10.3.2 save_candle_map_by_date\n\nsave_candle_by_date \u4ee5\u65e5\u671f\u4e3a\u5355\u4f4d\u4fdd\u5b58\u4ea7\u54c1\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178\n\n|\u53c2\u6570|\u7c7b\u578b|\u9ed8\u8ba4\u503c|\u8bf4\u660e|\n|:---|:---|:---|:---|\n|candle_map|dict|\u65e0|\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178|\n|instType|str|\u65e0|\u4ea7\u54c1\u7c7b\u522b\uff08\u73b0\u8d27\uff1aSPOT\u3001\u6c38\u7eed\u5408\u7ea6\uff1aSWAP\u3001\u4ea4\u5272\u5408\u7ea6\uff1aFUTURES\u3001\u671f\u6743\uff1aOPTION\uff09|\n|symbols|list|\u65e0|\u4fdd\u5b58\u7684\u4ea7\u54c1\u540d\u79f0\uff0c\u7a7a\u5217\u8868\u8868\u793acandle_map\u4e2d\u7684\u5168\u90e8\u4ea7\u54c1|\n|start|Union[int,float,str,datetime.date]|\u65e0|\u8d77\u59cb\u65e5\u671f|\n|end|Union[int,float,str,datetime.date]|\u65e0|\u7ec8\u6b62\u65e5\u671f|\n|base_dir|Union[str,None]|None|\u6570\u636e\u6839\u76ee\u5f55\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dOkx\u7684\u9ed8\u8ba4\u65f6\u95f4\u7c92\u5ea6|\n|replace|bool|False|\u662f\u5426\u66ff\u6362\u672c\u5730\u6570\u636e|\n|drop_duplicate|bool|True|\u662f\u5426\u53bb\u91cd|\n|sort|bool|True|\u662f\u5426\u6309\u7167\u65f6\u95f4\u6233\u6392\u5e8f|\n|valid_interval|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u95f4\u9694|\n|valid_start|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u8d77\u70b9|\n|valid_end|bool|True|\u662f\u5426\u9a8c\u8bc1\u6570\u636e\u7684\u65f6\u95f4\u7ec8\u70b9|\n\n\u8bfb\u53d6\u73b0\u8d27\u4ece2023-01-01 ~ 2023-01-10 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178\uff0c\u622a\u53d62023-01-05 ~ 2023-01-06 \u65e5\u671f\u8303\u56f4\u6570\u636e\u4fdd\u5b58\u5230\u6307\u5b9a\u6587\u4ef6\u5939\u4e2d\u3002\n\n```python\nfrom okx_candle import OkxLite\n\ninstType = 'SWAP'\nokxLite = OkxLite()\n\n# \u8bfb\u53d6\ncandle_map = okxLite.load_candle_map_by_date(\n instType='SWAP',\n symbols=[],\n start='2023-01-01',\n end='2023-01-10',\n)\n\n# \u4fdd\u5b58\nokxLite.save_candle_map_by_date(\n candle_map=candle_map,\n instType=instType,\n symbols=[],\n start='2023-01-05',\n end='2023-01-06',\n base_dir='./target_dir'\n)\n```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "OKX local and real-time market candle server",
"version": "2.0.1",
"project_urls": {
"Homepage": "https://github.com/pyted/okx_candle"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f4b2f31ef897e29667a7e86a3398be99c9614015ec296b948e4ff6ec1e595aad",
"md5": "22d455cc7b036bf25b249202d8404f5a",
"sha256": "b3b7d665328e4c522297bc7446c51ceace39f65197af4b280469252f8469cdb8"
},
"downloads": -1,
"filename": "okx_candle-2.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "22d455cc7b036bf25b249202d8404f5a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6.0",
"size": 29156,
"upload_time": "2023-10-21T06:43:35",
"upload_time_iso_8601": "2023-10-21T06:43:35.180887Z",
"url": "https://files.pythonhosted.org/packages/f4/b2/f31ef897e29667a7e86a3398be99c9614015ec296b948e4ff6ec1e595aad/okx_candle-2.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "143cbecca53eee7b48fb8ba018c1b43c3e7ce07ad59c5a907a167f21589edc37",
"md5": "31dc98f8777bb60019147f5314a48ddd",
"sha256": "326ce08ee7b73f8b13e6fd9e5de3a356b6db8b92cae8925d3c6d566ad7ea2d5a"
},
"downloads": -1,
"filename": "okx_candle-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "31dc98f8777bb60019147f5314a48ddd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6.0",
"size": 755178,
"upload_time": "2023-10-21T06:43:38",
"upload_time_iso_8601": "2023-10-21T06:43:38.021173Z",
"url": "https://files.pythonhosted.org/packages/14/3c/becca53eee7b48fb8ba018c1b43c3e7ce07ad59c5a907a167f21589edc37/okx_candle-2.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-21 06:43:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pyted",
"github_project": "okx_candle",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "okx-candle"
}