Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ydqsbfsyi opened this issue Feb 5, 2024 · 7 comments
Open

Comments

@ydqsbfsyi
Copy link

ydqsbfsyi commented Feb 5, 2024

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

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
Copy link
Owner

pyted commented Feb 8, 2024

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

@ydqsbfsyi
Copy link
Author

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

谢谢解答

@pyted
Copy link
Owner

pyted commented Feb 8, 2024

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

@ydqsbfsyi
Copy link
Author

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

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

@pyted
Copy link
Owner

pyted commented Feb 13, 2024

报错是因为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
Copy link
Owner

pyted commented Feb 13, 2024

使用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
Copy link
Author

报错是因为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

多谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants