binance-candle


Namebinance-candle JSON
Version 1.0.10 PyPI version JSON
download
home_pagehttps://github.com/pyted/binance_candle
SummaryBinance local and real-time market candle server
upload_time2023-10-19 13:53:11
maintainer
docs_urlNone
authorpyted
requires_python>=3.6.0
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# Binance_candle v1.0.10

## 1 Binance_candle的设计目的?

**1.为本地模拟交易提供历史数据**

- 支持现货、U本位合约、币本位合约历史K线下载、管理与快速读取。

**2.为实盘交易决策依据**

- 支持现货与合约产品实时最新历史K线数据的缓存更新
- 获取实时行情数据

## 2 安装Binance_candle


```cmd
pip3 install binance_candle
```

GITHUB:https://github.com/pyted/binance_candle

里面有Binance_candle的使用例子:

![](vx_images/244075001625094.png)

## 3 快速开始

### 3.1 维护产品实时历史K线数据candle_map

以U本位产品为例,运行run_candle_map函数后,会以多线程的方式维护candle_map属性,保证candle_map的时效性。

candle_map的格式:candle_map[\<symbol:str\>] = \<candle:np.ndarray\>

```python
from binance_candle import CandleServer

candleServer = CandleServer('UM') # UM:U本位合约
candleServer.run_candle_map()
print(candleServer.candle_map)
```

输出:

```text
>> {
>>     '1000LUNCBUSD': array(
>>         [[1.67496882e+12, 1.74100000e-01, 1.74100000e-01, ...,
>>           7.31000000e+03, 1.27199670e+03, 0.00000000e+00],
>>          [1.67496888e+12, 1.74000000e-01, 1.74200000e-01, ...,
>>           1.90710000e+04, 3.31999150e+03, 0.00000000e+00],
>>          [1.67496894e+12, 1.74200000e-01, 1.74200000e-01, ...,
>>           3.23500000e+03, 5.63537000e+02, 0.00000000e+00],
>>          ...,
>>          [1.67514144e+12, 1.66000000e-01, 1.66000000e-01, ...,
>>           1.00560000e+04, 1.66929600e+03, 0.00000000e+00],
>>          [1.67514150e+12, 1.65800000e-01, 1.65800000e-01, ...,
>>           3.56710000e+04, 5.91068840e+03, 0.00000000e+00],
>>          [1.67514156e+12, 1.65700000e-01, 1.65800000e-01, ...,
>>           7.88270000e+04, 1.30688056e+04, 0.00000000e+00]]
>>     ),
>>     ... ... 
>> }
```

### 3.2 每日定时下载历史K线

以现货交易为例,每天定时下载前一天的历史K线数据。

```python
from binance_candle import CandleServer

candleServer = CandleServer('SPOT') # SPOT:现货交易
candleServer.download_daily()
```

### 3.3 获取实时最优挂单价格

以币本位合约为例,获取实时最优挂单价格

```python
from binance_candle import CandleServer

candleServer = CandleServer('CM') # CM:币本位合约
bookTickerMap = candleServer.market.get_bookTickersMap()
print(bookTickerMap)
```

输出:

```text
>> {
>>      'code': 200,
>>      'data': {'AAVEUSD_PERP': {'askPrice': '81.300',
>>                                'askQty': '92',
>>                                'bidPrice': '81.260',
>>                                'bidQty': '42',
>>                                'pair': 'AAVEUSD',
>>                                'symbol': 'AAVEUSD_PERP',
>>                                'time': 1675143719137},
>>               'ADAUSD_230331': {'askPrice': '0.37198',
>>                                 'askQty': '100',
>>                                 'bidPrice': '0.37170',
>>                                 'bidQty': '30',
>>                                 'pair': 'ADAUSD',
>>                                 'symbol': 'ADAUSD_230331',
>>                                 'time': 1675143718074},
>>               ... ...
>>               }
>>      'msg': ''
>> }
```

## 4 历史K线candle的数据说明

### 4.1 K线的格式

为了保证运算的速度,candle采用np.ndarray类型存储。

|列索引|字段解释|例子|
|:---|:---|:---|
|0|K线开盘时间|1499040000000.0|
|1|开盘价|0.01634790|
|2|最高价|0.80000000|
|3|最低价|0.01575800|
|4|收盘价|0.01577100|
|5|成交量|148976.11427815|
|6|K线收盘时间|1499644799999.0|
|7|成交额|2434.19055334|
|8|成交笔数|308.0|
|9|主动买入成交量|1756.87402397|
|10|主动买入成交额|28.46694368|
|11|<官方解释为可忽略的参数>|17928899.62484339|

官方返回的字段类型包含整数和字符串,但对于历史K线数据,binance_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'在美式日期与中国日期对应的时间戳并不相同,Binance_candle默认采用'America/New_York'时区。

![](vx_images/495193492836002.png)

### 4.3 K线的安全性

Binance_candle中的全部K线数据均会受到严格的验证,保证数据的安全性。

- valid_interval 验证数据时间间隔 = <bar>
- valid_start 验证数据时间起点 
- valid_end 验证数据时间终点
- valid_length 验证数据长度 (仅在维护实时历史K线数据服务的时候使用)

## 5 产品类别instType代号

在实例化CandlerServer时,需要可以传递两个参数,一个是instType产品类别,另一个是rule服务规则。

|产品类别|代号|
|:---|:---|
|现货交易|SPOT|
|U本位合约|UM|
|币本位合约|CM|
|欧式期权|EO **注:Binance_candle不支持欧式期权**|

## 6 K线服务规则CandleRule

### 6.1 规则属性总览

CandleRule是CandleServer的运行规则,用户可以自定义规则内容以适应不同的交易场景。

```python
from binance_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中各个属性的作用规则。

![](vx_images/480313210278479.png)

### 6.2 服务权重系数

#### 6.2.1 SERVER_WEIGHT 服务权重系数

类型:Union[int,float],默认值:0.9

Binance官方会计算每个IP每分钟发送的请求权重,超过权重上限将会被短暂封禁。各个产品间的权重计量彼此独立。

权重上限:

- 现货:1200 weight / minute
- U本位合约:2400 weight / minute
- 币本位合约:2400 weight / minute

SERVER_WEIGHT 默认值0.9,会将请求的权重维持在每分钟请求上限 * 0.9左右。调整SERVER_WEIGHT可以控制下载与更新历史K线的速度,如果这台计算机不进行实盘交易,建议使用默认值0.9,如果同一台计算机既要维护实时K线,又要发送下单请求,建议降低SERVER_WEIGHT,避免订单请求被ban。

### 6.3 产品名称条件

#### 6.3.1 SYMBOLS 产品名称

类型:Union[str,list],默认值:'all'

|例子|解释|
|:---|:---|
|SYMBOLS = 'all'|维护产品类型中的全部子产品|
|SYMBOLS = ['BTCUSDT','ETCUSDT']|仅维护BTCUSDT与ETCUSDT|

#### 6.3.2 SYMBOLS_FILTER 过滤产品

类型:list,默认值:''

|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOLS_FILTER = ['BTCUSDT']|维护除了BTCUSDT之外全部的产品|

#### 6.3.3 SYMBOL_CONTAINS 产品名称中需包含的内容

类型:str,默认值:''

过滤名称中不包含此内容的产品(区分大小写)。


|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOL_CONTAINS = 'BTC'|维护名称中包含'BTC'的全部产品|

#### 6.3.4 SYMBOL_ENDSWITH 产品名称必须以何结尾

类型:str,默认值:''

过滤名称中不以此内容结尾的产品(区分大小写)。


|例如|解释|
|:---|:---|
|SYMBOLS = 'all' ; SYMBOL_ENDSWITH = 'USDT'|维护名称以USDT结尾的全部产品|

如果你仅要维护以USDT为交易货币的产品,可以设置:

- SYMBOLS = 'all'
- SYMBOLS_ENDSWITH = 'USDT'

### 6.4 K线参数

#### 6.4.1 BAR 时间粒度

类型:str,默认值:candlelite.crypto.binance_lite.BINANCE_DEFAULT_BAR

历史K线的时间粒度,目前仅支持以分m、小时h、天d为单位。

|例子|解释|
|:---|:---|
|1m|1分钟|
|5m|5分钟|
|15m|15分钟|
|1h|1小时|
|4h|4小时|
|1d|1天|
|..|...|

因为Binance_candle对于K线数据的读取使用的是candlelite,许多默认值使用的是candlelite中settings的配置内容。

```python
# 查看默认配置信息
candlelite show_settings 
# 在终端中修改默认配置
candlelite console_settings
# 查看配置文件的路径->用编辑器自行编辑修改
candlelite settings_path
```

### 6.5 K线下载相关

#### 6.5.1 TIMEZONE 时区

类型:Union[str,None],默认值:candlelite.crypto.binace_lite.BINANCE_TIMEZONE

TIMEZONE所起的作用:

- 数据存储路径中的文件夹命名
- 划分一天的起始与终止时间戳

#### 6.5.2 CANDLE_DIR 日期为分割存储的数据路径

类型:str,默认值:candlelite.crypto.binace_lite.BINANCE_CANDLE_DATE_BASE_DIR

#### 6.5.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.6 秘钥

#### 6.6.1 KEY与SECRET

类型:str,默认值:''

Binance获取行情数据,一般可以不填写秘钥,但无秘钥或者普通秘钥官方会限制访问IP权重,默认现货:1200、合约:2400。

### 6.7 run_candle_map实时K线相关配置

#### 6.7.1 LOCAL_CANDLE_DAYS 启动后下载近期多少日的历史K线数据

类型:Union[int,None],默认值:2(单位:天)

在启动实时K线服务后,CandleServer将校验本地是否有最近的LOCAL_CANDLE_DAYS产品K线数据,如果没有,则会自动下载

LOCAL_CANDLE_DAYS = None 表示禁用此功能

#### 6.7.2 LENGTH 保留实时K线的长度

类型:int,默认值:2880

保留candle_map字典中各个产品的最新K线数据的行数。

如果某产品刚刚上线,数据长度小于LENGTH,则会被过滤。

#### 6.7.3 UPDATE_INTERVAL_SECONDS 实时K线的更新间隔

类型:int,默认值:3(单位:秒)

将candle_map中的历史K线数据更新到最新时间,每次更新的时间间隔。

#### 6.7.4 CACHE_DELAY_SECONDS 实时K线本地缓存的时间间隔

类型:Union[int,None],默认值:3600(单位:秒)

间隔多少秒,将candle_map保存到本地,这样可以在服务重启后,快速读取缓存数据,减少访问量与等待时间。

CACHE_DELAY_SECONDS = None 表示禁用此功能

#### 6.7.5 CACHE_DIR 缓存数据路径

类型:str,默认值:'./BINANCE_CACHE'

candle_map缓存保存到的文件路径。

### 6.8 日志

#### 6.8.1 LOG_DIRPATH 日志文件夹路径

类型:str,默认值:./BINANCE_CANDLE_SERVER_LOG_DATA'

binance_candle中的日志文件按照本地日期与级别分割存储在文件夹中。

#### 6.8.2 LOG_FILE_LEVEL 日志文件级别

类型:str,默认值:'INFO'

储存在日志文件中的级别。

#### 6.8.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方法执行流程简图:

![](vx_images/176016628950838.png)

### 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线最大时间与当前时间的差值,如果差值过大,视为不安全,返回空数组,如果满足在预设时间差值以内,则正常返回。


以U本位产品为例,实时更新全部产品的历史K线数据

```python
from binance_candle import CandleServer
import time

candleServer = CandleServer('UM')
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为日期形式的字符串,Binance_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|

例子:

下载现货BTCUSDT与ETCUSDT,从美国时间2023-01-01~2023-01-10,时间粒度为1m的K线数据。

```python
from binance_candle import CandleServer, CandleRule

CandleRule.BAR = '1m'
CandleRule.SYMBOLS = ['BTCUSDT', 'ETCUSDT']
CandleRule.TIMEZONE = 'America/New_York'

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 binance_candle import CandleServer

candleServer = CandleServer('SPOT')
candleServer.download_daily()
```

### 8.3 close_download_daily 关闭每日K线下载服务

为了保证异步的安全性,关闭方法会等待异步程序阶段性运行结束后关闭,例如避免在保存本地数据的时候发生了终止,造成数据错误。

## 9 行情数据

### 9.1 行情数据的规则

行情数据支持:现货、U本位合约与币本位合约,**目前不支持欧式期权**。

导入行情数据模块

```python
from binance_candle import Market

market = Market(
    instType='SPOT',  # 产品类型 SPOT | UM | CM
    key='',  # 秘钥
    secret='',  # 秘钥
    timezone='America/New_York'  # 时区
)
```

也可以使用CandleServer中的market模块

```python
from binance_candle import CandleServer

candleServer = CandleServer('SPOT')
market = candleServer.market
```

行情数据的返回格式均为:{'code':\<状态码\>, 'data':\<主体数据\>, 'msg':\<提示信息\>}

状态码为200表示成功。

### 9.2 最优挂单价格

#### 9.2.1 get_bookTickers 全部产品的最优挂单列表

例如获取现货交易全部的最优挂单

```python
from binance_candle.market import Market

bookTickers = Market('SPOT').get_bookTickers()
print(bookTickers)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': [
>>         {
>>             'askPrice': '0.06861100',
>>             'askQty': '28.32510000',
>>             'bidPrice': '0.06861000',
>>             'bidQty': '20.86970000',
>>             'symbol': 'ETHBTC'
>>         },
>>         {
>>             'askPrice': '0.00418600',
>>             'askQty': '11.67400000',
>>             'bidPrice': '0.00418500',
>>             'bidQty': '4.67100000',
>>             'symbol': 'LTCBTC'
>>         },
>>         ... ...
>>     ],
>>     'msg': '',
>> }
```

#### 9.2.2 get_bookTickersMap 全部产品的最优挂单字典

例如获取U本位交易全部的最优挂单

```python
from binance_candle.market import Market

bookTickersMap = Market('UM').get_bookTickersMap()
print(bookTickersMap)
```

输出:

```python
>> {
>>     'code': 200,
>>     'data': {
>>         '1000LUNCBUSD': {
>>             'askPrice': '0.1713000',
>>             'askQty': '71623',
>>             'bidPrice': '0.1712000',
>>             'bidQty': '96247',
>>             'symbol': '1000LUNCBUSD',
>>             'time': 1675216339831
>>         },
>>         '1000LUNCUSDT': {
>>             'askPrice': '0.1713000',
>>             'askQty': '98341',
>>             'bidPrice': '0.1712000',
>>             'bidQty': '71166',
>>             'symbol': '1000LUNCUSDT',
>>             'time': 1675216339829
>>         },
>>         ... ...
>>     },
>>     'msg': ''
>> }
```

#### 9.2.3 get_bookTicker单个产品的最优挂单

获取现货交易BTCUSDT的最优挂单

```python
from binance_candle.market import Market

bookTicker = Market('SPOT').get_bookTicker('BTCUSDT')
print(bookTicker)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data':
>>         {
>>             'symbol': 'BTCUSDT',
>>             'bidPrice': '23122.18000000',
>>             'bidQty': '0.07635000',
>>             'askPrice': '23122.81000000',
>>             'askQty': '0.00200000'
>>         },
>>     'msg': ''
>> }
```

### 9.3 最新成交价

#### 9.3.1 get_tickerPrices 全部产品的最新成交价列表

获取币本位合约全部产品的最新成交价格列表

```python
from binance_candle.market import Market

tickerPrices = Market('CM').get_tickerPrices()
print(tickerPrices)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': [
>>         {
>>             'price': '23312.5',
>>             'ps': 'BTCUSD',
>>             'symbol': 'BTCUSD_230331',
>>             'time': 1675217026295
>>         },
>>         {
>>             'price': '0.80450',
>>             'ps': 'KNCUSD',
>>             'symbol': 'KNCUSD_PERP',
>>             'time': 1675216973427
>>         },
>>         ... ...
>>     ],
>>     'msg': ''
>> }
```

#### 9.3.2 get_tickerPricesMap 全部产品的最新成交价字典

获取币本位合约全部产品的最新成交价格字典

```python
from binance_candle.market import Market

tickerPricesMap = Market('CM').get_tickerPricesMap()
print(tickerPricesMap)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': {
>>         'AAVEUSD_PERP': {
>>             'price': '83.080',
>>             'ps': 'AAVEUSD',
>>             'symbol': 'AAVEUSD_PERP',
>>             'time': 1675217116068
>>         },
>>         'ADAUSD_230331': {
>>             'price': '0.38853',
>>             'ps': 'ADAUSD',
>>             'symbol': 'ADAUSD_230331',
>>             'time': 1675217149962
>>         },
>>         ... ...
>>     },
>>     'msg': ''
>> }
```

#### 9.3.3 get_tickerPrice 单个产品的最新成交价

获取币本位合约中ETCUSD_PERP的最新成交价格

```python
from binance_candle.market import Market

tickerPrice = Market('CM').get_tickerPrice('ETCUSD_PERP')
print(tickerPrice)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': [
>>         {
>>             'symbol': 'ETCUSD_PERP',
>>             'ps': 'ETCUSD',
>>             'price': '21.589',
>>             'time': 1675217398417
>>         }
>>     ],
>>     'msg': ''
>> }
```



### 9.4 交易规范

#### 9.4.1 缓存机制

获取交易规范的API文档:

- 现货交易:https://binance-docs.github.io/apidocs/spot/cn/#3f1907847c
- U本位合约:https://binance-docs.github.io/apidocs/futures/cn/#0f3f2d5ee7
- 币本位合约:https://binance-docs.github.io/apidocs/delivery/cn/#185368440e

交易规范的返回信息内容较多,现货交易权重为10,合约交易权重为1,因为交易规范本身改动频率较小,在Binance_candle中默认采用缓存的方式获取交易规范结果,以提高速度和节约权重。

第一次获取交易规范信息会向官方发送请求,将请求结果保存在缓存中,随后再次获取交易规范信息会验证上次缓存的数据是否符合过期,过期则重新访问,否则返回缓存数据。

如果不使用缓存,可以将过期时间expire_seconds设置为0(单位:秒)。

#### 9.4.2 get_exchangeInfos 完整的交易规范

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|

每种产品类型之间的交易规则式独立的,例如获取现货交易的交易规则信息。

```python
from binance_candle import Market

exchangeInfos = Market('SPOT').get_exchangeInfos()
print(exchangeInfos)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': {'exchangeFilters': [],
>>              'rateLimits': [{'interval': 'MINUTE',
>>                              'intervalNum': 1,
>>                              'limit': 1200,
>>                              'rateLimitType': 'REQUEST_WEIGHT'},
>>                             {'interval': 'SECOND',
>>                              'intervalNum': 10,
>>                              'limit': 50,
>>                              'rateLimitType': 'ORDERS'},
>>                             {'interval': 'DAY',
>>                              'intervalNum': 1,
>>                              'limit': 160000,
>>                              'rateLimitType': 'ORDERS'},
>>                             {'interval': 'MINUTE',
>>                              'intervalNum': 5,
>>                              'limit': 6100,
>>                              'rateLimitType': 'RAW_REQUESTS'}],
>>              'serverTime': 1675220759508,
>>              'symbols': [
>>                  {'allowTrailingStop': True,
>>                   'allowedSelfTradePreventionModes': ['NONE',
>>                                                       'EXPIRE_TAKER',
>>                                                       'EXPIRE_MAKER',
>>                                                       'EXPIRE_BOTH'],
>>                   'baseAsset': 'ETH',
>>                   'baseAssetPrecision': 8,
>>                   'baseCommissionPrecision': 8,
>>                   'cancelReplaceAllowed': True,
>>                   'defaultSelfTradePreventionMode': 'NONE',
>>                   'filters': [{'filterType': 'PRICE_FILTER',
>>                                'maxPrice': '922327.00000000',
>>                                'minPrice': '0.00000100',
>>                                'tickSize': '0.00000100'},
>>                               {'filterType': 'LOT_SIZE',
>>                                'maxQty': '100000.00000000',
>>                                'minQty': '0.00010000',
>>                                'stepSize': '0.00010000'},
>>                               {'applyToMarket': True,
>>                                'avgPriceMins': 5,
>>                                'filterType': 'MIN_NOTIONAL',
>>                                'minNotional': '0.00010000'},
>>                               {'filterType': 'ICEBERG_PARTS', 'limit': 10},
>>                               {'filterType': 'MARKET_LOT_SIZE',
>>                                'maxQty': '1657.19015357',
>>                                'minQty': '0.00000000',
>>                                'stepSize': '0.00000000'},
>>                               {'filterType': 'TRAILING_DELTA',
>>                                'maxTrailingAboveDelta': 2000,
>>                                'maxTrailingBelowDelta': 2000,
>>                                'minTrailingAboveDelta': 10,
>>                                'minTrailingBelowDelta': 10},
>>                               {'askMultiplierDown': '0.2',
>>                                'askMultiplierUp': '5',
>>                                'avgPriceMins': 5,
>>                                'bidMultiplierDown': '0.2',
>>                                'bidMultiplierUp': '5',
>>                                'filterType': 'PERCENT_PRICE_BY_SIDE'},
>>                               {'filterType': 'MAX_NUM_ORDERS',
>>                                'maxNumOrders': 200},
>>                               {'filterType': 'MAX_NUM_ALGO_ORDERS',
>>                                'maxNumAlgoOrders': 5}],
>>                   'icebergAllowed': True,
>>                   'isMarginTradingAllowed': True,
>>                   'isSpotTradingAllowed': True,
>>                   'ocoAllowed': True,
>>                   'orderTypes': ['LIMIT',
>>                                  'LIMIT_MAKER',
>>                                  'MARKET',
>>                                  'STOP_LOSS_LIMIT',
>>                                  'TAKE_PROFIT_LIMIT'],
>>                   'permissions': ['SPOT',
>>                                   'MARGIN',
>>                                   'TRD_GRP_004',
>>                                   'TRD_GRP_005',
>>                                   'TRD_GRP_006'],
>>                   'quoteAsset': 'BTC',
>>                   'quoteAssetPrecision': 8,
>>                   'quoteCommissionPrecision': 8,
>>                   'quoteOrderQtyMarketAllowed': True,
>>                   'quotePrecision': 8,
>>                   'status': 'TRADING',
>>                   'symbol': 'ETHBTC'},
>>                  ... ...
>>              ],
>>              'timezone': 'UTC'},
>>     'msg': ''
>> }
```

