量化交易系统源码可售

一、项目概览

项目名称: TH8 - 量化交易系统

技术栈: C# + .NET Framework 4.7.2 + Windows Forms

语言版本:C# 7.3

UI框架: SunnyUI(Windows Forms美化库)

第三方依赖:Newtonsoft.Json, HQChart(策略脚本引擎DLL)

二、项目架构
2.1 整体架构图
复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        服务器端                                 │
├─────────────────────────────────────────────────────────────────┤
│  行情服务器         交易服务器                数据接口           │
└───────────────────────┬───────────────────────┬───────────────┘
                        │                       │
                        ▼                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                        网络通信层                               │
├─────────────────────────────────────────────────────────────────┤
│  HQSocket ────────── TradeSocket ────────── SocketGetData      │
│  (14字节头)          (13字节头)           (18字节头)            │
└───────────────────────┬───────────────────────┬───────────────┘
                        │                       │
                        ▼                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                        数据处理层                               │
├─────────────────────────────────────────────────────────────────┤
│  KlineManage ────────── KlineHistoryManage ────────── KlineHistory│
│  (实时K线生成)          (多合约管理)              (单合约存储)    │
└───────────────────────┬────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────────┐
│                        策略执行层                               │
├─────────────────────────────────────────────────────────────────┤
│  TCeLueObjManage ────────── TCeLueObj ────────── HQChart DLL    │
│       │                        │                              │
│       └────────── CeLueMACDDuoGongZhen (纯C#策略实现)           │
└───────────────────────┬────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────────┐
│                        交易执行层                               │
├─────────────────────────────────────────────────────────────────┤
│  FrmTrade (下单/持仓/委托/成交管理)                              │
│  TfrmTrade_Load → InitInfo → GetMoneyInfo/GetStorageList/...    │
└─────────────────────────────────────────────────────────────────┘
2.2 核心模块清单
复制代码
| 模块 | 文件 | 职责 |
|------|------|------|
| **网络通信** | `HQSocket.cs` | 行情数据接收,TCP连接,心跳检测 |
| | `TradeSocket.cs` | 交易指令执行,登录认证,下单 |
| | `SocketGetData.cs` | 备用数据获取通道 |
| **K线管理** | `KlineManage.cs` | 实时K线生成(12种周期) |
| | `KlineHistoryManage.cs` | 多合约K线数据管理 |
| | `KlineHistory.cs` | 单合约K线持久化(.DAT文件) |
| **策略系统** | `TCeLueObjManage.cs` | 策略管理器 |
| | `TCeLueObj.cs` | HQChart脚本策略引擎封装 |
| | `CeLueMACDDuoGongZhen.cs` | 纯C#实现的MACD多周期共振策略 |
| **交易界面** | `FrmTrade.cs` | 交易面板,下单,持仓管理 |
| **数据定义** | `Global.cs` | 全局数据结构和消息定义 |
| **全局状态** | `Common.cs` | 全局实例管理,初始化,工具方法 |
三、网络通信层深度分析
3.1 三套Socket协议对比
复制代码
| 特性 | HQSocket(行情) | TradeSocket(交易) | SocketGetData(备用) |
|------|-----------------|-------------------|---------------------|
| **协议头格式** | `aaaaaaaaaa` + 4位长度 | `aaaaaaaaaa` + 3位长度 | `aaaaaaaaaa` + 8位长度 |
| **协议头长度** | 14字节 | 13字节 | 18字节 |
| **心跳命令** | `"1;"` | `"50;"` | `"50;"` |
| **心跳间隔** | 8秒 | 8秒 | 8秒 |
| **超时时间** | 15秒无数据断开 | 15秒无数据断开 | 15秒无数据断开 |
| **重连间隔** | 8秒 | 5秒 | 5秒 |
| **接收缓冲区** | 2MB | 1MB | 1MB |
| **消息队列限制** | 1000条/批 | 20条/批 | 20条/批 |
3.2 行情协议消息格式

命令码定义:

复制代码
| 命令码 | 含义 | 数据格式 |
|--------|------|----------|
| `2` | 心跳返回 | `2;` |
| `10` | 实时行情 | `10;合约代码;时间戳;卖1-5价;卖1-5量;买1-5价;买1-5量;最新价;开盘价;收盘价;最高价;最低价;成交额;成交量;涨停;跌停;昨收;昨持仓;昨结算;市场代码;小数位;主力标志;内外盘;` |
| `11` | K线推送 | 已禁用 |
| `103` | K线历史数据 | `103;合约代码;时间戳;周期;开盘;收盘;最高;最低;成交量;成交额;昨收;` |
| `104` | 历史数据下载完成 | `104;错误码;消息;` |
| `105` | 补充数据 | 同103格式 |
| `106` | 补充数据完成 | `106;错误码;消息;合约代码;周期;开始时间;结束时间;` |
3.3 线程架构

每个Socket类包含三个独立线程:

  1. 接收线程(`RecvMsgThread`):负责从TCP Socket读取原始字节数据

  2. 分发线程(`DispatchDataThread`):负责协议解析和消息分发

  3. 检测线程(`CheckThread`):负责心跳检测和断线重连

四、K线数据处理链路
4.1 实时K线生成流程
复制代码
1. HQSocket接收实时行情(命令码10)
       ↓
2. DispatchDataThread解析数据,更新Common.gDictHeYue
       ↓
3. 调用KlineManage.OnRealData(code, hyInfo)
       ↓
4. 添加到ListHeYueInfo队列
       ↓
5. CreateKlineThread(2个并行线程)处理队列
       ↓
6. CreateKline()方法生成/更新K线
       ↓
7. KlineHistoryManage.AddData/UpdateData持久化
       ↓
8. 发送WM_LOCAL_MSG_KLINE消息通知主窗口
       ↓
9. KlinePush()触发策略执行
4.2 K线周期支持
复制代码
| 周期标识 | 周期值 | 时间粒度 |
|----------|--------|----------|
| `1m` | 4 | 1分钟 |
| `5m` | 5 | 5分钟 |
| `15m` | 6 | 15分钟 |
| `30m` | 7 | 30分钟 |
| `1H` | 8 | 1小时 |
| `2H` | 9 | 2小时 |
| `4H` | 10 | 4小时 |
| `D` | 0 | 日线 |
| `M` | 1 | 月线 |
| `Y` | 3 | 年线 |
4.3 K线时间计算逻辑

KlineManage.getKlineTime()` 根据时间戳和周期类型计算K线归属时间:

分钟级K线:根据分钟数组(M1/M5/M15/M30)找到最近的周期起点

小时级K线:根据小时数组(H1/H2/H4)找到最近的周期起点

日线:考虑跨天交易时段,判断当前时间属于第一天还是第二天的交易时段

月线/年线:直接取月初/年初时间

4.4 历史数据持久化

数据存储路径:kdata/{合约代码}/k_{合约}_{周期}.DAT

KlineHistoryManage 使用独立线程(threadSaveData)每60秒自动保存所有合约的K线数据。

五、策略执行系统
5.1 两套策略体系对比
复制代码
| 特性 | TCeLueObj(HQChart脚本引擎) | CeLueMACDDuoGongZhen(纯C#) |
|------|-----------------------------|----------------------------|
| **执行引擎** | HQChartDLL(外部DLL) | 纯C#代码 |
| **策略定义** | 脚本语言(类似通达信公式) | C#类配置 |
| **加载方式** | 从 `celue.dat` 文件读取 | 代码硬编码 |
| **触发时机** | K线完成时通过 `KlinePush` 触发 | 实时行情更新时触发 |
| **指标计算** | 脚本内调用系统函数 | 内置C#算法实现 |
| **风控系统** | 基本下单信号 | 完整风控体系(最大回撤、日亏损、移动止损等) |
5.2 TCeLueObj执行流程
复制代码
1. TCeLueObjManage.Init()从celue.dat加载策略
       ↓
2. 用户启动策略 → TCeLueObj.Start()
       ↓
3. K线完成时 → KlinePush() → TCeLueObj.Run()
       ↓
4. HQChartDLL.Run()执行脚本
       ↓
5. pHQChart_Success回调解析结果
       ↓
6. 识别BUY/SELL/SELLSHORT等输出变量
       ↓
7. 发送WM_LOCAL_MSG_CELUE_XIADAN消息到交易窗口
5.3 CeLueMACDDuoGongZhen策略详解
5.3.1 技术指标计算
复制代码
| 指标 | 参数 | 计算方法 |
|------|------|----------|
| **MACD** | Fast=12, Slow=26, Signal=9 | EMA12-EMA26=DIF, EMA(DIF,9)=DEA, MACD=(DIF-DEA)*2 |
| **RSI** | Period=14 | 平均上涨幅度/(平均上涨幅度+平均下跌幅度)*100 |
| **KDJ** | Period=9, K=3, D=3 | RSV=(C-L)/(H-L)*100, K=(K_prev*2+RSV)/3, D=(D_prev*2+K)/3, J=3K-2D |
| **布林带** | Period=20, StdDev=2 | SMA(20) ± 2*标准差 |
5.3.2 多周期共振机制

策略同时检查多个周期(默认1m/5m/15m/30m)的MACD趋势,要求至少3个周期方向一致才产生信号。

5.3.3 特色分析模块

时辰能量:基于中国十二时辰(子丑寅卯...)计算能量偏向,结合成交量和动量

九宫八卦:将价格区间划分为9个宫格(乾兑离震中巽坎艮坤),判断当前价格位置

5.3.4 风控体系
复制代码
| 风控类型 | 参数 | 说明 |
|----------|------|------|
| 最大回撤 | 20% | 超过阈值停止交易 |
| 日亏损限制 | 5% | 单日亏损超过阈值停止开仓 |
| 移动止损 | 1.5% | 盈利后动态调整止损位 |
| 时间止损 | 60分钟 | 持仓超过时间自动平仓 |
| 仓位控制 | 20% | 每笔仓位不超过资金的20% |
| 信号冷却 | 30秒 | 防止频繁发送信号 |
六、交易执行系统
6.1 FrmTrade核心功能
复制代码
| 功能 | 实现方法 |
|------|----------|
| 资金查询 | `GetMoneyInfo()` → HTTP接口 `GetUserMoney` |
| 持仓查询 | `GetStorageList()` → HTTP接口 `GetChiCangList` |
| 委托查询 | `GetWeiTuoList()` → HTTP接口 `GetWeiTuoList` |
| 成交查询 | `GetTradeList()` → HTTP接口 `GetTradeList` |
| 止盈止损 | `GetZhiYingSunList()` → TradeSocket命令 `35;` |
| 下单 | `BuyTrade()` → TradeSocket命令 `15;9;...` |
| 撤单 | `CancelWeiTuo()` → TradeSocket命令 `25;...` |
6.2 下单消息格式

开仓消息:"15;9;{goodID};{toOpen};{price};{directionCode};{ip};{priceType};"

止盈止损消息:"34;{goodID};{buySell};{setNum};{yingPrice};{sunPrice};{yingMoney};{sunMoney};{lb};{chaojia_price};{ip};"

6.3 价格类型支持
复制代码
| 类型 | 说明 |
|------|------|
| 市价 | 使用最新价下单 |
| 指定价 | 用户指定价格 |
| 对手价 | 买入用卖一价,卖出用买一价 |
七、线程安全架构
7.1 线程安全容器

项目使用自定义的线程安全容器:

复制代码
| 容器类型 | 用途 |
|----------|------|
| `LockLinkedList<T>` | 消息队列(ListNetData、持仓列表、委托列表等) |
| `LockList<T>` | 策略列表、本地条件单列表 |
| `LockDictionary<TKey, TValue>` | 合约字典、K线历史字典 |
7.2 使用模式
复制代码
// 标准读写模式
LinkedList<string> list = ListNetData.Lock();
try
{
    // 操作数据
}
finally
{
    ListNetData.UnLock();
}
7.3 多线程并行设计
复制代码
| 模块 | 线程数量 | 用途 |
|------|----------|------|
| KlineManage | 2个 | 并行生成K线,按合约ID取模分配 |
| KlineHistoryManage | 1个 | 定时保存数据 |
| Socket(每个) | 3个 | 接收、分发、检测 |
| TCeLueObjManage | 1个 | 策略管理主线程 |
八、消息通信机制
8.1 Windows消息定义
复制代码
| 消息常量 | 值 | 用途 |
|----------|-----|------|
| `WM_SHOW_INFO` | USER+10 | 显示初始化信息 |
| `WM_NET_MSG` | USER+101 | 交易网络消息 |
| `WM_NET_MSG_HQ` | USER+201 | 行情网络消息 |
| `WM_NET_MSG_GETDATA` | USER+202 | 备用数据网络消息 |
| `WM_LOCAL_MSG_KLINE` | USER+210 | K线数据更新 |
| `WM_LOCAL_MSG_CELUE_XIADAN` | USER+211 | 策略下单信号 |
8.2 消息传递方式

使用Windows API `SendMessage` 进行跨线程消息传递,数据通过 `Marshal.StructureToPtr` 序列化到非托管内存。

九、数据结构定义汇总
9.1 核心数据结构
复制代码
| 结构 | 文件 | 用途 |
|------|------|------|
| `ST_HeYueInfo` | Global.cs | 合约信息(行情+静态属性) |
| `ST_KlineDataInfo` | Global.cs | K线数据(OHLCV) |
| `ST_MoneyInfo` | Global.cs | 资金信息 |
| `ST_Storage_Info` | Global.cs | 持仓信息 |
| `ST_WeiTuo_Info` | Global.cs | 委托信息 |
| `ST_Trade_Info` | Global.cs | 成交信息 |
| `ST_ZhiYingSun_Info` | Global.cs | 止盈止损信息 |
| `ST_NetMsg` | Global.cs | 网络消息结构 |
| `ST_LocalMsg_Kline` | Global.cs | K线本地消息 |
| `ST_LocalMsg_Celue_Xiadan` | Global.cs | 策略下单消息 |
十、总结
10.1 项目核心能力
  1. 多市场支持:通过合约配置支持全球多个期货市场

  2. 实时行情处理:支持12种时间周期的实时K线生成

  3. 双策略引擎:同时支持HQChart脚本策略和纯C#策略实现

  4. 完整交易功能:下单、平仓、撤单、持仓管理、止盈止损

  5. 完善风控体系:最大回撤、日亏损限制、移动止损、时间止损

10.2 架构特点

多线程设计:数据接收、处理、存储分离,提高吞吐量

事件驱动:通过Windows消息机制实现模块解耦

本地持久化:K线数据本地文件存储,减少网络依赖

自动重连:所有Socket都具备断线自动重连机制

十一、效果展示

行情页面 K线窗口 策略编辑器,支持麦语言 策略1 策略2 指标自定义交易策略

自定义跟单系统

相关推荐
mykj15511 小时前
RWA与Web3区块链:一场“实体”与“数字”的双向奔赴
web3·区块链
m0_3801671417 天前
面向开发者的Top10加密货币数据API(2026年最新)
大数据·人工智能·区块链
2601_9594801517 天前
Moneta Markets亿汇:“比特币高位修复风险偏好”
区块链
m0_3801671418 天前
加密货币价格 API、市场数据 API 与 分析 API 有什么区别?
人工智能·ai·区块链
LedgerNinja18 天前
AEGET:提升决策效率,助力交易者建立清晰的交易体系
区块链
从心开始38218 天前
核心业务系统搬迁怎么安排最稳
交易·迁移·
2601_9619633818 天前
Spring Boot集成电子签章的7个典型问题与解决方案:从入门到生产级实践
大数据·人工智能·spring boot·python·区块链·智能合约
zhuhai_xigedian18 天前
物联网技术在源网荷储系统中的创新应用
大数据·运维·人工智能·区块链·能源
2601_9594801518 天前
Moneta Markets亿汇:“比特币长期预期继续升温”
区块链