pyted / okx

Python OKX API interface
138 stars 44 forks source link

请教websocket读取历史k线数据,到底要不要API KEY? #4

Open ydqsbfsyi opened 7 months ago

ydqsbfsyi commented 7 months ago

初学,看了几个教程,先开始尝试写一小段实验代码:

from okx.app import OkxSWAP
from okx.app import MarketSWAP
from okx.app import Market

import websocket
import json
import pandas as pd

import datetime

# 对于下述代码 okxSWAP.market 等同于 marketSWAP 等同于 market
# # 单纯使用okxSWAP.market不需要秘钥
okxSWAP = OkxSWAP(
    key="",
    secret="",
    passphrase="",
    # 使用http和https代理,proxies={'http':'xxxxx','https:':'xxxxx'},通requests中的proxies参数规则相同
    proxies={'http':'http://127.0.0.1:7081','https':'http://127.0.0.1:7081'},
    # 转发:需搭建转发服务器,可参考:https://github.com/pyted/okx_resender
    proxy_host=None, 
)

get_history_candle_latest = okxSWAP.market.get_history_candle_latest(
    instId = 'ETH-USDT-SWAP',
    length = 3,
    bar = '5m'
)
get_history_candle_latest

结果提示要填写key。我填了,又说: [FAILURE] 设置持仓方式为双向持仓失败,请手动设置:posMode="long_short_mode"

这个我还没尝试。我先问问:不是说只是读行情数据,不需要api key?

另外,我的目标是:用ws持续不断地读取所有永续合约的每个品种的5分钟k线数据,只要最新的(尚未完成的)一根k线即可,然后可能不需要保存为文件,直接判断涨幅然后根据涨幅排序。。。我用这个okx项目好,还是okx candle项目好?

pyted commented 7 months ago
  1. 一般行情数据是不需要API验证的
  2. okx_candle这个库已经作废了,关于K线的服务功能已经合并到了okx中
  3. 不建议使用proxies,如果大陆用户建议使用proxy_host,这样更安全也更稳定
ydqsbfsyi commented 7 months ago
  1. 一般行情数据是不需要API验证的
  2. okx_candle这个库已经作废了,关于K线的服务功能已经合并到了okx中
  3. 不建议使用proxies,如果大陆用户建议使用proxy_host,这样更安全也更稳定

谢谢解答

pyted commented 7 months ago

目前okx库中,我并未封装ws的功能,但如果你想使用实时的最新K线,可以参看里面的CandleServer,例子在examples中的[4.3 APP K线服务 维护实时历史K线.ipynb]。

ydqsbfsyi commented 7 months ago

目前okx库中,我并未封装ws的功能,但如果你想使用实时的最新K线,可以参看里面的CandleServer,例子在examples中的[4.3 APP K线服务 维护实时历史K线.ipynb]。

多谢,学习一下。目前学会了不用okx相关的库,直接ws连接。你这个更方便更多用途

pyted commented 6 months ago

报错是因为OkxSWAP在实例化的时候会自动改变双向持仓,这个报错没有关系,因为并未填写秘钥。 如果不想使用SWAP的全部功能,可以单独示例化MarketSWAP

marketSWAP = MarketSWAP( key="", secret="", passphrase="",

使用http和https代理,proxies={'http':'xxxxx','https:':'xxxxx'},通requests中的proxies参数规则相同

proxies={'http': 'http://127.0.0.1:7081', 'https': 'http://127.0.0.1:7081'},
# 转发:需搭建转发服务器,可参考:https://github.com/pyted/okx_resender
proxy_host=None,

) get_history_candle_latest = marketSWAP.get_history_candle_latest( instId='ETH-USDT-SWAP', length=3, bar='5m' ) get_history_candle_latest

pyted commented 6 months ago

使用okx,不要使用okx_candle这个库,因为okx_candle已经不再维护了。

以下是一个使用例子:

from okx.app.candle_server import CandleRule, CandleServer

class MyCandleRule(CandleRule):
    # 收集的产品 all表示全部正在交易的产品
    INSTIDS = 'all'
    # candle_map 缓存K线数据长度
    LENGTH = 100
    # 时间颗粒度
    BAR = '5m'
    # 每日下载昨日历史K线数据的时刻 格式:%H:%M:%S None表示不下载
    DOWNLOAD_TIME = None  # 如果你维护的实时K线长度不足以包含一整天,应该关闭DOWNLOAD_TIME功能
    # candle_map 保存缓存文件时间间隔(秒) None:不保存缓存
    CACHE_DELAY_SECONDS = None
    # 服务启动 需维护本地多少天的历史K线数据
    LOCAL_CANDLE_DAYS: int = 1
    # 每日下载昨日历史K线数据的时刻 格式:%H:%M:%S None表示不下载

# 币币交易:SPOT;永续合约:SWAP;交割合约:FUTURES;期权:OPTION
instType = 'SWAP'
# 永续合约,默认规则
candleServer = CandleServer(
    instType=instType,
    rule=MyCandleRule,
    # 使用http和https代理,proxies={'http':'xxxxx','https:':'xxxxx'},通requests中的proxies参数规则相同
    proxies={},
    # 转发:需搭建转发服务器,可参考:https://github.com/pyted/okx_resender
    # proxy_host=None,
    proxy_host='http://101.32.44.77:99'
)
# 启动K线维护服务
# 同步到堵塞到数据初始化完成,异步维护candle_map
candleServer.run_candle_map()
# 被异步维护的candle_map字典
# 允许K线的最新时间与当前时间相差security_seconds,否则会返回空数据
candle = candleServer.get_candle_security('BTC-USD-SWAP', security_seconds=60 * 5) 
ydqsbfsyi commented 6 months ago

报错是因为OkxSWAP在实例化的时候会自动改变双向持仓,这个报错没有关系,因为并未填写秘钥。 如果不想使用SWAP的全部功能,可以单独示例化MarketSWAP

marketSWAP = MarketSWAP( key="", secret="", passphrase="", # 使用http和https代理,proxies={'http':'xxxxx','https:':'xxxxx'},通requests中的proxies参数规则相同 proxies={'http': 'http://127.0.0.1:7081', 'https': 'http://127.0.0.1:7081'}, # 转发:需搭建转发服务器,可参考:https://github.com/pyted/okx_resender proxy_host=None, ) get_history_candle_latest = marketSWAP.get_history_candle_latest( instId='ETH-USDT-SWAP', length=3, bar='5m' ) get_history_candle_latest

多谢