首页 > 其他分享 >量化交易系统开发-实时行情自动化交易-Okex衍生数据

量化交易系统开发-实时行情自动化交易-Okex衍生数据

时间:2024-11-09 22:50:31浏览次数:3  
标签:df data 实时 klines 计算 量化 Okex 数据 response

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来聊聊基于Okex交易所API获取衍生数据。

衍生数据(Derived Data)是从基础市场数据中计算得出的重要信息,用于辅助交易策略的制定和执行。例如,通过对市场的价格、成交量、订单簿等数据进行分析,可以计算技术指标、市场情绪、买卖盘强度等。OKEx 提供了一系列 API 接口,开发者可以利用这些接口来获取基础数据并进一步计算衍生数据,从而为交易决策提供参考。以下是如何利用 OKEx API 获取并生成衍生数据的详细开发内容扩展。

1. 衍生数据简介

衍生数据是基于原始市场数据(如 K 线数据、订单簿、交易数据等)通过特定算法计算得出的信息,帮助开发者更好地理解市场动态、发现交易机会。常见的衍生数据包括:

  • 技术指标:如均线(Moving Average)、相对强弱指数(RSI)、布林带(Bollinger Bands)等。

  • 买卖盘强度:通过比较买盘和卖盘的累计量,判断市场多空力量的对比情况。

  • 资金流向指标:通过计算主动买入和主动卖出的资金量,判断大资金的市场活动情况。

2. 获取基础数据并生成衍生数据

