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

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

完整下续

目录
相关文章
|
7月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
7月前
|
监控 数据可视化 数据挖掘
揭秘抖音视频详情API:电商行业的制胜法宝与实时数据获取的奥秘
随着社交媒体的普及和电商行业的快速发展,抖音等短视频平台已经成为电商企业获取用户、推广产品和了解市场趋势的重要渠道。获取抖音视频详情API对于电商行业来说具有重要意义,它可以帮助企业实时获取抖音平台上的视频数据,洞察用户需求,优化产品策略,制定精准营销计划,从而提升竞争力。
|
7月前
|
JSON API 数据格式
抖音商品详情API接口在电商行业中的重要性及实时数据获取实现
随着移动互联网的快速发展,电商行业不断壮大。抖音作为一款短视频社交应用,近年来在电商领域取得了显著成果。本文将探讨抖音商品详情API接口在电商行业中的重要性,以及如何通过实时数据获取提高业务效率。我们将介绍相关的技术背景、API接口的基础知识、实时数据获取的方法和代码实现,并通过一个案例来展示具体应用。
|
7月前
|
XML 缓存 JSON
淘宝详情API接口在电商行业中的重要性及实时数据获取实现
随着电子商务的快速发展,电商平台上的商品数量呈现爆炸性增长。为了满足用户的需求,提供丰富、多样的商品信息,淘宝等电商平台推出了详情API接口。本文旨在探讨淘宝详情API接口在电商行业中的重要性,以及如何实现实时数据获取。
|
7月前
|
存储 搜索推荐 NoSQL
Lazada商品详情接口在电商行业中的重要性及实时数据获取实现
在电子商务的浪潮下,商品详情数据的实时性和准确性对于电商平台的运营至关重要。Lazada作为东南亚地区领先的电商平台,其商品详情接口在电商行业中的作用不容忽视。本文将深入探讨Lazada商品详情接口的重要性,并介绍如何通过API实现实时数据获取,以提升电商企业的运营效率和用户体验。
|
人工智能 API 计算机视觉
对接API火币/币安/OK交易所量化合约跟单系统开发详细项目/方案解析/案例源码/运营版
  量化交易就是以数学公式和统计数据等为基础来建立数学模型,通过数学模型来进行交易。Quantitative trading relies on highly developed computer and internet technologies
|
数据采集 数据可视化 数据挖掘
Python爬虫系列10-交易所股票、基金的数据采集与分析
当大家经历的事情多了,慢慢的遇到事情,就不会急躁,也不会消极负能量,而是很冷静地面对,然后鼓励自己,只要努力,一定可以越来越好,不要自己给自己压力。 人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己。 学习如逆水行舟不进则退。
Python爬虫系列10-交易所股票、基金的数据采集与分析
|
机器学习/深度学习 SQL 算法
基于阿里云平台进行游戏数据分析(二)
在本项目中,我们将基于阿里云平台进行游戏数据分析。本文是这个项目介绍的第二部分,主要介绍绘制散点图,建立回归模型,检测变量之间的线性关系。
368 0
基于阿里云平台进行游戏数据分析(二)
|
机器学习/深度学习 数据采集 SQL
基于阿里云平台进行游戏数据分析(一)
在本项目中,我们将基于阿里云平台进行游戏数据分析。本文是这个项目介绍的第一部分,主要介绍项目的背景,数据导入与预处理等环节。
379 0
基于阿里云平台进行游戏数据分析(一)
|
SQL 机器学习/深度学习 分布式计算
基于阿里云平台进行游戏数据分析(三)
在本项目中,我们将基于阿里云平台进行游戏数据分析。本文是这个项目介绍的第三部分,主要介绍对游戏数据进行相关性分析和对比分析,并得出结论。
243 0
基于阿里云平台进行游戏数据分析(三)