量化交易平台之行情数据获取方式

简介: 全球大多数行情一次购买即可享受全部数据行情订阅。历史数据可以提供下载服务方便使用云端自定义指数合成能力自定义品种的支持(如不同品种的价差K线等)实时行情部分时效性强

平台特色:
全球大多数行情一次购买即可享受全部数据行情订阅。
历史数据可以提供下载服务方便使用
云端自定义指数合成能力
自定义品种的支持(如不同品种的价差K线等)
实时行情部分时效性强
行情数据接口,分享代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static RndInvest.DataPlatform.Ctp.ctp_quote;

namespace RndInvest.DataPlatform.Ctp
{
public abstract class CTPQuote : Quote
{
ctp_quote _q = null;
private readonly List _listDele = new List();
public Thread _doHeartBeatThread;

    /// <summary>
    /// 
    /// </summary>
    public CTPQuote()
    {
        _q = new ctp_quote();
        SetCallBack();
        _doHeartBeatThread = new Thread(new ThreadStart(HeartBeat));
        _doHeartBeatThread.IsBackground = true;
        _doHeartBeatThread.Start();
    }

    /// <summary>
    /// 前置地址端口
    /// </summary>
    public override string FrontAddr { get; set; }

    /// <summary>
    /// 帐号 guweng22346
    /// </summary>
    public override string Investor { get; set; }

    /// <summary>
    /// 密码
    /// </summary>
    public override string Password { get; set; }

    /// <summary>
    /// 经纪商代码
    /// </summary>
    public override string Broker { get; set; }

    Delegate AddDele(Delegate d) { _listDele.Add(d); return d; }

    void SetCallBack()
    {
        _q.SetOnFrontConnected((DeleOnFrontConnected)AddDele(new DeleOnFrontConnected(CTPOnFrontConnected)));
        _q.SetOnRspUserLogin((DeleOnRspUserLogin)AddDele(new DeleOnRspUserLogin(CTPOnRspUserLogin)));
        _q.SetOnFrontDisconnected((DeleOnFrontDisconnected)AddDele(new DeleOnFrontDisconnected(CTPOnFrontDisconnected)));
        _q.SetOnRspSubMarketData((DeleOnRspSubMarketData)AddDele(new DeleOnRspSubMarketData(CTPOnRspSubMarketData)));
        _q.SetOnRtnDepthMarketData((DeleOnRtnDepthMarketData)AddDele(new DeleOnRtnDepthMarketData(CTPOnRtnDepthMarketData)));
        _q.SetOnRspError((DeleOnRspError)AddDele(new DeleOnRspError(CTPOnRspError)));
    }