#### 9.4.3 get_exchangeInfo 单个产品的交易规范

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|symbol|str|无|产品名称|
|expire_seconds|int|300|缓存过期时间|

获取U本位合约中BTCUSDT的交易规范


```python
from binance_candle import Market

exchangeInfos = Market('UM').get_exchangeInfo('BTCUSDT')
print(exchangeInfos)
```


```text
>> {
>>     'code': 200,
>>     'data': {
>>         'baseAsset': 'BTC',
>>         'baseAssetPrecision': 8,
>>         'contractType': 'PERPETUAL',
>>         'deliveryDate': 4133404800000,
>>         'filter': {'LOT_SIZE': {'filterType': 'LOT_SIZE',
>>                                 'maxQty': '1000',
>>                                 'minQty': '0.001',
>>                                 'stepSize': '0.001'},
>>                    'MARKET_LOT_SIZE': {'filterType': 'MARKET_LOT_SIZE',
>>                                        'maxQty': '120',
>>                                        'minQty': '0.001',
>>                                        'stepSize': '0.001'},
>>                    'MAX_NUM_ALGO_ORDERS': {'filterType': 'MAX_NUM_ALGO_ORDERS',
>>                                            'limit': 10},
>>                    'MAX_NUM_ORDERS': {'filterType': 'MAX_NUM_ORDERS',
>>                                       'limit': 200},
>>                    'MIN_NOTIONAL': {'filterType': 'MIN_NOTIONAL',
>>                                     'notional': '5'},
>>                    'PERCENT_PRICE': {'filterType': 'PERCENT_PRICE',
>>                                      'multiplierDecimal': '4',
>>                                      'multiplierDown': '0.9500',
>>                                      'multiplierUp': '1.0500'},
>>                    'PRICE_FILTER': {'filterType': 'PRICE_FILTER',
>>                                     'maxPrice': '4529764',
>>                                     'minPrice': '556.80',
>>                                     'tickSize': '0.10'}},
>>         'filters': [{'filterType': 'PRICE_FILTER',
>>                      'maxPrice': '4529764',
>>                      'minPrice': '556.80',
>>                      'tickSize': '0.10'},
>>                     {'filterType': 'LOT_SIZE',
>>                      'maxQty': '1000',
>>                      'minQty': '0.001',
>>                      'stepSize': '0.001'},
>>                     {'filterType': 'MARKET_LOT_SIZE',
>>                      'maxQty': '120',
>>                      'minQty': '0.001',
>>                      'stepSize': '0.001'},
>>                     {'filterType': 'MAX_NUM_ORDERS', 'limit': 200},
>>                     {'filterType': 'MAX_NUM_ALGO_ORDERS', 'limit': 10},
>>                     {'filterType': 'MIN_NOTIONAL', 'notional': '5'},
>>                     {'filterType': 'PERCENT_PRICE',
>>                      'multiplierDecimal': '4',
>>                      'multiplierDown': '0.9500',
>>                      'multiplierUp': '1.0500'}],
>>         'liquidationFee': '0.012500',
>>         'maintMarginPercent': '2.5000',
>>         'marginAsset': 'USDT',
>>         'marketTakeBound': '0.05',
>>         'onboardDate': 1569398400000,
>>         'orderTypes': ['LIMIT',
>>                        'MARKET',
>>                        'STOP',
>>                        'STOP_MARKET',
>>                        'TAKE_PROFIT',
>>                        'TAKE_PROFIT_MARKET',
>>                        'TRAILING_STOP_MARKET'],
>>         'pair': 'BTCUSDT',
>>         'pricePrecision': 2,
>>         'quantityPrecision': 3,
>>         'quoteAsset': 'USDT',
>>         'quotePrecision': 8,
>>         'requiredMarginPercent': '5.0000',
>>         'settlePlan': 0,
>>         'status': 'TRADING',
>>         'symbol': 'BTCUSDT',
>>         'timeInForce': ['GTC', 'IOC', 'FOK', 'GTX'],
>>         'triggerProtect': '0.0500',
>>         'underlyingSubType': ['PoW'],
>>         'underlyingType': 'COIN'},
>>     'msg': ''
>> }
```

注:其中的filter字典属性是binance_candle对filters列表的整合,并不属于官方返回的结果。

#### 9.4.4 get_symbols_trading_on 获取可以交易的产品名称

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|

获取U本位合约正在交易的产品名称列表

```python
from binance_candle import Market

symbols_trading_on = Market('UM').get_symbols_trading_on()
print(symbols_trading_on)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': [
>>         'BTCUSDT', 'ETHUSDT', 'BCHUSDT', 'XRPUSDT', 'EOSUSDT', 'LTCUSDT', 'TRXUSDT', 'ETCUSDT', 'LINKUSDT', 'XLMUSDT',
>>         'ADAUSDT', 'XMRUSDT', 'DASHUSDT', 'ZECUSDT', 'XTZUSDT', 'BNBUSDT', 'ATOMUSDT', 'ONTUSDT', 'IOTAUSDT', 'BATUSDT',
>>         'VETUSDT', 'NEOUSDT', 'QTUMUSDT', 'IOSTUSDT', 'THETAUSDT', 'ALGOUSDT', 'ZILUSDT', 'KNCUSDT', 'ZRXUSDT',
>>         'COMPUSDT', 'OMGUSDT', 'DOGEUSDT', 'SXPUSDT', 'KAVAUSDT', 'BANDUSDT', 'RLCUSDT', 'WAVESUSDT', 'MKRUSDT',
>>         'SNXUSDT', 'DOTUSDT', 'DEFIUSDT', 'YFIUSDT', 'BALUSDT', 'CRVUSDT', 'TRBUSDT', 'RUNEUSDT', 'SUSHIUSDT',
>>         'EGLDUSDT', 'SOLUSDT', 'ICXUSDT', 'STORJUSDT', 'BLZUSDT', 'UNIUSDT', 'AVAXUSDT', 'FTMUSDT', 'HNTUSDT',
>>         'ENJUSDT', 'FLMUSDT', 'TOMOUSDT', 'RENUSDT', 'KSMUSDT', 'NEARUSDT', 'AAVEUSDT', 'FILUSDT', 'RSRUSDT', 'LRCUSDT',
>>         'MATICUSDT', 'OCEANUSDT', 'BELUSDT', 'CTKUSDT', 'AXSUSDT', 'ALPHAUSDT', 'ZENUSDT', 'SKLUSDT', 'GRTUSDT',
>>         '1INCHUSDT', 'BTCBUSD', 'CHZUSDT', 'SANDUSDT', 'ANKRUSDT', 'LITUSDT', 'UNFIUSDT', 'REEFUSDT', 'RVNUSDT',
>>         'SFPUSDT', 'XEMUSDT', 'COTIUSDT', 'CHRUSDT', 'MANAUSDT', 'ALICEUSDT', 'HBARUSDT', 'ONEUSDT', 'LINAUSDT',
>>         'STMXUSDT', 'DENTUSDT', 'CELRUSDT', 'HOTUSDT', 'MTLUSDT', 'OGNUSDT', 'NKNUSDT', 'DGBUSDT', '1000SHIBUSDT',
>>         'BAKEUSDT', 'GTCUSDT', 'ETHBUSD', 'BTCDOMUSDT', 'BNBBUSD', 'ADABUSD', 'XRPBUSD', 'IOTXUSDT', 'DOGEBUSD',
>>         'AUDIOUSDT', 'C98USDT', 'MASKUSDT', 'ATAUSDT', 'SOLBUSD', 'DYDXUSDT', '1000XECUSDT', 'GALAUSDT', 'CELOUSDT',
>>         'ARUSDT', 'KLAYUSDT', 'ARPAUSDT', 'CTSIUSDT', 'LPTUSDT', 'ENSUSDT', 'PEOPLEUSDT', 'ANTUSDT', 'ROSEUSDT',
>>         'DUSKUSDT', 'FLOWUSDT', 'IMXUSDT', 'API3USDT', 'GMTUSDT', 'APEUSDT', 'BNXUSDT', 'WOOUSDT', 'JASMYUSDT',
>>         'DARUSDT', 'GALUSDT', 'AVAXBUSD', 'NEARBUSD', 'GMTBUSD', 'APEBUSD', 'GALBUSD', 'FTMBUSD', 'DODOBUSD',
>>         'GALABUSD', 'TRXBUSD', '1000LUNCBUSD', 'LUNA2BUSD', 'OPUSDT', 'DOTBUSD', 'TLMBUSD', 'ICPBUSD', 'WAVESBUSD',
>>         'LINKBUSD', 'SANDBUSD', 'LTCBUSD', 'MATICBUSD', 'CVXBUSD', 'FILBUSD', '1000SHIBBUSD', 'LEVERBUSD', 'ETCBUSD',
>>         'LDOBUSD', 'UNIBUSD', 'INJUSDT', 'STGUSDT', 'FOOTBALLUSDT', 'SPELLUSDT', '1000LUNCUSDT', 'LUNA2USDT', 'AMBBUSD',
>>         'PHBBUSD', 'LDOUSDT', 'CVXUSDT', 'ICPUSDT', 'APTUSDT', 'QNTUSDT', 'APTBUSD', 'BLUEBIRDUSDT', 'ETHUSDT_230331',
>>         'BTCUSDT_230331', 'FETUSDT', 'AGIXBUSD', 'FXSUSDT', 'HOOKUSDT', 'MAGICUSDT'
>>     ],
>>     'msg': ''
>> }
```

