量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。
接下来会对于Ptrade/恒生平台介绍。
Ptrade(恒生量化交易平台)是恒生电子推出的一站式量化交易解决方案,支持量化策略的开发、回测和实盘交易。平台以高效的数据处理能力和丰富的市场接入支持(股票、期货、期权等)受到专业投资者的青睐。其开发语言通常为Python或C++,并提供强大的策略开发框架和API。
本文将以“双均线策略”为例,展示如何使用Ptrade平台完成从策略开发到回测的全过程。
1. 策略简介:双均线策略
双均线策略是一种经典的趋势跟随型策略,主要通过两条均线(短期均线和长期均线)的交叉信号来判断市场趋势,并进行交易决策。
策略规则
- 买入条件:短期均线向上突破长期均线,产生“黄金交叉”信号。
- 卖出条件:短期均线向下跌破长期均线,产生“死亡交叉”信号。
优点与不足
- 优点:适合趋势行情,逻辑简单,适用范围广。
- 不足:在震荡市中易出现较多的虚假信号。
2. 策略开发
Ptrade平台支持通过Python语言编写量化交易策略。以下是实现双均线策略的核心代码。
(1)初始化策略
在策略初始化部分,设置参数、加载数据并定义交易标的。
# 导入必要模块
from ptrade.api import *# 初始化策略
def initialize(context):# 设置交易标的context.asset = '000001.SH' # 上证指数# 设置策略参数context.short_window = 5 # 短期均线周期context.long_window = 20 # 长期均线周期# 设置初始仓位context.position = 0log.info("策略初始化完成")
(2)生成交易信号
策略的核心逻辑基于短期均线与长期均线的交叉信号。
# 策略逻辑
def handle_data(context, data):# 获取历史数据hist = data.history(context.asset, 'close', context.long_window + 1, '1d')# 计算短期和长期均线short_ma = hist[-context.short_window:].mean()long_ma = hist.mean()# 获取当前持仓状态current_position = context.position# 买入逻辑if short_ma > long_ma and current_position == 0:order_percent(context.asset, 1.0) # 全仓买入context.position = 1log.info(f"买入信号触发: {context.asset}, 短期均线={short_ma}, 长期均线={long_ma}")# 卖出逻辑elif short_ma < long_ma and current_position > 0:order_percent(context.asset, 0) # 清仓context.position = 0log.info(f"卖出信号触发: {context.asset}, 短期均线={short_ma}, 长期均线={long_ma}")
3. 回测
Ptrade平台提供了高效的回测引擎,可以在历史数据上验证策略的有效性。
(1)配置回测环境
在运行回测之前,需要设置回测的基础参数,包括:
- 时间范围:如2015-01-01至2020-12-31。
- 初始资金:100,000元。
- 交易标的:上证指数。
def set_backtest_config(context):context.set_start_date('2015-01-01') # 回测起始日期context.set_end_date('2020-12-31') # 回测结束日期context.set_initial_cash(100000) # 初始资金context.set_benchmark('000001.SH') # 设置基准指数context.set_commission(0.0002) # 手续费context.set_slippage(0.002) # 滑点
(2)运行回测
运行策略回测后,平台会生成详细的绩效报告,包括收益率曲线、交易明细和风险指标。
4. 策略优化
(1)参数优化
通过网格搜索的方法优化短期和长期均线的窗口长度,找到最优参数组合。
# 参数优化
def optimize_parameters(context):best_params = Nonebest_performance = float('-inf')for short_window in range(3, 10):for long_window in range(15, 30):if short_window >= long_window:continue# 设置参数并运行回测context.short_window = short_windowcontext.long_window = long_windowperformance = run_backtest(context) # 假设有回测函数返回绩效if performance['annual_return'] > best_performance:best_performance = performance['annual_return']best_params = (short_window, long_window)log.info(f"最佳参数组合: 短期均线={best_params[0]}, 长期均线={best_params[1]}")
(2)加入风险管理
为策略添加止盈止损机制,控制极端行情下的风险。
# 风险管理
def handle_data_with_risk_control(context, data):current_price = data.current(context.asset, 'close')cost_basis = context.portfolio.positions[context.asset].cost_basis if context.position > 0 else None# 止盈止损逻辑if context.position > 0:profit_ratio = (current_price - cost_basis) / cost_basisif profit_ratio > 0.1 or profit_ratio < -0.05: # 止盈10%或止损5%order_percent(context.asset, 0) # 清仓context.position = 0log.info("触发止盈或止损,清仓")
相关文章:
量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于Ptrade/恒生平台介绍。 P…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
基于MATLAB的信号处理工具:信号分析器
信号(或时间序列)是与特定时间相关的一系列数字或测量值,不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号,而统计学家或金融定量分析师会使用时间序列这一术语。例如…...
Codeforces Round 784 (Div. 4)
题目链接 A. Division? 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;int ans;if(n > 1900) ans 1;else if(n > 1600) ans 2;else if(n > 1400) ans 3;else ans 4;cout << "Division " << ans << \n;}B. T…...
OpenNebula 开源虚拟平台,对标 VMware
Beeks Group 主要为金融服务提供商提供虚拟专用服务器和裸机服务器。该公司表示,转向 OpenNebula 不仅大幅降低了成本,还使其虚拟机效率提升了 200%,并将更多裸机服务器资源用于客户端负载,而非像以往使用 VMware 时那样用于虚拟机…...
软件项目标书参考,合同拟制,开发合同制定,开发协议,标书整体技术方案,实施方案,通用套用方案,业务流程,技术架构,数据库架构全资料下载(原件)
1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单&…...
Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1
文章目录 Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、安装配置Jenkins2.1 安装JDK…...
【Android】ARouter源码解析
本篇文章主要讲解了 ARouter 框架的源码分析,包括其初始化过程、核心方法等。 初始化 在使用ARouter的时候我们都会先进行初始化: ARouter.init(this);我们看下 init() 源码: public static void init(Application application) {// 检查…...
计算直线的交点数
主要实现思路 整体流程思路: 程序旨在解决给定平面上不同数量的直线(无三线共点),求出每种直线数量下所有可能的交点数量,并按要求格式输出的问题。整体通过初始化一个二维数组来存储不同直线数量与交点数量对应的存在…...
STM32基于HAL库的串口接收中断触发机制和适用场景
1. HAL_UART_Receive_DMA函数 基本功能 作用:启动一个固定长度的 DMA 数据接收。特点: 需要预先指定接收数据的长度(Size 参数)。DMA 会一直工作直到接收到指定数量的数据,接收完成后触发 HAL_UART_RxCpltCallback 回…...
java面试宝典
本文只摘抄部分宝典内容,完整宝典可以在打开下方链接,在网盘获取 ^ _ ^ 链接:java面试宝典 提取码: wxy1 复制这段内容后打开百度网盘手机App,操作更方便哦 链接: java前端面试宝典 提取码: wxy1 复制这段内容后打开百度网盘手机Appÿ…...
Scala—Slice(提取子序列)方法详解
Scala—Slice(提取子序列)方法详解 在 Scala 中,slice 方法用于从集合中提取一个连续的子序列(切片)。可以应用于多种集合类型,如 List、Array、Seq 等。 一、slice 方法的定义 slice 根据提供的起始索引…...
【电子通识】案例:USB Type-C USB 3.0线缆做直通连接器TX/RX反向
【电子通识】案例:连接器接线顺序评估为什么新人总是评估不到位?-CSDN博客这个文章的后续。最近在做一个工装项目,需要用到USB Type-C线缆做连接。 此前已经做好了线序规划,结果新人做成实物后发现有的USB Type-C线缆可用,有的不行。其中发现USB3.0的TX-RX信号与自己的板卡…...
【SKFramework框架核心模块】3-5、函数扩展模块
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…...
使用 EasyExcel 提升 Excel 处理效率
目录 前言1. EasyExcel 的优点2. EasyExcel 的功能3. 在项目中使用 EasyExcel3.1 引入依赖3.2 实体类的定义与注解3.3 工具类方法的实现3.4 在 Controller 中使用 4. 总结5. 参考地址 前言 在日常开发中,Excel 文件的处理是不可避免的一项任务,特别是在…...
【提高篇】3.7 GPIO(七,GPIO开发模型 一)
目录 一,开发模型 二,初始化函数 2.1 时钟使能 一,开发模型 通常我们在进行GPIO相关外设的开发时,往往遵循下面4个步骤,如下: 初始化函数 用于进行时钟设置、参数设置、IO设置、中断设置等。读处理函数 用于从外设读取数据。写处理函数 用于从向外设写数据。中断处理…...
Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物
前言 在前端开发中,优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标,Tree Shaking 就是其中一种非常重要的优化技术,它通过在编译阶段移除未被使用的代码模块,从而显著减小最终…...
angular19-官方教程学习
周日了解到angular已经更新到19了,想按官方教程学习一遍,工欲善其事必先利其器,先更新工具: 安装新版版本 卸载老的nodejs 20.10.0,安装最新的LTS版本 https://nodejs.org 最新LTS版本已经是22.12.0 C:\Program File…...
RocketMQ集群部署完整指南
前言 本文将详细介绍RocketMQ集群的部署流程,包括环境准备、安装配置、启动运维等各个方面。 一、环境准备 1.1 系统要求 64位操作系统,建议LinuxJDK 1.8及以上版本源码安装需要Maven 3.2.x1.2 下载RocketMQ 可从以下地址获取RocketMQ安装包: Apache官方开源地址: http://r…...
解决mysql 内存持续上涨问题
问题背景: 业务量不大,Mysql 内存持续上涨,虽然不是很明显,但随着时间慢慢增长,1~2个月左右内存达到80%一旦有一些执行缓慢的sql 内存会快速上去增加/修改大表的字段内存会快速上去 常规操作: Mysql 设置…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
