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

简介: 全球大多数行情一次购买即可享受全部数据行情订阅。历史数据可以提供下载服务方便使用云端自定义指数合成能力自定义品种的支持(如不同品种的价差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;
        }

完整下续

目录
相关文章
|
8月前
|
存储 安全 分布式数据库
合约量化交易跟单系统开发模式案例|案例分析
Web 3.0设想了一个真正去中心化的互联网,其中连接完全基于点对点网络连接
|
8月前
|
JSON 数据挖掘 API
结合数据分析工具,深入挖掘淘宝API接口的商业价值
随着电子商务的蓬勃发展,淘宝作为国内领先的电商平台,不仅为消费者提供了便捷的购物环境,同时也为开发者和数据分析师提供了丰富的数据资源。通过有效地调用淘宝API接口获取商品详情,再结合数据分析工具进行深入的数据挖掘,可以为商家、市场分析师及研究人员等带来巨大的商业价值
|
8月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
8月前
|
小程序 IDE API
如何用“AIT”解决能力集成难题——以商家券为例
如何用“AIT”解决能力集成难题——以商家券为例
95 0
|
存储 SQL 搜索推荐
【送书】从不了解用户画像,到用画像数据赋能业务看这一本书就够了丨《用户画像:平台构建与业务实践》
【送书】从不了解用户画像,到用画像数据赋能业务看这一本书就够了丨《用户画像:平台构建与业务实践》
|
数据采集 安全 大数据
大数据数据采集的数据来源的第三方服务数据之第三方平台的运营数据
大数据已经成为数字时代最重要的资源之一,而数据采集则是大数据处理的第一步。在实际应用中,大多数企业都需要采集来自不同来源和渠道的数据,这些数据会在后续分析中被用于决策和预测。
220 0
|
存储
《交易风控小微金融业务跨平台数据共享与处理数据的海量存储与多种离线计算处理》电子版地址
交易风控小微金融业务跨平台数据共享与处理数据的海量存储与多种离线计算处理
66 0
《交易风控小微金融业务跨平台数据共享与处理数据的海量存储与多种离线计算处理》电子版地址
|
监控 搜索推荐 数据挖掘
如何使用海关数据准确开发到客户
海关数据其实一直是外贸应用中最广泛的开发渠道,而且特别利好初学者,是企业开发新客户、监控同行、维护老客户以及决策参考的商战利器。当然,想通过海关数据精确找到客户,需要熟悉以下操作技巧。
258 0
|
机器学习/深度学习 数据采集 SQL
基于阿里云平台进行游戏数据分析(一)
在本项目中,我们将基于阿里云平台进行游戏数据分析。本文是这个项目介绍的第一部分,主要介绍项目的背景,数据导入与预处理等环节。
379 0
基于阿里云平台进行游戏数据分析(一)
|
机器学习/深度学习 SQL 算法
基于阿里云平台进行游戏数据分析(二)
在本项目中,我们将基于阿里云平台进行游戏数据分析。本文是这个项目介绍的第二部分,主要介绍绘制散点图,建立回归模型,检测变量之间的线性关系。
369 0
基于阿里云平台进行游戏数据分析(二)