首页 > 其他分享 >如何利用量化交易平台获取实时行情数据进行分析之代码分享

如何利用量化交易平台获取实时行情数据进行分析之代码分享

时间:2023-08-17 11:33:13浏览次数:43  
标签:pInstrument int void 实时 new 量化 tick Marshal 交易平台

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

如何利用量化交易平台获取实时行情数据进行分析之代码分享_技术代码

通过开放的方式提供全球股票(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();
		}
	}
}

标签:pInstrument,int,void,实时,new,量化,tick,Marshal,交易平台
From: https://blog.51cto.com/u_16211854/7119989

相关文章

  • 量化交易系统的关键功能和特点
    程序化私募交易软件开发程序化私募交易系统是一款面向私募机构、操盘团队、资金方及高净值个人客户的一体化智能投资管理交易软件。系统提供云端选股及预警系统、分仓系统、交易下单系统、行情数据中台服务、半自动交易员管理系统、分布式回测引擎、投顾系统、绩效分析系统、实盘交......
  • Unity之如何计算实时帧率
    代码如下:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCalcFPSTool:MonoBehaviour{privatefloatm_UpdateInterval,m_FPS;floatUpdateInterval{set=>m_UpdateInterval=Mathf.Cla......
  • 三维模型OSGB格式轻量化压缩点云处理技术探讨
    三维模型OSGB格式轻量化压缩点云处理技术探讨  点云是一种常用的三维模型表示方法,由于其具有高精度、高保真度、易处理等优点,因此在很多领域都得到了广泛应用。但是,点云数据的存储量通常比较大,为了使点云数据更加易于传输和处理,需要进行轻量化处理。而OSGB格式是一种常见的......
  • 三维模型OSGB格式轻量化重难点分析
    三维模型OSGB格式轻量化重难点分析   在三维模型应用中,为了适应移动设备的硬件和网络限制等问题,OSGB格式轻量化处理已经成为一个重要的技术手段。但是,在实际应用中,OSGB格式轻量化仍然存在着一些重难点问题。下面将对这些问题进行分析。1、数据压缩与性能平衡数据压缩和......
  • 数字藏品交易平台软件
      数字藏品交易平台软件功能  随着互联网技术的不断发展,数字藏品已经成为了一种新兴的艺术品交易方式。数字藏品交易平台软件是连接收藏家、艺术家和投资者的重要工具,其主要功能包括以下几点:  1.数字藏品平台的创建与管理  数字藏品交易平台软件可以帮助用户创......
  • Rsync实时同步工具
    一、rsync是什么rsync(remotesynchronize)是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。除此......
  • 三维模型OSGB格式轻量化纹理压缩关键技术分析
    三维模型OSGB格式轻量化纹理压缩关键技术分析  在三维模型应用中,纹理是一个十分重要的因素,可以使得模型更加真实、精细。随着移动设备和网络传输速度的限制,纹理数据也需要进行轻量化处理,而OSGB格式纹理压缩是一种常见且有效的技术方法。下面将详细介绍OSGB格式纹理压缩的关......
  • 三维模型OSGB格式轻量化顶点压缩主要技术方法分析
    三维模型OSGB格式轻量化顶点压缩主要技术方法分析在三维模型应用中,轻量化处理是提高数据传输效率、减少渲染时间和优化用户体验的重要手段。而OSGB格式是一种常见的三维模型格式,在进行轻量化处理时,顶点压缩是一种常用的技术方法。本文将分析OSGB格式顶点压缩的主要技术方法。1......
  • Python 优雅的使用 subprocess.Popen 获取实时输出,以及中止 subprocess
    #-*-coding:utf-8-*-importshleximportosimportsignalimporttimeimportthreadingfromsubprocessimportPopen,PIPEdefrun_command(command):process=Popen(shlex.split(command),stdout=PIPE)st=time.time()whileTrue:ou......
  • 实时阴影技术
    实时阴影硬阴影对于点光源来说,它只会产生硬阴影。shadowmaping基本原理点光源的ShadowMap算法,分为两个PASSPASS0:从光源位置看向场景,并且计算出光源到能看到的最近的物体的深度图,并将深度存起来作为ShadowMap//shadowVertex.glsl//...voidmain(void){......