    private void CTPOnRtnDepthMarketData(ref CThostFtdcDepthMarketDataField pDepthMarketData)
    {
        CThostFtdcDepthMarketDataField f = pDepthMarketData;

        if (string.IsNullOrEmpty(f.InstrumentID) || string.IsNullOrEmpty(f.UpdateTime) || double.IsInfinity(f.UpperLimitPrice))//过滤无穷大/小
        {
            return;
        }
        //修正last=double.max
        if (Math.Abs(f.LastPrice - double.MaxValue) < double.Epsilon)
        {
            if (Math.Abs(f.AskPrice1 - double.MaxValue) > double.Epsilon)
            {
                f.LastPrice = f.AskPrice1;
            }
            else if (Math.Abs(f.BidPrice1 - double.MaxValue) > double.Epsilon)
            {
                f.LastPrice = f.BidPrice1;
            }
            else
                return;
        }

        //去掉tradingday字段
        //if (string.IsNullOrEmpty(f.TradingDay))
        //{
        //    f.TradingDay = this.TradingDay; //日期:实盘中某些交易所,此字段为空
        //}
        //if (string.IsNullOrEmpty(f.ActionDay)) //此字段可能为空
        //{
        //    f.ActionDay = this.TradingDay;
        //}
        //f.ExchangeID = instrument.ExchangeID;
        //处理,单边有挂边的情况
        if (f.AskPrice1 > f.UpperLimitPrice) //未赋值的数据
        {
            f.AskPrice1 = f.LastPrice;
        }
        if (f.BidPrice1 > f.UpperLimitPrice)
        {
            f.BidPrice1 = f.LastPrice;
        }
        //修最高/最低
        if (Math.Abs(f.HighestPrice - double.MaxValue) < double.Epsilon)
        {
            f.HighestPrice = f.AskPrice1;
        }
        if (Math.Abs(f.LowestPrice - double.MaxValue) < double.Epsilon)
        {
            f.LowestPrice = f.BidPrice1;
}

        MarketData tick = DicTick.GetOrAdd(f.InstrumentID, new MarketData
        {
            InstrumentID = f.InstrumentID,
        });


        if (f.UpdateMillisec == 0 && f.UpdateTime == tick.UpdateTime && tick.UpdateMillisec < 990)  //某些交易所(如郑商所)相同秒数的ms均为0
        {
            f.UpdateMillisec = tick.UpdateMillisec + 10;
        }

完整下续

目录
相关文章
|
6月前
|
存储 安全 分布式数据库
合约量化交易跟单系统开发模式案例|案例分析
Web 3.0设想了一个真正去中心化的互联网,其中连接完全基于点对点网络连接
|
6月前
|
JSON 数据挖掘 API
结合数据分析工具,深入挖掘淘宝API接口的商业价值
随着电子商务的蓬勃发展,淘宝作为国内领先的电商平台,不仅为消费者提供了便捷的购物环境,同时也为开发者和数据分析师提供了丰富的数据资源。通过有效地调用淘宝API接口获取商品详情,再结合数据分析工具进行深入的数据挖掘,可以为商家、市场分析师及研究人员等带来巨大的商业价值
|
6月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
4月前
|
机器学习/深度学习 监控 安全
现货量化合约跟单/交易所系统开发成熟技术/案例搭建/玩法详情/步骤指南
现货量化合约跟单系统开发是指构建一个系统,通过使用量化交易策略,实现将现货市场的交易信号自动化地应用到交易合约中,以进行自动化的跟单交易。 以下是现货量化合约跟单系统开发的关键概述:
|
数据采集 存储 数据库
2、电商数仓(业务数据采集平台)电商业务流程、电商常识、电商系统表结构、业务数据模拟、业务数据采集模块(一)
2、电商数仓(业务数据采集平台)电商业务流程、电商常识、电商系统表结构、业务数据模拟、业务数据采集模块(一)
|
6月前
|
监控 数据可视化 数据挖掘
揭秘抖音视频详情API:电商行业的制胜法宝与实时数据获取的奥秘
随着社交媒体的普及和电商行业的快速发展,抖音等短视频平台已经成为电商企业获取用户、推广产品和了解市场趋势的重要渠道。获取抖音视频详情API对于电商行业来说具有重要意义,它可以帮助企业实时获取抖音平台上的视频数据,洞察用户需求,优化产品策略,制定精准营销计划,从而提升竞争力。
|
6月前
|
监控 数据挖掘 API
阿里巴巴API接口技术揭秘:轻松驾驭电商数据,提升业务效率
阿里巴巴API接口技术揭秘:轻松驾驭电商数据,提升业务效率
151 1
|
6月前
|
存储 搜索推荐 数据挖掘
淘宝商品详情API:挖掘实时数据金矿,点燃电商增长引擎
随着互联网的快速发展,电子商务在全球范围内得到了广泛应用。作为中国电商市场的领军者,淘宝不仅拥有庞大的用户群体和海量的商品数据,还提供了一系列的API接口,使得第三方开发者可以方便地获取并利用这些数据。其中,淘宝商品详情API是淘宝开放平台中非常重要的一项接口,它能够获取到淘宝网内商品的详细信息,从而帮助开发者更好地服务用户,提升电商业务的运营效率。 本文将详细介绍淘宝商品详情API的应用场景、使用方法和注意事项,并通过示例代码展示如何使用该API获取商品详情数据。同时,本文还将探讨如何利用这些数据实现个性化推荐、提升销售转化率等业务目标。
|
6月前
|
XML 缓存 JSON
淘宝详情API接口在电商行业中的重要性及实时数据获取实现
随着电子商务的快速发展,电商平台上的商品数量呈现爆炸性增长。为了满足用户的需求,提供丰富、多样的商品信息,淘宝等电商平台推出了详情API接口。本文旨在探讨淘宝详情API接口在电商行业中的重要性,以及如何实现实时数据获取。
|
JSON 5G 开发者
智创指南 营销内容高效生产“利器” 批量混剪
更高效、更快速地创作优质短视频内容。
1177 0
智创指南 营销内容高效生产“利器” 批量混剪