#### 9.4.5 get_symbols_trading_off 获取不可交易的产品名称

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|expire_seconds|int|300|缓存过期时间|

获取U本位合约不可交易的产品名称列表

```python
from binance_candle import Market

symbols_trading_off = Market('UM').get_symbols_trading_off()
print(symbols_trading_off)
```

输出:

```text
>> {
>>     'code': 200,
>>     'data': [
>>         'SRMUSDT', 'CVCUSDT', 'BTSUSDT', 'BTCSTUSDT', 'SCUSDT', 'TLMUSDT', 'RAYUSDT', 'FTTBUSD', 'FTTUSDT',
>>         'ANCBUSD', 'AUCTIONBUSD'
>>     ],
>>     'msg': ''
>> }
```


### 9.5 深度信息

#### 9.5.1 get_get_depth 获取单个产品的深度信息

```python
from binance_candle import Market
from pprint import pprint

if __name__ == '__main__':
    # 币币交易:SPOT;U本位合约:UM;币本位合约:CM
    instType = 'UM'
    # 实例化行情Market
    market = Market(instType)
    # 单个产品的深度信息 limit : 数量
    pprint(market.get_depth('BTCUSDT', limit=10))
```

输出:

```text
>> {'code': 200,
>>  'data': {'E': 1675823293991,
>>           'T': 1675823293984,
>>           'asks': [['23290.50', '15.695'],
>>                    ['23290.80', '0.003'],
>>                    ['23290.90', '0.001'],
>>                    ['23291.00', '0.084'],
>>                    ['23291.10', '0.006'],
>>                    ['23291.20', '0.034'],
>>                    ['23291.30', '0.017'],
>>                    ['23291.40', '0.258'],
>>                    ['23291.50', '0.010'],
>>                    ['23291.70', '0.821']],
>>           'bids': [['23290.40', '18.252'],
>>                    ['23290.30', '2.230'],
>>                    ['23290.20', '1.156'],
>>                    ['23290.10', '0.130'],
>>                    ['23290.00', '2.182'],
>>                    ['23289.90', '0.010'],
>>                    ['23289.80', '0.172'],
>>                    ['23289.70', '0.151'],
>>                    ['23289.60', '0.044'],
>>                    ['23289.50', '0.002']],
>>           'lastUpdateId': 2476916281979},
>>  'msg': ''}
```

## 10 历史K线管理

### 10.1 BinanceLite 简介


BinanceLite基于candlelite的IO为底层,用于维护本地Binance历史K线数据,由于BinanceLite采用日期分割的CSV文件存储,不需要安装第三方数据库。并且由于默认系统路径的配置可以使不同路径的项目共享历史K线数据。

```python
from binance_candle import BinanceLite

binanceLite = BinanceLite()
candle = binanceLite.load_candle_by_date(
    instType='SPOT',
    symbol='BTCUSDT',
    start='2023-01-01',
    end='2023-01-10',
)
```

对于任何历史K线数据的读取,都需要时区timezone、时间粒度bar、数据位置base_dir,如果在调用函数的时候不指定这三个内容,将使用candlelite的默认配置。

你可以在candlelite中查看Binance默认的配置内容。

```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、U本位:UM、币本位:CM)|
|symbol|str|无|产品名称|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Binance的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Binance的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Binance的默认时间粒度|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|


读取U本位合约中BTCUSDT从2023-01-01 ~ 2023-01-10 的历史K线数据

```python
from binance_candle import BinanceLite

binanceLite = BinanceLite()
candle = binanceLite.load_candle_by_date(
    instType='UM',
    symbol='BTCUSDT',
    start='2023-01-01',
    end='2023-01-10',
)
print(candle)
```

#### 10.2.1 load_candle_map_by_date

 load_candle_map_by_date 以日期为单位读取全部产品历史K线数据字典

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|instType|str|无|产品类别(现货:SPOT、U本位:UM、币本位:CM)|
|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中Binance的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Binance的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Binance的默认时间粒度|
|contains|str|''|产品名称中需包含的内容,不满足则过滤读取|
|endswith|str|''|产品名称中需以何结尾,不满足则过滤读取|
|p_num|int|4|使用多进程加速读取,进程个数|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|



读取U本位合约从2023-01-01 ~ 2023-01-10 的历史K线数据字典

```python
from binance_candle import BinanceLite

binanceLite = BinanceLite()
candle_map = binanceLite.load_candle_map_by_date(
    instType='UM',
    symbols=[],
    start='2023-01-01',
    end='2023-01-10',
)
print(candle_map)
```

### 10.3 保存数据

#### 10.3.1 save_candle_by_date

save_candle_by_date 以日期为单位保存单个产品历史K线数据

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|candle|np.ndarray|无|历史K线数据|
|instType|str|无|产品类别(现货:SPOT、U本位:UM、币本位:CM)|
|symbol|str|无|产品名称|
|start|Union[int,float,str,datetime.date]|无|起始日期|
|end|Union[int,float,str,datetime.date]|无|终止日期|
|base_dir|Union[str,None]|None|数据根目录,None使用candlelite中Binance的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Binance的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Binance的默认时间粒度|
|replace|bool|False|是否替换本地数据|
|drop_duplicate|bool|True|是否去重|
|sort|bool|True|是否按照时间戳排序|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|

读取U本位合约中BTCUSDT从2023-01-01~ 2023-01-10 的历史K线数据,截取2023-01-05 ~ 2023-01-06 日期范围数据保存到指定文件夹中。

```python
from binance_candle import BinanceLite

binanceLite = BinanceLite()
candle = binanceLite.load_candle_by_date(
    instType='UM',
    symbol='BTCUSDT',
    start='2023-01-01',
    end='2023-01-10',
)

binanceLite.save_candle_by_date(
    candle=candle,
    instType='UM',
    symbol='BTCUSDT',
    start='2023-01-05',
    end='2023-01-06',
    base_dir='./target_dir'
)
```


#### 10.3.2 save_candle_map_by_date

save_candle_by_date 以日期为单位保存产品历史K线数据字典

|参数|类型|默认值|说明|
|:---|:---|:---|:---|
|candle_map|dict|无|历史K线数据字典|
|instType|str|无|产品类别(现货:SPOT、U本位:UM、币本位:CM)|
|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中Binance的默认根目录|
|timezone|Union[str,None]|None|时区,None使用candlelite中Binance的默认时区|
|bar|Union[str,None]|None|时间粒度,None使用candlelite中Binance的默认时间粒度|
|replace|bool|False|是否替换本地数据|
|drop_duplicate|bool|True|是否去重|
|sort|bool|True|是否按照时间戳排序|
|valid_interval|bool|True|是否验证数据的时间间隔|
|valid_start|bool|True|是否验证数据的时间起点|
|valid_end|bool|True|是否验证数据的时间终点|

读取U本位合约从2023-01-01 ~ 2023-01-10 的历史K线数据字典,截取2023-01-05 ~ 2023-01-06 日期范围数据保存到指定文件夹中。

```python
from binance_candle import BinanceLite

binanceLite = BinanceLite()
candle_map = binanceLite.load_candle_map_by_date(
    instType='UM',
    symbols=[],
    start='2023-01-01',
    end='2023-01-10',
)

