量化交易系统开发-实时行情自动化交易-8.7.文华平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。
接下来会对于文华平台介绍。
文华财经量化交易服务平台(Wenhua Financial)是一款广受国内量化交易者和机构用户欢迎的交易工具。文华财经的量化平台集策略开发、实时行情、自动化交易、策略优化、回测模拟于一体,为用户提供了全面的量化交易解决方案。文华量化平台具备友好的用户界面、强大的行情分析工具,以及对多市场和多品种的兼容性,使其在国内期货和金融交易市场中占据重要地位。文华量化平台不仅适合初学者学习和使用,也能够满足专业交易员和机构对交易策略开发和执行的高要求。
1. 实例背景:基于MACD的趋势跟随策略
策略逻辑
MACD(移动平均线收敛发散)是期货市场中常用的趋势跟随指标。本策略基于MACD指标进行交易决策:
- 当MACD线由下向上穿过信号线(DIF > DEA)时,生成买入信号。
- 当MACD线由上向下穿过信号线(DIF < DEA)时,生成卖出信号。
适用市场
此策略适用于趋势性较强的期货品种,如沪铜(CU)、螺纹钢(RB)等。
2. 数据准备与环境配置
在文华财经平台上,开发策略需要使用其量化功能模块(如WH6)获取历史行情数据和进行策略回测。
# 导入文华量化库
from WH6Quant.api import *# 初始化数据
symbol = 'RB2301' # 期货合约代码
freq = '1m' # 时间周期,1分钟线
start_date = '2023-01-01'
end_date = '2023-11-01'# 获取历史行情数据
data = get_kline(symbol=symbol, freq=freq, start_date=start_date, end_date=end_date)# 数据格式预览
print(data.head())
数据字段说明:
datetime:时间戳open:开盘价high:最高价low:最低价close:收盘价volume:成交量
3. 策略开发
(1)计算MACD指标
在文华平台中,用户可以直接调用内置指标计算函数,或基于Python库自定义计算逻辑。
# 计算MACD指标
def calculate_macd(data, short=12, long=26, signal=9):"""计算MACD指标"""data['ema_short'] = data['close'].ewm(span=short).mean()data['ema_long'] = data['close'].ewm(span=long).mean()data['DIF'] = data['ema_short'] - data['ema_long']data['DEA'] = data['DIF'].ewm(span=signal).mean()data['MACD'] = (data['DIF'] - data['DEA']) * 2 # 柱状图return data# 应用指标计算
data = calculate_macd(data)
print(data[['datetime', 'close', 'DIF', 'DEA', 'MACD']].tail())
(2)生成交易信号
基于MACD的交叉生成买入和卖出信号。
# 生成交易信号
data['signal'] = 0
data.loc[data['DIF'] > data['DEA'], 'signal'] = 1 # 买入信号
data.loc[data['DIF'] <= data['DEA'], 'signal'] = -1 # 卖出信号
data['position'] = data['signal'].shift(1) # 次周期执行
4. 回测实现
回测用于评估策略在历史数据上的表现,计算收益、回撤等关键指标。
(1)计算策略收益
结合持仓信号和市场价格,计算策略每日收益率和累计净值。
# 策略收益计算
data['daily_return'] = data['close'].pct_change() # 每周期收益率
data['strategy_return'] = data['position'] * data['daily_return'] # 策略收益# 计算累计净值
initial_capital = 100000 # 初始资金
data['strategy_net'] = (1 + data['strategy_return']).cumprod() * initial_capital
data['benchmark_net'] = (1 + data['daily_return']).cumprod() * initial_capital
(2)回测结果分析
输出策略的关键绩效指标(KPI)。
# 关键指标计算
total_return = data['strategy_net'].iloc[-1] / initial_capital - 1
max_drawdown = (data['strategy_net'] / data['strategy_net'].cummax() - 1).min()
annual_return = (1 + total_return) ** (1 / (len(data) / 252)) - 1print(f"策略总收益率: {total_return:.2%}")
print(f"最大回撤: {max_drawdown:.2%}")
print(f"年化收益率: {annual_return:.2%}")
5. 性能可视化
绘制累计净值曲线以直观展示策略表现。
import matplotlib.pyplot as plt# 绘制净值曲线
plt.figure(figsize=(12, 6))
plt.plot(data['datetime'], data['strategy_net'], label='Strategy Net Value', color='blue')
plt.plot(data['datetime'], data['benchmark_net'], label='Benchmark Net Value', color='gray')
plt.title('Strategy vs Benchmark Performance')
plt.xlabel('Date')
plt.ylabel('Net Value')
plt.legend()
plt.show()
6. 参数优化与扩展
参数优化
通过调整MACD参数(短周期、长周期、信号周期),寻找最佳策略参数组合。
# 参数优化
best_params = None
best_performance = -float('inf')for short in range(8, 15):for long in range(20, 30):for signal in range(6, 12):data = calculate_macd(data, short=short, long=long, signal=signal)data['signal'] = 0data.loc[data['DIF'] > data['DEA'], 'signal'] = 1data.loc[data['DIF'] <= data['DEA'], 'signal'] = -1data['position'] = data['signal'].shift(1)data['strategy_return'] = data['position'] * data['daily_return']strategy_net = (1 + data['strategy_return']).cumprod() * initial_capitaltotal_return = strategy_net.iloc[-1] / initial_capital - 1if total_return > best_performance:best_performance = total_returnbest_params = (short, long, signal)print(f"最佳参数: {best_params}, 总收益率: {best_performance:.2%}")
策略扩展
- 多品种交易:在不同的期货品种上验证策略的普适性。
- 组合策略:结合其他指标(如RSI、布林带)增强策略效果。
- 风控优化:加入止损、止盈机制,控制风险。
7. 总结
通过上述实例,我们实现了一个基于MACD的趋势跟随策略:
- 策略开发:利用MACD生成交易信号。
- 回测分析:评估历史表现,验证策略有效性。
- 优化与扩展:通过参数调优提升策略表现。
文华平台的优势在于其强大的行情数据支持与策略实现能力。结合合理的交易逻辑、严谨的回测分析与持续优化,用户可以构建出稳健的量化交易策略,适用于实际期货交易市场。
相关文章:
量化交易系统开发-实时行情自动化交易-8.7.文华平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于文华平台介绍。 文华财经…...
美畅物联丨如何通过 FFmpeg 解码视频
FFmpeg是一款功能强大、在多媒体处理领域广泛应用的开源工具。它可以处理多种音频和视频格式,包含编码、解码、转码、流媒体处理等众多功能。前两天,我们在《美畅物联丨如何通过FFmpeg排查视频问题》一文中介绍了借助FFmpeg程序来辅助判断视频播放异常的…...
机器学习任务功略
loss如果大,训练资料没有学好,此时有两个可能: 1.model bias太过简单(找不到loss低的function)。 解决办法:增加输入的feacture,设一个更大的model,也可以用deep learning增加弹性…...
Web Worker 和 WebSocket的区别
Web Worker(消息传递机制) 定义:是为了在浏览器中提供多线程支持,允许 JavaScript 在后台线程运行,而不阻塞主线程。它非常适合执行耗时的计算任务或处理大量数据,避免主线程(通常是 UI 线程&a…...
JMeter实时性能压测可视化系统整合
一、相关工具简介: JMeter、Grafana 和 InfluxDB 结合实时地收集、分析和展示性能测试数据,进行更好地理解系统的性能表现,及时发现潜在问题并进行优化。 1,JMeter 实时生成性能数据,并将其发送到 InfluxDB 进行存储。2,InfluxDB 存储的数据。3,通过Grafana的仪表板,用…...
无限加载和懒加载及路由滚动及路由滚动不生效
这里写目录标题 列表无限加载懒加载定制路由滚动使用scrollBehavior不起效不管用的原因使用scrollTo来实现路由滚动elMain && elMain.scrollTo(...) 的作用是: 无限加载和懒加载的区别 列表无限加载 无限加载功能在现代网页和移动应用中广泛应用࿰…...
CSS底层基础:小白速来
1. CSS简介 CSS (Cascading Style Sheets) 是一种用来描述HTML或XML文档样式的语言。它使得开发者能够控制网页的布局和外观,包括字体、颜色、间距等。CSS通过选择器来指定要应用样式的元素,并定义这些元素的具体样式属性。 基本结构示例: …...
【MySQL 进阶之路】索引概述
第06章_索引 1.什么是索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查…...
【C++boost::asio网络编程】有关异步读写api的笔记
异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类,主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...
Elasticsearch 的存储与查询
Elasticsearch 的存储与查询 在搜索系统领域,数据的存储与查询是两个最基础且至关重要的环节。Elasticsearch(ES) 在这两方面进行了深度优化,使其在关系型数据库或非关系型数据库中脱颖而出,成为搜索系统的首选。 映射 (Mapping) 映射 (Ma…...
008静态路由-特定主机路由
按照如上配置,用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1,再经过R2 …...
SystemUI 下拉框 Build 版本信息去掉
需求及场景 去掉SystemUI 下拉框 Build 版本信息 如下图所示:去掉 12 (SP1A.201812.016) 了解 去掉之前我们先了解它是个什么东西:其实就是一个Build RTM 信息显示 Android_12_build_SP1A.210812.016 修改文件 /frameworks/base/packages/Syste…...
【JS】栈内存、堆内存、事件机制区别、深拷贝、浅拷贝
js中,内存主要分为两种类型:栈内存(stack)、堆内存(heap),两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构,栈内存是内存用…...
如何确保Java爬虫获得1688商品详情数据的准确性
在数字化商业时代,数据的价值日益凸显,尤其是对于电商平台而言。1688作为中国领先的B2B电子商务平台,提供了海量的商品数据接口,这些数据对于市场分析、库存管理、价格策略制定等商业活动至关重要。本文将详细介绍如何使用Java编写…...
【蓝牙通讯】iOS蓝牙开发基础介绍
1. iOS 蓝牙开发基础 在 iOS 中,蓝牙的操作主要是通过 Core Bluetooth 框架来实现。理解 Core Bluetooth 的基本组件和工作原理是学习 iOS 蓝牙开发的第一步。 核心知识点: Core Bluetooth 框架:这是 iOS 系统提供的专门用于蓝牙低功耗&am…...
Vue 90 ,Element 13 ,Vue + Element UI 中 el-switch 使用小细节解析,避免入坑(获取后端的数据类型自动转变)
目录 前言 在开发过程中,我们经常遇到一些看似简单的问题,但有时正是这些细节问题让我们头疼不已。今天,我就来和大家分享一个我在开发过程中遇到的 el-switch 使用的小坑,希望大家在使用时能够避免。 一. 问题背景 二. 问题分…...
echarts的双X轴,父级居中的相关配置
前言:折腾了一个星期,在最后一天中午,都快要放弃了,后来坚持下来,才有下面结果。 这个效果就相当是复合表头,第一行是子级,第二行是父级。 子级是奇数个时,父级label居中很简单&…...
RuoYi-Vue部署到Linux服务器(Jar+Nginx)
一、本地环境准备 源码下载、本地Jdk及Node.js环境安装,参考以下文章。 附:RuoYi-Vue下载与运行 二、服务器环境准备 1.安装Jdk 附:JDK8下载安装与配置环境变量(linux) 2.安装MySQL 附:MySQL8免安装版下载安装与配置(linux) 3.安装Redis 附:Redis下载安装与配置(…...
Linux firewalld常用命令
启动防火墙 systemctl start firewalld 停止防火墙 systemctl stop firewalld 防火墙开机自启动 systemctl enable firewalld 禁止防火墙开机自启动 systemctl disable firewalld 检查防火墙的状态 systemctl status firewalld 重新加载防火墙的配置 firewall-cmd -…...
Vue 组件之间的通信方式
Vue.js 中组件之间的通信是构建复杂应用的关键部分。以下是一些常见的Vue组件通信方式: 1. Props 和 Emit(父子组件通信) Props:父组件通过props向子组件传递数据。Emit:子组件通过emit触发事件,向父组件…...
你的 FlashAttention 真的在跑吗?几个简单方法确认
之前有个朋友在昇腾 NPU 上部署模型,按文档开了 --enable-flash-attn,跑起来也没报错。但他总觉得延迟不对——跟之前没开的时候差不多。他问我:怎么确认 FlashAttention 真的生效了?不会是静默降级了吧? 这个问题问得…...
Windows提权(一)———系统内核溢出漏洞提权
声明 本博客内容仅供技术学习与安全研究之用,严禁用于任何非法或未授权的活动。转载需注明出处。因不当使用导致的后果,作者不承担责任。 溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候…...
蛋白质基础模型:从AlphaFold2到Chai-1的范式跃迁
1. 项目概述:一场悄然发生的蛋白质结构预测范式迁移最近在实验室跑完第7轮Chai-1的微调任务后,我盯着屏幕上跳出来的pLDDT值曲线,突然意识到:我们正在经历的不是一次工具升级,而是一场底层建模逻辑的彻底重写。标题里提…...
通用人工智能(AGI)完整技术方案:以字序生命模型(WOLM)为认知内核的双脑协同架构
一、AGI的终极定义在讨论技术方案之前,先定义什么是AGI。当前主流的AGI定义,强调一个系统能在绝大多数人类能做的智力任务上达到或超越人类水平。这个定义隐含了一个假设:AGI的核心是“智力”——逻辑推理、知识储备、创造力。我们的定义不同…...
终结拟合式智能:记忆博弈心智架构重塑硅基生命进化逻辑
当前全球AGI研发赛道,正陷入一场难以破局的同质化内卷。无论是头部科技企业的超大参数模型,还是轻量化垂直AI产品,核心底层始终沿用Transformer概率拟合逻辑。这套技术体系虽然实现了人工智能的规模化落地,却从根源上锁死了AI的智…...
【Typescript】11-类抽象类与面向对象建模
类、抽象类与面向对象建模 TypeScript 不是一门纯粹的面向对象语言,但它对类系统的支持足够完整,足以覆盖很多工程场景。问题在于,很多人学到 class 之后,会误以为这就是组织 TypeScript 代码的默认方式。现实恰恰相反࿱…...
C++面试考点 头文件与实现文件形式
为什么C标准头文件没有所谓的.h后缀? 在一个源文件中,函数模板的声明与定义分离是可以的,即使把函数模板的实现放在调用 之下也是ok的,与普通函数一致。//函数模板的声明 template <class T> T add(T t1, T t2);…...
JMeter分布式压测原理与高可用集群搭建实战
1. 为什么单台JMeter跑不出真实流量——分布式压测不是“加机器”那么简单 你有没有试过用Jmeter对一个新上线的订单服务做压测,本地配了200个线程,结果TPS卡在80就上不去了,CPU才用了35%,网络IO几乎为零?我第一次遇到…...
LeagueAkari:5个智能功能提升你的英雄联盟游戏体验
LeagueAkari:5个智能功能提升你的英雄联盟游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟繁琐的客户端操作…...
2026年TOP5运营多年口碑平稳的金价查询app有哪些
前几天跟闺蜜约饭,她一坐下来就疯狂吐槽:前一周特意蹲了网上说的金价合适的时段,攒了好久的钱想去买那条种草了半年的金项链,结果到了线下门店才知道,当天大盘价已经涨了21块钱,比她查的那个三天没更新的小…...
