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

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

完整下续

目录
相关文章
|
4月前
|
存储 安全 分布式数据库
合约量化交易跟单系统开发模式案例|案例分析
Web 3.0设想了一个真正去中心化的互联网,其中连接完全基于点对点网络连接
|
4月前
|
JSON 数据挖掘 API
结合数据分析工具,深入挖掘淘宝API接口的商业价值
随着电子商务的蓬勃发展,淘宝作为国内领先的电商平台,不仅为消费者提供了便捷的购物环境,同时也为开发者和数据分析师提供了丰富的数据资源。通过有效地调用淘宝API接口获取商品详情,再结合数据分析工具进行深入的数据挖掘,可以为商家、市场分析师及研究人员等带来巨大的商业价值
|
4月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
2月前
|
机器学习/深度学习 监控 安全
现货量化合约跟单/交易所系统开发成熟技术/案例搭建/玩法详情/步骤指南
现货量化合约跟单系统开发是指构建一个系统,通过使用量化交易策略,实现将现货市场的交易信号自动化地应用到交易合约中,以进行自动化的跟单交易。 以下是现货量化合约跟单系统开发的关键概述:
|
12月前
|
机器学习/深度学习 数据采集 算法
量化套利合约交易系统模型开发 | 合约量化交易系统源码规则解析
量化套利合约交易系统模型开发 | 合约量化交易系统源码规则解析
|
算法 机器人 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.量化交易不是高频交易,每个指标其实都是一种量化,每个量化交易者都在创造一个新的指标;通过你理解的算法组合数据,用电脑计算,形成自己的交易系统,这就是真正的量化交易。
合约跟单/现货量化跟单/一键跟单/对接API火币/币安/OK交易所系统开发稳定版/成熟案例/案例详细/源码程序
、合约交易是指买卖双方对约定未来某个时间按指定价格接收一定数量的某种资产的协议进行交易。The buying and selling objects of contract trading are standardized contracts formulated by the exchange,which specifies standardized information such as the type of goods,trading time,and quantity.The contract represents the rights and obligations of both
|
人工智能 API 计算机视觉
对接API火币/币安/OK交易所量化合约跟单系统开发详细项目/方案解析/案例源码/运营版
  量化交易就是以数学公式和统计数据等为基础来建立数学模型,通过数学模型来进行交易。Quantitative trading relies on highly developed computer and internet technologies
|
监控 供应链 算法
期货量化交易系统模型开发构建策略 | 期货量化交易系统开发源码示例
期货量化交易系统是一种利用计算机技术和数据分析方法来实现期货交易的系统。它通常包括以下几个部分:
|
算法 安全 数据挖掘
期货量化合约交易系统开发策略分析(源码案例)
期货量化交易系统是利用计算机技术和数学模型进行期货交易的系统。它通常基于量化投资的概念,利用数学模型和算法做出投资决策,以获得更高的回报。