中金所股指期权介绍以及保证金计算
在量化交易的版图中,股指期权(Stock Index Options)不仅提供了非线性的收益结构,更是机构投资者进行波动率管理与风险对冲的核心工具。中金所(CFFEX)的股指期权合约(IO/HO/MO)不仅交易规则复杂,其保证金计算机制更是风控系统开发中的一道坎。本文从程序员的视角出发,解析期权与期货的联动逻辑,并从技术层面解决如何从 CTP 接口中计算期权合约保证金,最终构建一个兼顾盘中估算与盘后结算风控的 C# 资金计算模型。 …
在量化交易的版图中,股指期权(Stock Index Options)不仅提供了非线性的收益结构,更是机构投资者进行波动率管理与风险对冲的核心工具。中金所(CFFEX)的股指期权合约(IO/HO/MO)不仅交易规则复杂,其保证金计算机制更是风控系统开发中的一道坎。本文从程序员的视角出发,解析期权与期货的联动逻辑,并从技术层面解决如何从 CTP 接口中计算期权合约保证金,最终构建一个兼顾盘中估算与盘后结算风控的 C# 资金计算模型。 …
在构建低延迟交易系统时,全速盘口(OrderBook)的实时重建是数据处理链路中计算密度最高、对延迟最敏感的环节之一。本文将详细阐述 FastMarketDataManager 组件的演进历程,分析从单线程模型到静态分片,再到基于消息队列的动态负载均衡架构的技术决策过程,重点介绍如何在保证数据严格时序的前提下,摒弃了传统的加锁同步方案,转而利用消息队列的 FIFO 特性,设计了基于控制指令(Command Pattern)的异步迁移流程,解决热点股票引发的队头阻塞(Head-of-Line Blocking)问题。 …
代码比较功能在很多版本管理工具中都存在,比如Git和TortoiseSVN,Compare Beyond中也有。这个功能可以很方便的帮助我们查看代码的变更。目前这些工具都是简单的基于文本差异的比较。然而在有些时候,我们需要基于语义的比较,比如在代码中,我只是调整了方法的前后顺序、添加了一些注释、删除了一些语句之间的空格,或是将一个大的类使用partial关键字,拆分到多个源文件中。在这种情况下,传统的基于简单文本进行代码比较的方式则失去了应有的作用。我们需要保证代码的逻辑和正确定不变即可,而不关心代码的书写格式,比如行号,空格,注释,格式化这些。本文基于Roslyn实现了一个简单的基于语义的C#代码比较工具。 …
在之前实现端口转发的几种方法这篇文章中,介绍了三种实现端口转发的方法,本质就是建立一个TCP中继: tcpReplay.jpg TCP中继 但要完整实现一个TCP转发或者代理(Tcp Relay),还是有很多细节需要考虑。在《Linux多线程服务端编程:使用muduo C++网络库》这本书中,作者提到了以下需要考虑的问题: 建立连接。TCPRelay在接受client的连接C之后才向server发起连接S,那么在S建立之前,从C收到的数据如何处理?要不要暂存起来? 并发连接的管理。上图中只画了一个client,实际上TcpRelay可以服务多个client,这两边的并发连接如何管理,如何防止串话(cross talk?) 连接断开。client和server都可能主动断开连接。当client主动断开连接C时,TcpRelay应该立刻断开S。当server主动断开连接S时, …
MSChart(System.Windows.Forms.DataVisualization.Charting.Chart)是Visual Studio中的一个功能强大的图表控件。用它绘制基础图标非常方便,但是要构建一个功能完善的K线图绘制工具,其默认的行为有时会显得捉襟见肘,要实现一个常用的专业的金融软件里面那样的K线图,则需要进行很多细节调整,包括:像素级的精确定位、智能的坐标轴刻度、平滑准确的交互式缩放,这些细节的打磨都需要仔细考虑。 这篇文章总结了开发K线图时遇到的这些问题,基本上能实现一个功能强大,体验较好的专业K线图组件。 一、 搭建图表结构 一般的K线图都包含价格区和成交量区双区域,其中价格区间是包含高开低收的K线图,成交量区是K线对应的成交量柱状图。一些交易软件在成交量区下面还会包含一些证券分析指标图,比如MACD,KDJ等之类的图。 多图表区域布局与对齐 多图表区域布局的 …
在现代软件架构中,无论是模块化的单体应用、面向服务的架构(SOA),还是日益普及的微服务部署,进程间通信(Inter-Process Communication, IPC)都已从一个简单的实现细节,演变为影响系统性能、安全性与可维护性的基石性架构决策。在此背景下,选择一种合适的 IPC 机制,不仅关乎数据传输的效率,更直接决定了整个系统的响应能力、资源消耗和技术债务。本文介绍了Windows平台上三种主流的IPC通讯方式:命名管道(Named Pipes), TCP/IP 套接字(TCP/IP Sockets),和内存映射文件(Memory-Mapped Files, MMF),给出了在一对一通讯场景下的企业级实现,并基于BenchmarkDotNet,使用乒乓测试的方式测试了三者的性能,结果显示,在本机IPC模式下,小字节的数据(16B,256B)传输下,内存映射文件的传输效率具有绝 …
在前文浅谈内存映射文件中详细介绍了什么是内存映射文件(Memory-Mapped File, MMF),以及内存映射文件的用法。在其诸多应用中,很重要的一个就是进程间通讯(Inter-Process Communication,IPC)。内存映射文件允许将文件内容直接映射到进程的虚拟地址空间,使得应用程序能够像访问内存一样访问文件数据。但要正确和高效地使用内存映射文件进行进程间通讯则需要一些技巧,它需要处理多个进程对同一块内存区域进行高效的读写问题,这里就自然涉及到竞争和同步。本文首先介绍了一个简单的一对一的使用MMF进行进程间单向通讯的例子,紧接着指出其中的低效,然后通过引入环形队列数据结构来分隔读和写,从而达到移除锁的使用,进而大幅提高效率。最后在此基础上介绍了一对一双向通讯,以及一对多通讯的实现思路。 …
内存映射文件(Memory-Mapped File, MMF)允许将文件内容直接映射到进程的虚拟地址空间,使得应用程序能够像访问内存一样访问文件数据。这种机制通过操作系统虚拟内存管理器(Virtual Memory Manager, VMM)的深度集成,绕过了传统I/O操作中固有的数据复制和系统调用开销,从而在特定场景下实现数量级的性能提升。对于开发那些需要在I/O性能上达到极致的系统(如数据库、大数据分析平台、金融交易系统)而言,深入理解并掌握MMF是不可或缺的关键技能。 从传统I/O到内存映射的转变 传统的文件I/O,如通过FileStream进行的操作,其本质是指令驱动的。开发者通过Read、Write、Seek等命令,显式地请求操作系统在内核缓冲区和用户空间缓冲区之间移动数据 。这个过程涉及多次数据复制和频繁的上下文切换,是典型I/O瓶颈的根源。 相比之下,内存映射文件是一种状态驱 …
本文通过一个时间同步服务的具体案例,深入探讨了Windows服务在“快速启动”模式下出现的“伪运行”问题。该问题的典型症状是:服务设置为自动启动,在“关机”再开机后,其状态显示为“正在运行”,却没有执行其OnStart方法中的关键启动任务(如首次时间同步)。文章剖析了此现象的根本原因在于Windows的快速启动机制。该机制通过休眠并恢复系统内核及服务进程来加速开机,这个过程会完全跳过OnStart方法,导致服务从一个过时的、无效的内存状态中“假醒”,成为“僵尸服务”。为解决此问题,文章提供了一套完整的排查与解决方案。首先,介绍了如何通过正确配置Windows事件日志来进行有效诊断,并指出了创建事件源的权限要点。其次,说明了如何通过禁用快速启动来快速验证问题根源。最终,文章给出了最健壮的根本性解决方案:在C#服务代码中重写OnPowerEvent方法,使其能够响应系统的Suspend …
即便是给一个对象的属性赋上与它当前完全相同的值,相关的“已更改”(XXXChanged)事件依然被触发了。一个典型的例子就是在使用 System.Data.DataTable 或System.Configuration.ApplicationSettingsBase时。研究源码发现,ApplicationSettingsBase 和 DataTable 的“赋值即触发”行为,并非缺陷,而是.NET框架中一个优雅且实用的状态驱动事件模式的体现。它将数据容器从简单的值存储器提升为强大的状态机,极大地简化了数据持久化和同步的复杂性。它选择牺牲微不足道的判断性能,来换取核心功能(状态跟踪)的绝对可靠性。理解了其“关注状态,而非价值”的核心思想,并洞悉其源码实现后,我们就能根据实际场景,明智地选择是利用还是“修正”这一行为,从而编写出更健壮、更高效的.NET应用程序。 …