通过凋谢的形式提供寰球股票(A股、港股、美股)、期货(国内期货、国际期货)等历史数据查问及实盘实时行情订阅
平台特色:
寰球大多数行情一次购买即可享受全副数据行情订阅。
历史数据能够提供下载服务方便使用
云端自定义指数合成能力
自定义种类的反对(如不同种类的价差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<Delegate> _listDele = new List<Delegate>(); 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; }
残缺下续