binanceLite.save_candle_map_by_date(
    candle_map=candle_map,
    instType='UM',
    symbols=[],
    start='2023-01-05',
    end='2023-01-06',
    base_dir='./target_dir'
)
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pyted/binance_candle",
    "name": "binance-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/0d/77/7b52866ccbcfedac507411e56946b769d450da8512dc6cb356dc50bc2e00/binance_candle-1.0.10.tar.gz",
    "platform": null,
    "description": "\n# Binance_candle v1.0.10\n\n## 1 Binance_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\u6301\u73b0\u8d27\u3001U\u672c\u4f4d\u5408\u7ea6\u3001\u5e01\u672c\u4f4d\u5408\u7ea6\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\u4e0e\u5408\u7ea6\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## 2 \u5b89\u88c5Binance_candle\n\n\n```cmd\npip3 install binance_candle\n```\n\nGITHUB\uff1ahttps://github.com/pyted/binance_candle\n\n\u91cc\u9762\u6709Binance_candle\u7684\u4f7f\u7528\u4f8b\u5b50\uff1a\n\n![](vx_images/244075001625094.png)\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\u4ee5U\u672c\u4f4d\u4ea7\u54c1\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 binance_candle import CandleServer\n\ncandleServer = CandleServer('UM') # UM\uff1aU\u672c\u4f4d\u5408\u7ea6\ncandleServer.run_candle_map()\nprint(candleServer.candle_map)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     '1000LUNCBUSD': array(\n>>         [[1.67496882e+12, 1.74100000e-01, 1.74100000e-01, ...,\n>>           7.31000000e+03, 1.27199670e+03, 0.00000000e+00],\n>>          [1.67496888e+12, 1.74000000e-01, 1.74200000e-01, ...,\n>>           1.90710000e+04, 3.31999150e+03, 0.00000000e+00],\n>>          [1.67496894e+12, 1.74200000e-01, 1.74200000e-01, ...,\n>>           3.23500000e+03, 5.63537000e+02, 0.00000000e+00],\n>>          ...,\n>>          [1.67514144e+12, 1.66000000e-01, 1.66000000e-01, ...,\n>>           1.00560000e+04, 1.66929600e+03, 0.00000000e+00],\n>>          [1.67514150e+12, 1.65800000e-01, 1.65800000e-01, ...,\n>>           3.56710000e+04, 5.91068840e+03, 0.00000000e+00],\n>>          [1.67514156e+12, 1.65700000e-01, 1.65800000e-01, ...,\n>>           7.88270000e+04, 1.30688056e+04, 0.00000000e+00]]\n>>     ),\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 binance_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\u6700\u4f18\u6302\u5355\u4ef7\u683c\n\n\u4ee5\u5e01\u672c\u4f4d\u5408\u7ea6\u4e3a\u4f8b\uff0c\u83b7\u53d6\u5b9e\u65f6\u6700\u4f18\u6302\u5355\u4ef7\u683c\n\n```python\nfrom binance_candle import CandleServer\n\ncandleServer = CandleServer('CM') # CM\uff1a\u5e01\u672c\u4f4d\u5408\u7ea6\nbookTickerMap = candleServer.market.get_bookTickersMap()\nprint(bookTickerMap)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>      'code': 200,\n>>      'data': {'AAVEUSD_PERP': {'askPrice': '81.300',\n>>                                'askQty': '92',\n>>                                'bidPrice': '81.260',\n>>                                'bidQty': '42',\n>>                                'pair': 'AAVEUSD',\n>>                                'symbol': 'AAVEUSD_PERP',\n>>                                'time': 1675143719137},\n>>               'ADAUSD_230331': {'askPrice': '0.37198',\n>>                                 'askQty': '100',\n>>                                 'bidPrice': '0.37170',\n>>                                 'bidQty': '30',\n>>                                 'pair': 'ADAUSD',\n>>                                 'symbol': 'ADAUSD_230331',\n>>                                 'time': 1675143718074},\n>>               ... ...\n>>               }\n>>      'msg': ''\n>> }\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|\u5b57\u6bb5\u89e3\u91ca|\u4f8b\u5b50|\n|:---|:---|:---|\n|0|K\u7ebf\u5f00\u76d8\u65f6\u95f4|1499040000000.0|\n|1|\u5f00\u76d8\u4ef7|0.01634790|\n|2|\u6700\u9ad8\u4ef7|0.80000000|\n|3|\u6700\u4f4e\u4ef7|0.01575800|\n|4|\u6536\u76d8\u4ef7|0.01577100|\n|5|\u6210\u4ea4\u91cf|148976.11427815|\n|6|K\u7ebf\u6536\u76d8\u65f6\u95f4|1499644799999.0|\n|7|\u6210\u4ea4\u989d|2434.19055334|\n|8|\u6210\u4ea4\u7b14\u6570|308.0|\n|9|\u4e3b\u52a8\u4e70\u5165\u6210\u4ea4\u91cf|1756.87402397|\n|10|\u4e3b\u52a8\u4e70\u5165\u6210\u4ea4\u989d|28.46694368|\n|11|<\u5b98\u65b9\u89e3\u91ca\u4e3a\u53ef\u5ffd\u7565\u7684\u53c2\u6570>|17928899.62484339|\n\n\u5b98\u65b9\u8fd4\u56de\u7684\u5b57\u6bb5\u7c7b\u578b\u5305\u542b\u6574\u6570\u548c\u5b57\u7b26\u4e32\uff0c\u4f46\u5bf9\u4e8e\u5386\u53f2K\u7ebf\u6570\u636e\uff0cbinance_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\uff0cBinance_candle\u9ed8\u8ba4\u91c7\u7528'America/New_York'\u65f6\u533a\u3002\n\n![](vx_images/495193492836002.png)\n\n### 4.3 K\u7ebf\u7684\u5b89\u5168\u6027\n\nBinance_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|U\u672c\u4f4d\u5408\u7ea6|UM|\n|\u5e01\u672c\u4f4d\u5408\u7ea6|CM|\n|\u6b27\u5f0f\u671f\u6743|EO **\u6ce8\uff1aBinance_candle\u4e0d\u652f\u6301\u6b27\u5f0f\u671f\u6743**|\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 binance_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![](vx_images/480313210278479.png)\n\n### 6.2 \u670d\u52a1\u6743\u91cd\u7cfb\u6570\n\n#### 6.2.1 SERVER_WEIGHT \u670d\u52a1\u6743\u91cd\u7cfb\u6570\n\n\u7c7b\u578b\uff1aUnion[int,float]\uff0c\u9ed8\u8ba4\u503c\uff1a0.9\n\nBinance\u5b98\u65b9\u4f1a\u8ba1\u7b97\u6bcf\u4e2aIP\u6bcf\u5206\u949f\u53d1\u9001\u7684\u8bf7\u6c42\u6743\u91cd\uff0c\u8d85\u8fc7\u6743\u91cd\u4e0a\u9650\u5c06\u4f1a\u88ab\u77ed\u6682\u5c01\u7981\u3002\u5404\u4e2a\u4ea7\u54c1\u95f4\u7684\u6743\u91cd\u8ba1\u91cf\u5f7c\u6b64\u72ec\u7acb\u3002\n\n\u6743\u91cd\u4e0a\u9650\uff1a\n\n- \u73b0\u8d27\uff1a1200 weight / minute\n- U\u672c\u4f4d\u5408\u7ea6\uff1a2400 weight / minute\n- \u5e01\u672c\u4f4d\u5408\u7ea6\uff1a2400 weight / minute\n\nSERVER_WEIGHT \u9ed8\u8ba4\u503c0.9\uff0c\u4f1a\u5c06\u8bf7\u6c42\u7684\u6743\u91cd\u7ef4\u6301\u5728\u6bcf\u5206\u949f\u8bf7\u6c42\u4e0a\u9650 * 0.9\u5de6\u53f3\u3002\u8c03\u6574SERVER_WEIGHT\u53ef\u4ee5\u63a7\u5236\u4e0b\u8f7d\u4e0e\u66f4\u65b0\u5386\u53f2K\u7ebf\u7684\u901f\u5ea6\uff0c\u5982\u679c\u8fd9\u53f0\u8ba1\u7b97\u673a\u4e0d\u8fdb\u884c\u5b9e\u76d8\u4ea4\u6613\uff0c\u5efa\u8bae\u4f7f\u7528\u9ed8\u8ba4\u503c0.9\uff0c\u5982\u679c\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\u65e2\u8981\u7ef4\u62a4\u5b9e\u65f6K\u7ebf\uff0c\u53c8\u8981\u53d1\u9001\u4e0b\u5355\u8bf7\u6c42\uff0c\u5efa\u8bae\u964d\u4f4eSERVER_WEIGHT\uff0c\u907f\u514d\u8ba2\u5355\u8bf7\u6c42\u88abban\u3002\n\n### 6.3 \u4ea7\u54c1\u540d\u79f0\u6761\u4ef6\n\n#### 6.3.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 = ['BTCUSDT','ETCUSDT']|\u4ec5\u7ef4\u62a4BTCUSDT\u4e0eETCUSDT|\n\n#### 6.3.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 = ['BTCUSDT']|\u7ef4\u62a4\u9664\u4e86BTCUSDT\u4e4b\u5916\u5168\u90e8\u7684\u4ea7\u54c1|\n\n#### 6.3.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.3.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.4 K\u7ebf\u53c2\u6570\n\n#### 6.4.1 BAR \u65f6\u95f4\u7c92\u5ea6\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1acandlelite.crypto.binance_lite.BINANCE_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\u4e3aBinance_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.5 K\u7ebf\u4e0b\u8f7d\u76f8\u5173\n\n#### 6.5.1 TIMEZONE \u65f6\u533a\n\n\u7c7b\u578b\uff1aUnion[str,None]\uff0c\u9ed8\u8ba4\u503c\uff1acandlelite.crypto.binace_lite.BINANCE_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.5.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.binace_lite.BINANCE_CANDLE_DATE_BASE_DIR\n\n#### 6.5.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.6 \u79d8\u94a5\n\n#### 6.6.1 KEY\u4e0eSECRET\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a''\n\nBinance\u83b7\u53d6\u884c\u60c5\u6570\u636e\uff0c\u4e00\u822c\u53ef\u4ee5\u4e0d\u586b\u5199\u79d8\u94a5\uff0c\u4f46\u65e0\u79d8\u94a5\u6216\u8005\u666e\u901a\u79d8\u94a5\u5b98\u65b9\u4f1a\u9650\u5236\u8bbf\u95eeIP\u6743\u91cd\uff0c\u9ed8\u8ba4\u73b0\u8d27\uff1a1200\u3001\u5408\u7ea6\uff1a2400\u3002\n\n### 6.7 run_candle_map\u5b9e\u65f6K\u7ebf\u76f8\u5173\u914d\u7f6e\n\n#### 6.7.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.7.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.7.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.7.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.7.5 CACHE_DIR \u7f13\u5b58\u6570\u636e\u8def\u5f84\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a'./BINANCE_CACHE'\n\ncandle_map\u7f13\u5b58\u4fdd\u5b58\u5230\u7684\u6587\u4ef6\u8def\u5f84\u3002\n\n### 6.8 \u65e5\u5fd7\n\n#### 6.8.1 LOG_DIRPATH \u65e5\u5fd7\u6587\u4ef6\u5939\u8def\u5f84\n\n\u7c7b\u578b\uff1astr\uff0c\u9ed8\u8ba4\u503c\uff1a./BINANCE_CANDLE_SERVER_LOG_DATA'\n\nbinance_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.8.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.8.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![](vx_images/176016628950838.png)\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\u4ee5U\u672c\u4f4d\u4ea7\u54c1\u4e3a\u4f8b\uff0c\u5b9e\u65f6\u66f4\u65b0\u5168\u90e8\u4ea7\u54c1\u7684\u5386\u53f2K\u7ebf\u6570\u636e\n\n```python\nfrom binance_candle import CandleServer\nimport time\n\ncandleServer = CandleServer('UM')\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\uff0cBinance_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\u8d27BTCUSDT\u4e0eETCUSDT\uff0c\u4ece\u7f8e\u56fd\u65f6\u95f42023-01-01~2023-01-10\uff0c\u65f6\u95f4\u7c92\u5ea6\u4e3a1m\u7684K\u7ebf\u6570\u636e\u3002\n\n```python\nfrom binance_candle import CandleServer, CandleRule\n\nCandleRule.BAR = '1m'\nCandleRule.SYMBOLS = ['BTCUSDT', 'ETCUSDT']\nCandleRule.TIMEZONE = 'America/New_York'\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 binance_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\uff1a\u73b0\u8d27\u3001U\u672c\u4f4d\u5408\u7ea6\u4e0e\u5e01\u672c\u4f4d\u5408\u7ea6\uff0c**\u76ee\u524d\u4e0d\u652f\u6301\u6b27\u5f0f\u671f\u6743**\u3002\n\n\u5bfc\u5165\u884c\u60c5\u6570\u636e\u6a21\u5757\n\n```python\nfrom binance_candle import Market\n\nmarket = Market(\n    instType='SPOT',  # \u4ea7\u54c1\u7c7b\u578b SPOT | UM | CM\n    key='',  # \u79d8\u94a5\n    secret='',  # \u79d8\u94a5\n    timezone='America/New_York'  # \u65f6\u533a\n)\n```\n\n\u4e5f\u53ef\u4ee5\u4f7f\u7528CandleServer\u4e2d\u7684market\u6a21\u5757\n\n```python\nfrom binance_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\u4e3a200\u8868\u793a\u6210\u529f\u3002\n\n### 9.2 \u6700\u4f18\u6302\u5355\u4ef7\u683c\n\n#### 9.2.1 get_bookTickers \u5168\u90e8\u4ea7\u54c1\u7684\u6700\u4f18\u6302\u5355\u5217\u8868\n\n\u4f8b\u5982\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613\u5168\u90e8\u7684\u6700\u4f18\u6302\u5355\n\n```python\nfrom binance_candle.market import Market\n\nbookTickers = Market('SPOT').get_bookTickers()\nprint(bookTickers)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': [\n>>         {\n>>             'askPrice': '0.06861100',\n>>             'askQty': '28.32510000',\n>>             'bidPrice': '0.06861000',\n>>             'bidQty': '20.86970000',\n>>             'symbol': 'ETHBTC'\n>>         },\n>>         {\n>>             'askPrice': '0.00418600',\n>>             'askQty': '11.67400000',\n>>             'bidPrice': '0.00418500',\n>>             'bidQty': '4.67100000',\n>>             'symbol': 'LTCBTC'\n>>         },\n>>         ... ...\n>>     ],\n>>     'msg': '',\n>> }\n```\n\n#### 9.2.2 get_bookTickersMap \u5168\u90e8\u4ea7\u54c1\u7684\u6700\u4f18\u6302\u5355\u5b57\u5178\n\n\u4f8b\u5982\u83b7\u53d6U\u672c\u4f4d\u4ea4\u6613\u5168\u90e8\u7684\u6700\u4f18\u6302\u5355\n\n```python\nfrom binance_candle.market import Market\n\nbookTickersMap = Market('UM').get_bookTickersMap()\nprint(bookTickersMap)\n```\n\n\u8f93\u51fa\uff1a\n\n```python\n>> {\n>>     'code': 200,\n>>     'data': {\n>>         '1000LUNCBUSD': {\n>>             'askPrice': '0.1713000',\n>>             'askQty': '71623',\n>>             'bidPrice': '0.1712000',\n>>             'bidQty': '96247',\n>>             'symbol': '1000LUNCBUSD',\n>>             'time': 1675216339831\n>>         },\n>>         '1000LUNCUSDT': {\n>>             'askPrice': '0.1713000',\n>>             'askQty': '98341',\n>>             'bidPrice': '0.1712000',\n>>             'bidQty': '71166',\n>>             'symbol': '1000LUNCUSDT',\n>>             'time': 1675216339829\n>>         },\n>>         ... ...\n>>     },\n>>     'msg': ''\n>> }\n```\n\n#### 9.2.3 get_bookTicker\u5355\u4e2a\u4ea7\u54c1\u7684\u6700\u4f18\u6302\u5355\n\n\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613BTCUSDT\u7684\u6700\u4f18\u6302\u5355\n\n```python\nfrom binance_candle.market import Market\n\nbookTicker = Market('SPOT').get_bookTicker('BTCUSDT')\nprint(bookTicker)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data':\n>>         {\n>>             'symbol': 'BTCUSDT',\n>>             'bidPrice': '23122.18000000',\n>>             'bidQty': '0.07635000',\n>>             'askPrice': '23122.81000000',\n>>             'askQty': '0.00200000'\n>>         },\n>>     'msg': ''\n>> }\n```\n\n### 9.3 \u6700\u65b0\u6210\u4ea4\u4ef7\n\n#### 9.3.1 get_tickerPrices \u5168\u90e8\u4ea7\u54c1\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\u5217\u8868\n\n\u83b7\u53d6\u5e01\u672c\u4f4d\u5408\u7ea6\u5168\u90e8\u4ea7\u54c1\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\u683c\u5217\u8868\n\n```python\nfrom binance_candle.market import Market\n\ntickerPrices = Market('CM').get_tickerPrices()\nprint(tickerPrices)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': [\n>>         {\n>>             'price': '23312.5',\n>>             'ps': 'BTCUSD',\n>>             'symbol': 'BTCUSD_230331',\n>>             'time': 1675217026295\n>>         },\n>>         {\n>>             'price': '0.80450',\n>>             'ps': 'KNCUSD',\n>>             'symbol': 'KNCUSD_PERP',\n>>             'time': 1675216973427\n>>         },\n>>         ... ...\n>>     ],\n>>     'msg': ''\n>> }\n```\n\n#### 9.3.2 get_tickerPricesMap \u5168\u90e8\u4ea7\u54c1\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\u5b57\u5178\n\n\u83b7\u53d6\u5e01\u672c\u4f4d\u5408\u7ea6\u5168\u90e8\u4ea7\u54c1\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\u683c\u5b57\u5178\n\n```python\nfrom binance_candle.market import Market\n\ntickerPricesMap = Market('CM').get_tickerPricesMap()\nprint(tickerPricesMap)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': {\n>>         'AAVEUSD_PERP': {\n>>             'price': '83.080',\n>>             'ps': 'AAVEUSD',\n>>             'symbol': 'AAVEUSD_PERP',\n>>             'time': 1675217116068\n>>         },\n>>         'ADAUSD_230331': {\n>>             'price': '0.38853',\n>>             'ps': 'ADAUSD',\n>>             'symbol': 'ADAUSD_230331',\n>>             'time': 1675217149962\n>>         },\n>>         ... ...\n>>     },\n>>     'msg': ''\n>> }\n```\n\n#### 9.3.3 get_tickerPrice \u5355\u4e2a\u4ea7\u54c1\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\n\n\u83b7\u53d6\u5e01\u672c\u4f4d\u5408\u7ea6\u4e2dETCUSD_PERP\u7684\u6700\u65b0\u6210\u4ea4\u4ef7\u683c\n\n```python\nfrom binance_candle.market import Market\n\ntickerPrice = Market('CM').get_tickerPrice('ETCUSD_PERP')\nprint(tickerPrice)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': [\n>>         {\n>>             'symbol': 'ETCUSD_PERP',\n>>             'ps': 'ETCUSD',\n>>             'price': '21.589',\n>>             'time': 1675217398417\n>>         }\n>>     ],\n>>     'msg': ''\n>> }\n```\n\n\n\n### 9.4 \u4ea4\u6613\u89c4\u8303\n\n#### 9.4.1 \u7f13\u5b58\u673a\u5236\n\n\u83b7\u53d6\u4ea4\u6613\u89c4\u8303\u7684API\u6587\u6863\uff1a\n\n- \u73b0\u8d27\u4ea4\u6613\uff1ahttps://binance-docs.github.io/apidocs/spot/cn/#3f1907847c\n- U\u672c\u4f4d\u5408\u7ea6\uff1ahttps://binance-docs.github.io/apidocs/futures/cn/#0f3f2d5ee7\n- \u5e01\u672c\u4f4d\u5408\u7ea6\uff1ahttps://binance-docs.github.io/apidocs/delivery/cn/#185368440e\n\n\u4ea4\u6613\u89c4\u8303\u7684\u8fd4\u56de\u4fe1\u606f\u5185\u5bb9\u8f83\u591a\uff0c\u73b0\u8d27\u4ea4\u6613\u6743\u91cd\u4e3a10\uff0c\u5408\u7ea6\u4ea4\u6613\u6743\u91cd\u4e3a1\uff0c\u56e0\u4e3a\u4ea4\u6613\u89c4\u8303\u672c\u8eab\u6539\u52a8\u9891\u7387\u8f83\u5c0f\uff0c\u5728Binance_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\u548c\u8282\u7ea6\u6743\u91cd\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\n\u6bcf\u79cd\u4ea7\u54c1\u7c7b\u578b\u4e4b\u95f4\u7684\u4ea4\u6613\u89c4\u5219\u5f0f\u72ec\u7acb\u7684\uff0c\u4f8b\u5982\u83b7\u53d6\u73b0\u8d27\u4ea4\u6613\u7684\u4ea4\u6613\u89c4\u5219\u4fe1\u606f\u3002\n\n```python\nfrom binance_candle import Market\n\nexchangeInfos = Market('SPOT').get_exchangeInfos()\nprint(exchangeInfos)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': {'exchangeFilters': [],\n>>              'rateLimits': [{'interval': 'MINUTE',\n>>                              'intervalNum': 1,\n>>                              'limit': 1200,\n>>                              'rateLimitType': 'REQUEST_WEIGHT'},\n>>                             {'interval': 'SECOND',\n>>                              'intervalNum': 10,\n>>                              'limit': 50,\n>>                              'rateLimitType': 'ORDERS'},\n>>                             {'interval': 'DAY',\n>>                              'intervalNum': 1,\n>>                              'limit': 160000,\n>>                              'rateLimitType': 'ORDERS'},\n>>                             {'interval': 'MINUTE',\n>>                              'intervalNum': 5,\n>>                              'limit': 6100,\n>>                              'rateLimitType': 'RAW_REQUESTS'}],\n>>              'serverTime': 1675220759508,\n>>              'symbols': [\n>>                  {'allowTrailingStop': True,\n>>                   'allowedSelfTradePreventionModes': ['NONE',\n>>                                                       'EXPIRE_TAKER',\n>>                                                       'EXPIRE_MAKER',\n>>                                                       'EXPIRE_BOTH'],\n>>                   'baseAsset': 'ETH',\n>>                   'baseAssetPrecision': 8,\n>>                   'baseCommissionPrecision': 8,\n>>                   'cancelReplaceAllowed': True,\n>>                   'defaultSelfTradePreventionMode': 'NONE',\n>>                   'filters': [{'filterType': 'PRICE_FILTER',\n>>                                'maxPrice': '922327.00000000',\n>>                                'minPrice': '0.00000100',\n>>                                'tickSize': '0.00000100'},\n>>                               {'filterType': 'LOT_SIZE',\n>>                                'maxQty': '100000.00000000',\n>>                                'minQty': '0.00010000',\n>>                                'stepSize': '0.00010000'},\n>>                               {'applyToMarket': True,\n>>                                'avgPriceMins': 5,\n>>                                'filterType': 'MIN_NOTIONAL',\n>>                                'minNotional': '0.00010000'},\n>>                               {'filterType': 'ICEBERG_PARTS', 'limit': 10},\n>>                               {'filterType': 'MARKET_LOT_SIZE',\n>>                                'maxQty': '1657.19015357',\n>>                                'minQty': '0.00000000',\n>>                                'stepSize': '0.00000000'},\n>>                               {'filterType': 'TRAILING_DELTA',\n>>                                'maxTrailingAboveDelta': 2000,\n>>                                'maxTrailingBelowDelta': 2000,\n>>                                'minTrailingAboveDelta': 10,\n>>                                'minTrailingBelowDelta': 10},\n>>                               {'askMultiplierDown': '0.2',\n>>                                'askMultiplierUp': '5',\n>>                                'avgPriceMins': 5,\n>>                                'bidMultiplierDown': '0.2',\n>>                                'bidMultiplierUp': '5',\n>>                                'filterType': 'PERCENT_PRICE_BY_SIDE'},\n>>                               {'filterType': 'MAX_NUM_ORDERS',\n>>                                'maxNumOrders': 200},\n>>                               {'filterType': 'MAX_NUM_ALGO_ORDERS',\n>>                                'maxNumAlgoOrders': 5}],\n>>                   'icebergAllowed': True,\n>>                   'isMarginTradingAllowed': True,\n>>                   'isSpotTradingAllowed': True,\n>>                   'ocoAllowed': True,\n>>                   'orderTypes': ['LIMIT',\n>>                                  'LIMIT_MAKER',\n>>                                  'MARKET',\n>>                                  'STOP_LOSS_LIMIT',\n>>                                  'TAKE_PROFIT_LIMIT'],\n>>                   'permissions': ['SPOT',\n>>                                   'MARGIN',\n>>                                   'TRD_GRP_004',\n>>                                   'TRD_GRP_005',\n>>                                   'TRD_GRP_006'],\n>>                   'quoteAsset': 'BTC',\n>>                   'quoteAssetPrecision': 8,\n>>                   'quoteCommissionPrecision': 8,\n>>                   'quoteOrderQtyMarketAllowed': True,\n>>                   'quotePrecision': 8,\n>>                   'status': 'TRADING',\n>>                   'symbol': 'ETHBTC'},\n>>                  ... ...\n>>              ],\n>>              'timezone': 'UTC'},\n>>     'msg': ''\n>> }\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\n\u83b7\u53d6U\u672c\u4f4d\u5408\u7ea6\u4e2dBTCUSDT\u7684\u4ea4\u6613\u89c4\u8303\n\n\n```python\nfrom binance_candle import Market\n\nexchangeInfos = Market('UM').get_exchangeInfo('BTCUSDT')\nprint(exchangeInfos)\n```\n\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': {\n>>         'baseAsset': 'BTC',\n>>         'baseAssetPrecision': 8,\n>>         'contractType': 'PERPETUAL',\n>>         'deliveryDate': 4133404800000,\n>>         'filter': {'LOT_SIZE': {'filterType': 'LOT_SIZE',\n>>                                 'maxQty': '1000',\n>>                                 'minQty': '0.001',\n>>                                 'stepSize': '0.001'},\n>>                    'MARKET_LOT_SIZE': {'filterType': 'MARKET_LOT_SIZE',\n>>                                        'maxQty': '120',\n>>                                        'minQty': '0.001',\n>>                                        'stepSize': '0.001'},\n>>                    'MAX_NUM_ALGO_ORDERS': {'filterType': 'MAX_NUM_ALGO_ORDERS',\n>>                                            'limit': 10},\n>>                    'MAX_NUM_ORDERS': {'filterType': 'MAX_NUM_ORDERS',\n>>                                       'limit': 200},\n>>                    'MIN_NOTIONAL': {'filterType': 'MIN_NOTIONAL',\n>>                                     'notional': '5'},\n>>                    'PERCENT_PRICE': {'filterType': 'PERCENT_PRICE',\n>>                                      'multiplierDecimal': '4',\n>>                                      'multiplierDown': '0.9500',\n>>                                      'multiplierUp': '1.0500'},\n>>                    'PRICE_FILTER': {'filterType': 'PRICE_FILTER',\n>>                                     'maxPrice': '4529764',\n>>                                     'minPrice': '556.80',\n>>                                     'tickSize': '0.10'}},\n>>         'filters': [{'filterType': 'PRICE_FILTER',\n>>                      'maxPrice': '4529764',\n>>                      'minPrice': '556.80',\n>>                      'tickSize': '0.10'},\n>>                     {'filterType': 'LOT_SIZE',\n>>                      'maxQty': '1000',\n>>                      'minQty': '0.001',\n>>                      'stepSize': '0.001'},\n>>                     {'filterType': 'MARKET_LOT_SIZE',\n>>                      'maxQty': '120',\n>>                      'minQty': '0.001',\n>>                      'stepSize': '0.001'},\n>>                     {'filterType': 'MAX_NUM_ORDERS', 'limit': 200},\n>>                     {'filterType': 'MAX_NUM_ALGO_ORDERS', 'limit': 10},\n>>                     {'filterType': 'MIN_NOTIONAL', 'notional': '5'},\n>>                     {'filterType': 'PERCENT_PRICE',\n>>                      'multiplierDecimal': '4',\n>>                      'multiplierDown': '0.9500',\n>>                      'multiplierUp': '1.0500'}],\n>>         'liquidationFee': '0.012500',\n>>         'maintMarginPercent': '2.5000',\n>>         'marginAsset': 'USDT',\n>>         'marketTakeBound': '0.05',\n>>         'onboardDate': 1569398400000,\n>>         'orderTypes': ['LIMIT',\n>>                        'MARKET',\n>>                        'STOP',\n>>                        'STOP_MARKET',\n>>                        'TAKE_PROFIT',\n>>                        'TAKE_PROFIT_MARKET',\n>>                        'TRAILING_STOP_MARKET'],\n>>         'pair': 'BTCUSDT',\n>>         'pricePrecision': 2,\n>>         'quantityPrecision': 3,\n>>         'quoteAsset': 'USDT',\n>>         'quotePrecision': 8,\n>>         'requiredMarginPercent': '5.0000',\n>>         'settlePlan': 0,\n>>         'status': 'TRADING',\n>>         'symbol': 'BTCUSDT',\n>>         'timeInForce': ['GTC', 'IOC', 'FOK', 'GTX'],\n>>         'triggerProtect': '0.0500',\n>>         'underlyingSubType': ['PoW'],\n>>         'underlyingType': 'COIN'},\n>>     'msg': ''\n>> }\n```\n\n\u6ce8\uff1a\u5176\u4e2d\u7684filter\u5b57\u5178\u5c5e\u6027\u662fbinance_candle\u5bf9filters\u5217\u8868\u7684\u6574\u5408\uff0c\u5e76\u4e0d\u5c5e\u4e8e\u5b98\u65b9\u8fd4\u56de\u7684\u7ed3\u679c\u3002\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\n\u83b7\u53d6U\u672c\u4f4d\u5408\u7ea6\u6b63\u5728\u4ea4\u6613\u7684\u4ea7\u54c1\u540d\u79f0\u5217\u8868\n\n```python\nfrom binance_candle import Market\n\nsymbols_trading_on = Market('UM').get_symbols_trading_on()\nprint(symbols_trading_on)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': [\n>>         'BTCUSDT', 'ETHUSDT', 'BCHUSDT', 'XRPUSDT', 'EOSUSDT', 'LTCUSDT', 'TRXUSDT', 'ETCUSDT', 'LINKUSDT', 'XLMUSDT',\n>>         'ADAUSDT', 'XMRUSDT', 'DASHUSDT', 'ZECUSDT', 'XTZUSDT', 'BNBUSDT', 'ATOMUSDT', 'ONTUSDT', 'IOTAUSDT', 'BATUSDT',\n>>         'VETUSDT', 'NEOUSDT', 'QTUMUSDT', 'IOSTUSDT', 'THETAUSDT', 'ALGOUSDT', 'ZILUSDT', 'KNCUSDT', 'ZRXUSDT',\n>>         'COMPUSDT', 'OMGUSDT', 'DOGEUSDT', 'SXPUSDT', 'KAVAUSDT', 'BANDUSDT', 'RLCUSDT', 'WAVESUSDT', 'MKRUSDT',\n>>         'SNXUSDT', 'DOTUSDT', 'DEFIUSDT', 'YFIUSDT', 'BALUSDT', 'CRVUSDT', 'TRBUSDT', 'RUNEUSDT', 'SUSHIUSDT',\n>>         'EGLDUSDT', 'SOLUSDT', 'ICXUSDT', 'STORJUSDT', 'BLZUSDT', 'UNIUSDT', 'AVAXUSDT', 'FTMUSDT', 'HNTUSDT',\n>>         'ENJUSDT', 'FLMUSDT', 'TOMOUSDT', 'RENUSDT', 'KSMUSDT', 'NEARUSDT', 'AAVEUSDT', 'FILUSDT', 'RSRUSDT', 'LRCUSDT',\n>>         'MATICUSDT', 'OCEANUSDT', 'BELUSDT', 'CTKUSDT', 'AXSUSDT', 'ALPHAUSDT', 'ZENUSDT', 'SKLUSDT', 'GRTUSDT',\n>>         '1INCHUSDT', 'BTCBUSD', 'CHZUSDT', 'SANDUSDT', 'ANKRUSDT', 'LITUSDT', 'UNFIUSDT', 'REEFUSDT', 'RVNUSDT',\n>>         'SFPUSDT', 'XEMUSDT', 'COTIUSDT', 'CHRUSDT', 'MANAUSDT', 'ALICEUSDT', 'HBARUSDT', 'ONEUSDT', 'LINAUSDT',\n>>         'STMXUSDT', 'DENTUSDT', 'CELRUSDT', 'HOTUSDT', 'MTLUSDT', 'OGNUSDT', 'NKNUSDT', 'DGBUSDT', '1000SHIBUSDT',\n>>         'BAKEUSDT', 'GTCUSDT', 'ETHBUSD', 'BTCDOMUSDT', 'BNBBUSD', 'ADABUSD', 'XRPBUSD', 'IOTXUSDT', 'DOGEBUSD',\n>>         'AUDIOUSDT', 'C98USDT', 'MASKUSDT', 'ATAUSDT', 'SOLBUSD', 'DYDXUSDT', '1000XECUSDT', 'GALAUSDT', 'CELOUSDT',\n>>         'ARUSDT', 'KLAYUSDT', 'ARPAUSDT', 'CTSIUSDT', 'LPTUSDT', 'ENSUSDT', 'PEOPLEUSDT', 'ANTUSDT', 'ROSEUSDT',\n>>         'DUSKUSDT', 'FLOWUSDT', 'IMXUSDT', 'API3USDT', 'GMTUSDT', 'APEUSDT', 'BNXUSDT', 'WOOUSDT', 'JASMYUSDT',\n>>         'DARUSDT', 'GALUSDT', 'AVAXBUSD', 'NEARBUSD', 'GMTBUSD', 'APEBUSD', 'GALBUSD', 'FTMBUSD', 'DODOBUSD',\n>>         'GALABUSD', 'TRXBUSD', '1000LUNCBUSD', 'LUNA2BUSD', 'OPUSDT', 'DOTBUSD', 'TLMBUSD', 'ICPBUSD', 'WAVESBUSD',\n>>         'LINKBUSD', 'SANDBUSD', 'LTCBUSD', 'MATICBUSD', 'CVXBUSD', 'FILBUSD', '1000SHIBBUSD', 'LEVERBUSD', 'ETCBUSD',\n>>         'LDOBUSD', 'UNIBUSD', 'INJUSDT', 'STGUSDT', 'FOOTBALLUSDT', 'SPELLUSDT', '1000LUNCUSDT', 'LUNA2USDT', 'AMBBUSD',\n>>         'PHBBUSD', 'LDOUSDT', 'CVXUSDT', 'ICPUSDT', 'APTUSDT', 'QNTUSDT', 'APTBUSD', 'BLUEBIRDUSDT', 'ETHUSDT_230331',\n>>         'BTCUSDT_230331', 'FETUSDT', 'AGIXBUSD', 'FXSUSDT', 'HOOKUSDT', 'MAGICUSDT'\n>>     ],\n>>     'msg': ''\n>> }\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\n\u83b7\u53d6U\u672c\u4f4d\u5408\u7ea6\u4e0d\u53ef\u4ea4\u6613\u7684\u4ea7\u54c1\u540d\u79f0\u5217\u8868\n\n```python\nfrom binance_candle import Market\n\nsymbols_trading_off = Market('UM').get_symbols_trading_off()\nprint(symbols_trading_off)\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {\n>>     'code': 200,\n>>     'data': [\n>>         'SRMUSDT', 'CVCUSDT', 'BTSUSDT', 'BTCSTUSDT', 'SCUSDT', 'TLMUSDT', 'RAYUSDT', 'FTTBUSD', 'FTTUSDT',\n>>         'ANCBUSD', 'AUCTIONBUSD'\n>>     ],\n>>     'msg': ''\n>> }\n```\n\n\n### 9.5 \u6df1\u5ea6\u4fe1\u606f\n\n#### 9.5.1 get_get_depth \u83b7\u53d6\u5355\u4e2a\u4ea7\u54c1\u7684\u6df1\u5ea6\u4fe1\u606f\n\n```python\nfrom binance_candle import Market\nfrom pprint import pprint\n\nif __name__ == '__main__':\n    # \u5e01\u5e01\u4ea4\u6613\uff1aSPOT\uff1bU\u672c\u4f4d\u5408\u7ea6\uff1aUM\uff1b\u5e01\u672c\u4f4d\u5408\u7ea6\uff1aCM\n    instType = 'UM'\n    # \u5b9e\u4f8b\u5316\u884c\u60c5Market\n    market = Market(instType)\n    # \u5355\u4e2a\u4ea7\u54c1\u7684\u6df1\u5ea6\u4fe1\u606f limit : \u6570\u91cf\n    pprint(market.get_depth('BTCUSDT', limit=10))\n```\n\n\u8f93\u51fa\uff1a\n\n```text\n>> {'code': 200,\n>>  'data': {'E': 1675823293991,\n>>           'T': 1675823293984,\n>>           'asks': [['23290.50', '15.695'],\n>>                    ['23290.80', '0.003'],\n>>                    ['23290.90', '0.001'],\n>>                    ['23291.00', '0.084'],\n>>                    ['23291.10', '0.006'],\n>>                    ['23291.20', '0.034'],\n>>                    ['23291.30', '0.017'],\n>>                    ['23291.40', '0.258'],\n>>                    ['23291.50', '0.010'],\n>>                    ['23291.70', '0.821']],\n>>           'bids': [['23290.40', '18.252'],\n>>                    ['23290.30', '2.230'],\n>>                    ['23290.20', '1.156'],\n>>                    ['23290.10', '0.130'],\n>>                    ['23290.00', '2.182'],\n>>                    ['23289.90', '0.010'],\n>>                    ['23289.80', '0.172'],\n>>                    ['23289.70', '0.151'],\n>>                    ['23289.60', '0.044'],\n>>                    ['23289.50', '0.002']],\n>>           'lastUpdateId': 2476916281979},\n>>  'msg': ''}\n```\n\n## 10 \u5386\u53f2K\u7ebf\u7ba1\u7406\n\n### 10.1 BinanceLite \u7b80\u4ecb\n\n\nBinanceLite\u57fa\u4e8ecandlelite\u7684IO\u4e3a\u5e95\u5c42\uff0c\u7528\u4e8e\u7ef4\u62a4\u672c\u5730Binance\u5386\u53f2K\u7ebf\u6570\u636e\uff0c\u7531\u4e8eBinanceLite\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 binance_candle import BinanceLite\n\nbinanceLite = BinanceLite()\ncandle = binanceLite.load_candle_by_date(\n    instType='SPOT',\n    symbol='BTCUSDT',\n    start='2023-01-01',\n    end='2023-01-10',\n)\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\u770bBinance\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\u3001U\u672c\u4f4d\uff1aUM\u3001\u5e01\u672c\u4f4d\uff1aCM\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\u4e2dBinance\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\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\u53d6U\u672c\u4f4d\u5408\u7ea6\u4e2dBTCUSDT\u4ece2023-01-01 ~ 2023-01-10 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\n\n```python\nfrom binance_candle import BinanceLite\n\nbinanceLite = BinanceLite()\ncandle = binanceLite.load_candle_by_date(\n    instType='UM',\n    symbol='BTCUSDT',\n    start='2023-01-01',\n    end='2023-01-10',\n)\nprint(candle)\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\u3001U\u672c\u4f4d\uff1aUM\u3001\u5e01\u672c\u4f4d\uff1aCM\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\u4e2dBinance\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\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\u8bfb\u53d6U\u672c\u4f4d\u5408\u7ea6\u4ece2023-01-01 ~ 2023-01-10 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\u5b57\u5178\n\n```python\nfrom binance_candle import BinanceLite\n\nbinanceLite = BinanceLite()\ncandle_map = binanceLite.load_candle_map_by_date(\n    instType='UM',\n    symbols=[],\n    start='2023-01-01',\n    end='2023-01-10',\n)\nprint(candle_map)\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\u3001U\u672c\u4f4d\uff1aUM\u3001\u5e01\u672c\u4f4d\uff1aCM\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\u4e2dBinance\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\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\u53d6U\u672c\u4f4d\u5408\u7ea6\u4e2dBTCUSDT\u4ece2023-01-01~ 2023-01-10 \u7684\u5386\u53f2K\u7ebf\u6570\u636e\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 binance_candle import BinanceLite\n\nbinanceLite = BinanceLite()\ncandle = binanceLite.load_candle_by_date(\n    instType='UM',\n    symbol='BTCUSDT',\n    start='2023-01-01',\n    end='2023-01-10',\n)\n\nbinanceLite.save_candle_by_date(\n    candle=candle,\n    instType='UM',\n    symbol='BTCUSDT',\n    start='2023-01-05',\n    end='2023-01-06',\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\u3001U\u672c\u4f4d\uff1aUM\u3001\u5e01\u672c\u4f4d\uff1aCM\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\u4e2dBinance\u7684\u9ed8\u8ba4\u6839\u76ee\u5f55|\n|timezone|Union[str,None]|None|\u65f6\u533a\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\u7684\u9ed8\u8ba4\u65f6\u533a|\n|bar|Union[str,None]|None|\u65f6\u95f4\u7c92\u5ea6\uff0cNone\u4f7f\u7528candlelite\u4e2dBinance\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\u53d6U\u672c\u4f4d\u5408\u7ea6\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 binance_candle import BinanceLite\n\nbinanceLite = BinanceLite()\ncandle_map = binanceLite.load_candle_map_by_date(\n    instType='UM',\n    symbols=[],\n    start='2023-01-01',\n    end='2023-01-10',\n)\n\nbinanceLite.save_candle_map_by_date(\n    candle_map=candle_map,\n    instType='UM',\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": "Binance local and real-time market candle server",
    "version": "1.0.10",
    "project_urls": {
        "Homepage": "https://github.com/pyted/binance_candle"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "adffdd9405d3ae32693a6c2df0a2d6f46c84f1e31ebfe944f550f238bb5b21d0",
                "md5": "0abbf4e983d9ae1be9ff779893e92930",
                "sha256": "6ed0323207386848131361f48855836918fcd378304111a7d1c2e70d6afc11db"
            },
            "downloads": -1,
            "filename": "binance_candle-1.0.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0abbf4e983d9ae1be9ff779893e92930",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6.0",
            "size": 33459,
            "upload_time": "2023-10-19T13:53:07",
            "upload_time_iso_8601": "2023-10-19T13:53:07.871940Z",
            "url": "https://files.pythonhosted.org/packages/ad/ff/dd9405d3ae32693a6c2df0a2d6f46c84f1e31ebfe944f550f238bb5b21d0/binance_candle-1.0.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0d777b52866ccbcfedac507411e56946b769d450da8512dc6cb356dc50bc2e00",
                "md5": "eee864929be8673fdaec9872dbdcdb84",
                "sha256": "5dc07cfff69ea203ce6c5949df115ef8f8bb8400aeddaa7f2b53c3f635bfb173"
            },
            "downloads": -1,
            "filename": "binance_candle-1.0.10.tar.gz",
            "has_sig": false,
            "md5_digest": "eee864929be8673fdaec9872dbdcdb84",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6.0",
            "size": 655098,
            "upload_time": "2023-10-19T13:53:11",
            "upload_time_iso_8601": "2023-10-19T13:53:11.205014Z",
            "url": "https://files.pythonhosted.org/packages/0d/77/7b52866ccbcfedac507411e56946b769d450da8512dc6cb356dc50bc2e00/binance_candle-1.0.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-19 13:53:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pyted",
    "github_project": "binance_candle",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "binance-candle"
}
        
Elapsed time: 0.12958s