OKEx 提供的 API 接口中,最常用的包括获取 K 线数据、订单簿数据、交易数据等。衍生数据的生成通常从这些基础数据开始,通过算法进行进一步计算。

  • 获取 K 线数据:首先,可以通过调用 /api/v5/market/candles 接口获取 K 线数据,作为生成技术指标的基础。例如,计算均线、相对强弱指数等都需要基于历史的价格数据。

    import requests
    import pandas as pd
    
    def get_klines(inst_id, bar='1m', limit=100):
        url = f"https://www.okex.com/api/v5/market/candles?instId={inst_id}&bar={bar}&limit={limit}"
        response = requests.get(url)
        if response.status_code == 200:
            data = response.json()
            df = pd.DataFrame(data['data'], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
            df['close'] = df['close'].astype(float)
            return df
        else:
            raise Exception(f"Error fetching K line data: {response.status_code}")
    
    # 获取 BTC-USDT 的 K 线数据
    klines = get_klines("BTC-USDT")
    print(klines.head())

    在上述代码中,我们通过调用 OKEx 的 REST API 获取 K 线数据,并将其转换为 Pandas DataFrame,以便后续进行技术指标的计算。

3. 技术指标的计算

通过获取的基础数据,可以进一步计算各种常见的技术指标,这些指标是交易策略中最重要的组成部分。

  • 移动平均线(MA):移动平均线是最简单和常用的技术指标之一,用于平滑价格波动,从而识别市场趋势。

    def calculate_moving_average(df, window=14):
        df[f'ma_{window}'] = df['close'].rolling(window=window).mean()
        return df
    
    # 计算 14 日移动平均线
    klines_with_ma = calculate_moving_average(klines, window=14)
    print(klines_with_ma[['timestamp', 'close', 'ma_14']].tail())

    在此示例中,我们利用 Pandas 提供的滚动计算功能来计算移动平均线。移动平均线可以帮助判断市场是处于上升还是下降趋势。

  • 相对强弱指数(RSI):RSI 用于判断市场的超买或超卖状态,是短期交易中非常重要的指标。

    def calculate_rsi(df, period=14):
        delta = df['close'].diff(1)
        gain = delta.where(delta > 0, 0)
        loss = -delta.where(delta < 0, 0)
        avg_gain = gain.rolling(window=period).mean()
        avg_loss = loss.rolling(window=period).mean()
        rs = avg_gain / avg_loss
        df['rsi'] = 100 - (100 / (1 + rs))
        return df
    
    # 计算 14 日 RSI
    klines_with_rsi = calculate_rsi(klines_with_ma, period=14)
    print(klines_with_rsi[['timestamp', 'close', 'rsi']].tail())

    通过计算 RSI,可以帮助交易者识别市场是否处于超买(通常 RSI > 70)或超卖状态(通常 RSI < 30),从而作出交易决策。

4. 买卖盘强度的计算

买卖盘强度是通过比较市场的买盘和卖盘挂单数量,分析市场中多空双方的力量对比。

  • 获取订单簿数据:通过调用 /api/v5/market/books 接口获取市场订单簿数据,然后计算买卖盘的强度。

    def get_order_book(inst_id, depth=10):
        url = f"https://www.okex.com/api/v5/market/books?instId={inst_id}&sz={depth}"
        response = requests.get(url)
        if response.status_code == 200:
            data = response.json()
            bids = sum([float(bid[1]) for bid in data['data'][0]['bids']])
            asks = sum([float(ask[1]) for ask in data['data'][0]['asks']])
            return bids, asks
        else:
            raise Exception(f"Error fetching order book data: {response.status_code}")
    
    # 获取 BTC-USDT 的买卖盘强度
    bids, asks = get_order_book("BTC-USDT")
    print(f"买盘强度: {bids}, 卖盘强度: {asks}")

    在该示例中,我们计算了买卖盘的累计量,以判断市场中的多空力量对比。例如,当买盘远大于卖盘时,可能预示市场具有上升潜力。

5. 资金流向指标的计算

资金流向指标(Capital Flow Indicator)用于分析市场中的大资金流动,通常通过分析主动买入和主动卖出的资金量来确定。

  • 分析主动买卖数据:通过 WebSocket 订阅成交记录,并分析每笔成交是主动买入还是主动卖出。

    import asyncio
    import websockets
    import json
    
    async def subscribe_trades(inst_id):
        url = "wss://ws.okex.com:8443/ws/v5/public"
        async with websockets.connect(url) as websocket:
            subscribe_message = {
                "op": "subscribe",
                "args": [{"channel": "trades", "instId": inst_id}]
            }
            await websocket.send(json.dumps(subscribe_message))
    
            buy_volume = 0
            sell_volume = 0
            while True:
                response = await websocket.recv()
                data = json.loads(response)
                for trade in data.get('data', []):
                    if trade['side'] == 'buy':
                        buy_volume += float(trade['sz'])
                    elif trade['side'] == 'sell':
                        sell_volume += float(trade['sz'])
                print(f"买入量: {buy_volume}, 卖出量: {sell_volume}")
    
    # 订阅 BTC-USDT 的成交记录并计算资金流向
    asyncio.run(subscribe_trades("BTC-USDT"))

    在该示例中,通过订阅成交记录来计算买入量和卖出量。主动买入量大于卖出量时,说明市场中多头力量占优,资金正在流入市场;反之,则说明空头力量较强。

6. 数据存储与优化
  • 数据存储:衍生数据计算后需要进行存储,以便后续的策略回测和实时监控。可以使用关系型数据库(如 MySQL)来存储 K 线及其衍生指标,或者使用 Redis 来缓存最新的衍生数据,便于策略的快速读取。

  • 计算优化:对于实时计算的衍生数据,例如 RSI 和资金流向,可以利用多线程或异步编程来提高计算效率,确保衍生数据能及时为策略提供支持。

标签:df,data,实时,klines,计算,量化,Okex,数据,response
From: https://blog.csdn.net/fengbuyu/article/details/143630022

相关文章

  • opencv实时弯道检测
    项目源码获取方式见文章末尾!600多个深度学习项目资料,快来加入社群一起学习吧。《------往期经典推荐------》项目名称1.【基于CNN-RNN的影像报告生成】2.【卫星图像道路检测DeepLabV3Plus模型】3.【GAN模型实现二次元头像生成】4.【CNN模型实现mnist手写数字识别】......
  • (21-3)基于深度强化学习的量化交易策略(OpenAI Baselines +FinRL+DRL+PyPortfolioOpt):数据
    21.6 数据预处理数据预处理是训练高质量机器学习模型的关键步骤,在这一步需要检查缺失数据并进行特征工程,以将数据转换为适合模型训练的状态。本项目的数据预处理江湾城以下工作:添加技术指标:在实际交易中,需要考虑各种信息,例如历史股价、当前持仓股票、技术指标等。本文演示......
  • 量化交易中,模型验证为何如此重要?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>量化交易模型是基于对市场数据的分析构建的。模型验证能够确保模型所依据的假设和算法与市场的实际规律相契合。如果模型与市场实际脱节,例......
  • 餐厅人流实时监测系统
    餐厅人流实时监测系统通过利用现场监控摄像头,餐厅人流实时监测系统实现对餐厅区域内的人员进入数量、离开数量的统计展示。通过AI算法对摄像头捕捉的画面进行实时分析,从而精确地统计出入餐厅的人数。这一功能不仅为餐厅管理人员提供了实时的客流数据,更为特殊时段的客流疏导、分流......
  • 程序化交易和量化投资,谁在赚谁的钱?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>程序化交易是指把交易策略通过计算机程序来实现的一种交易方式。它能按照事先设定好的规则快速执行交易。当某种股票价格达到特定价位时,程......
  • 一种增稳加速直连 Github Steam Pixiv 等网站的全新轻量化方案 (Sheas Cealer 开发两
    由于法律风险和敏感性,本文不探讨使用代理或者混淆作为解决方案,而是研究一种更加合法合规和轻量化的无代理直连方案来加速部分网站的访问,在结尾处我编写了一个简单易用的开源桌面端程序,运用本文介绍的原理来实现部分网站的加速,如果你对原理部分不感兴趣,也可以直接跳至结尾处看我写......
  • 从无音响Windows 端到 有音响macOS 端实时音频传输播放
    以下是从Windows端到macOS端传输音频的优化方案,基于上述链接中的思路进行调整:Windows端操作安装必要软件安装Python(确保版本兼容且已正确配置环境变量)。安装PyAudio库,可通过 pipinstallpyaudio 命令在命令提示符(CMD)中执行安装。获取音频源并传输以下是优化后......
  • 这些实时互动 AI 场景正在涌现生长,也预示着多模态 AI 的未来|RTE2024 声网CEO赵斌演讲
    10月25日,在RTE2024第十届实时互联网大会主论坛上,声网创始人兼CEO赵斌发表了《实时互动十年:从WebRTC到生成式AI时代的RTE》主旨演讲。 赵斌认为,生成式AI正在驱动IT行业发生大变革,这一趋势主要体现在四个层面:终端、软件、云以及人机界面。在这样的时代背景下,生成式......
  • 量化交易系统开发-实时行情自动化交易-Okex交易数据
    19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。接下来聊聊基于Okex交易所API获取交易数据。在自动化交易系统中,交易数据(TradeTicks)是进行......
  • MySQLMonitor: 黑盒测试Mysql实时监控辅助工具
    MySQLMonitorMySQL实时监控工具(代码审计、黑盒测试辅助工具)使用1.自行打包使用gitclonehttps://github.com/fupinglee/MySQLMonitorcdMySQLMonitormvncleanpackage-DskipTests=true打开target下的jar文件即可执行2.直接下载使用https://github.com/fupinglee/......