量化交易平台之行情数据获取形式续
通过凋谢的形式提供寰球股票(A股、港股、美股)、期货(国内期货、国际期货)等历史数据查问及实盘实时行情订阅
平台特色:
寰球大多数行情一次购买即可享受全副数据行情订阅。
历史数据能够提供下载服务方便使用
云端自定义指数合成能力
自定义种类的反对(如不同种类的价差K线等)
实时行情局部时效性强
行情数据接口,分享代码如下:

        tick.AskPrice = f.AskPrice1;        tick.AskVolume = f.AskVolume1;        tick.AveragePrice = f.AveragePrice;        tick.BidPrice = f.BidPrice1;        tick.BidVolume = f.BidVolume1;        tick.LastPrice = f.LastPrice;        tick.OpenInterest = f.OpenInterest;        tick.UpdateMillisec = f.UpdateMillisec;        tick.UpdateTime = f.UpdateTime;        tick.Volume = f.Volume;        tick.UpperLimitPrice = f.UpperLimitPrice;        tick.LowerLimitPrice = f.LowerLimitPrice;        tick.Turnover = f.Turnover;        tick.HighestPrice = f.HighestPrice;        tick.LowestPrice = f.LowestPrice;        tick.SettlementPrice = f.SettlementPrice;        tick.OpenPrice = f.OpenPrice;        tick.ClosePrice = f.ClosePrice;        tick.PreClosePrice = f.PreClosePrice;        this.DicTick[tick.InstrumentID] = tick;        if (_OnRtnTick == null) return;        _OnRtnTick(this, new TickEventArgs        {            Tick = tick        });    }    private void CTPOnRspSubMarketData(ref CThostFtdcSpecificInstrumentField pSpecificInstrument, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)    {    }    private void CTPOnFrontDisconnected(int nReason)    {        this.IsLogin = false;        _OnRspUserLogout?.Invoke(this, new IntEventArgs { Value = nReason });        //SetCallBack();    }    private void HeartBeat()    {        int threeMinutes = 1000 * 60 * 3;        while (_doHeartBeatThread.IsBackground)        {            if (!this.IsLogin)            {                //SetCallBack();            }            Thread.Sleep(threeMinutes);        }    }    private void CTPOnRspError(ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)    {        _OnRtnError?.Invoke(this, new ErrorEventArgs { ErrorID = pRspInfo.ErrorID, ErrorMsg = pRspInfo.ErrorMsg });    }    private void CTPOnRspUserLogin(ref CThostFtdcRspUserLoginField pRspUserLogin, ref CThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)    {        //防止登录谬误后一直重连        //if (pRspInfo.ErrorID != 0)        //    _q.SetOnFrontConnected(null);        //else //失常登录时注册连贯事件(后续主动重连时可自行登录)        //{        //    this.IsLogin = true;

// _q.SetOnFrontConnected((DeleOnFrontConnected)AddDele(new DeleOnFrontConnected(CTPOnFrontConnected)));
// }

        this.IsLogin = true;        _OnRspUserLogin?.Invoke(this, new IntEventArgs { Value = pRspInfo.ErrorID });    }    private void CTPOnFrontConnected()    {        _OnFrontConnected?.Invoke(this, new EventArgs());    }    public override bool IsLogin { get; protected set; }    public override int ReqConnect()    {        _q.RegisterFront(this.FrontAddr);        return (int)_q.Init();        //_q.Init();                    //return (int)_q.Join(); //会造成阻塞    }    public override int ReqSubscribeMarketData(params string[] pInstrument)    {        int size = Marshal.SizeOf(typeof(IntPtr));        IntPtr insts = Marshal.AllocHGlobal(size * pInstrument.Length);        var tmp = insts;        for (int i = 0; i < pInstrument.Length; i++, tmp += size)        {            Marshal.StructureToPtr(Marshal.StringToHGlobalAnsi(pInstrument[i]), tmp, false);        }        return (int)_q.SubscribeMarketData(insts, pInstrument.Length);    }    public override int ReqUnSubscribeMarketData(params string[] pInstrument)    {        int size = Marshal.SizeOf(typeof(IntPtr));        IntPtr insts = Marshal.AllocHGlobal(size * pInstrument.Length);        var tmp = insts;        for (int i = 0; i < pInstrument.Length; i++, tmp += size)        {            Marshal.StructureToPtr(Marshal.StringToHGlobalAnsi(pInstrument[i]), tmp, false);        }        return (int)_q.UnSubscribeMarketData(insts, pInstrument.Length);    }    public override int ReqUserLogin()    {        return (int)_q.ReqUserLogin(BrokerID: this.Broker, UserID: this.Investor, Password: this.Password);    }    public override void ReqUserLogout()    {        this.IsLogin = false;        //下面的disconnect登记掉,须要被动调用此回调函数        _OnRspUserLogout?.Invoke(this, new IntEventArgs { Value = 0 });        //勾销连贯响应,防止重连后的再登录.(release中已解决)        //_q.SetOnFrontDisconnected(null);        //_q.SetOnFrontConnected(null);        _q.Release();    }}

}