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

简介: 全球大多数行情一次购买即可享受全部数据行情订阅。历史数据可以提供下载服务方便使用云端自定义指数合成能力自定义品种的支持(如不同品种的价差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数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
6月前
|
机器学习/深度学习 监控 安全
现货量化合约跟单/交易所系统开发成熟技术/案例搭建/玩法详情/步骤指南
现货量化合约跟单系统开发是指构建一个系统,通过使用量化交易策略,实现将现货市场的交易信号自动化地应用到交易合约中,以进行自动化的跟单交易。 以下是现货量化合约跟单系统开发的关键概述:
|
8月前
|
监控 数据可视化 数据挖掘
揭秘抖音视频详情API:电商行业的制胜法宝与实时数据获取的奥秘
随着社交媒体的普及和电商行业的快速发展,抖音等短视频平台已经成为电商企业获取用户、推广产品和了解市场趋势的重要渠道。获取抖音视频详情API对于电商行业来说具有重要意义,它可以帮助企业实时获取抖音平台上的视频数据,洞察用户需求,优化产品策略,制定精准营销计划,从而提升竞争力。
|
8月前
|
XML 缓存 JSON
淘宝详情API接口在电商行业中的重要性及实时数据获取实现
随着电子商务的快速发展,电商平台上的商品数量呈现爆炸性增长。为了满足用户的需求,提供丰富、多样的商品信息,淘宝等电商平台推出了详情API接口。本文旨在探讨淘宝详情API接口在电商行业中的重要性,以及如何实现实时数据获取。
|
分布式数据库 区块链 数据安全/隐私保护
现货合约跟单量化交易系统开发详情模式|案例
区块链技术和智能合约是数字经济发展的两个重要因素,是互相协同和依存的。
|
存储 安全 区块链
简要分析:现货合约交易所系统开发功能详细说明技术详解
合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易,合约交易的买卖对象是由交易所统一制定的标准化合约,交易所规定了其商品种类,交易时间,数量等标准化信息。合约代表了买卖双方所拥有的权利和义务。 简单点说就是:现在约好未来某个时间地点交易一定数量的某种商品。
|
安全 搜索推荐 区块链
DApp交易所兑换底池模式系统开发|案例分析
区块链技术还可以提高Web3.0的网络速度和处理效率
|
算法 机器人 API
量化交易机器人丨现货量化合约跟单系统开发(对接API火币/币安/OK/其他交易所)案例项目/方案设计/源码部署
量化的关键在于策略家预先建立的策略信号。比如有人用macd金叉作为进场信号,其实就是简单的量化;macd处理了一些基本的K线数据,然后画出来,就是量化,After processing the data with the golden cross structure on the chart,you choose to enter the market,which is quantitative trading.量化交易不是高频交易,每个指标其实都是一种量化,每个量化交易者都在创造一个新的指标;通过你理解的算法组合数据,用电脑计算,形成自己的交易系统,这就是真正的量化交易。

热门文章

最新文章