diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1126d3..257efa4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,543 +1,3 @@
-# 3.9.0版本
+# 3.9.0
-## 新增
-
-1. 迅投研数据服务vnpy_xt,支持股票、期货、期权、债券、基金历史数据获取
-2. vnpy_ib增加对CBOE和CBOT交易所的支持、对指数期权的支持
-3. vnpy_rqdata增加对于88A2连续次主力合约的支持
-4. vnpy_wind增加广期所和上期能源交易所的数据支持
-
-## 调整
-
-1. vnpy_sopt升级3.7.0版本API
-2. vnpy_portfoliostrategy回测引擎支持交易日参数annual_days
-3. K线合成器(BarGenerator)移除对于Tick时间戳的检查过滤逻辑,交由用户层负责控制过滤
-4. vnpy_ib收到期权合约数据后,自动查询其切片行情数据
-5. vnpy_paperaccount实现对于IB接口合约的特殊路由处理
-6. 接口封装升级更新pybind11到2.11.1版本:vnpy_ctp、vnpy_sopt、vnpy_tora
-7. vnpy_ctp过滤不支持的委托状态推送
-8. vnpy_mysql兼容无数据库写入权限情况下的数据表初始化
-9. vnpy_chartwizard支持关闭单个图表标签页
-10. vnpy_portfoliostrategy移除策略后同时清除对应的策略状态缓存数据
-11. vnpy_portfoliostrategy调整每日盈亏清算对象开盘持仓数据的初始化方式
-12. 策略模块遗传优化函数增加ngen_size和max_workers参数
-13. vnpy_cta
-
-
-## 修复
-
-1. 修复vnpy_tora接口中的委托部分撤单状态映射缺失
-2. 修复vnpy_wind查询日线历史数据时数值存在NaN的问题
-3. 修复vnpy_mongodb的Tick汇总数据的条数统计错误
-4. 修复vnpy_chartwizard对于升级后的vnpy_spreadtrading价差行情显示问题
-5. 修复vnpy_ctastrategy回测成交记录为空时的报错
-6. 修复vnpy_ctastrategy策略初始化时,历史数据重复推送调用on_bar的问题
-
-
-# 3.8.0版本
-
-## 新增
-
-1. K线合成器(BarGenerator)增加对日K线的合成支持
-2. 基于华鑫奇点柜台的C++ API重构vnpy_tora,实现VeighNa Station加载支持
-3. 新增vnpy_ib对于期权合约查询、波动率和希腊值等扩展行情数据的支持
-
-## 调整
-
-1. vnpy_rest/vnpy_websocket限制在Windows上改为必须使用Selector事件循环
-2. vnpy_rest/vnpy_websocket客户端关闭时确保所有会话结束,并等待有异步任务完成后安全退出
-3. vnpy_ctp升级6.6.9版本API
-4. vnpy_ctp支持大商所的1毫秒级别行情时间戳
-5. vnpy_tqsdk过滤不支持的K线频率查询并输出日志
-6. vnpy_datamanager增加数据频率下按交易所显示支持,优化数据加载显示速度
-7. vnpy_ctabacktester如果加载的历史数据为空,则不执行后续回测
-8. vnpy_spreadtrading采用轻量级数据结构,优化图形界面更新机制
-9. vnpy_spreadtrading价差子引擎之间的事件推送,不再经过事件引擎,降低延迟水平
-10. vnpy_rpcservice增加对下单返回委托号的gateway_name替换处理
-11. vnpy_portfoliostrategy策略模板增加引擎类型查询函数get_engine_type
-12. vnpy_sec更新行情API至1.6.45.0版本,更新交易API版本至1.6.88.18版本
-13. vnpy_ib更新10.19.1版本的API,恢复对于数字格式代码(ConId)的支持
-14. 没有配置数据服务或者加载模块失败的情况下,使用BaseDatafeed作为数据服务
-15. 遗传优化算法运行时,子进程指定使用spawn方式启动,避免数据库连接对象异常
-16. 合约管理控件,增加对于期权合约的特有数据字段显示
-
-## 修复
-
-1. 修复vnpy_datarecorder对于新版本vnpy_spreadtrading价差数据的录制支持
-2. 修复vnpy_algotrading条件委托算法StopAlgo全部成交后状态更新可能缺失的问题
-3. 修复vnpy_ctastrategy策略初始化时,历史数据重复推送调用on_bar的问题
-4. 修复vnpy_wind查询日线历史数据时,数值存在NaN的问题
-
-
-# 3.7.0版本
-
-## 新增
-
-1. 新增沪股通和深股通交易所枚举值
-2. 增加vnpy_tap对于Linux系统的支持
-3. 增加vnpy_rqdata对于新型主力合约数据支持(切换前一日收盘价比例复权)
-
-## 调整
-
-1. vnpy_ctastrategy/vnpy_ctabacktester加载策略类时,过滤TargetPosTemplate模板
-2. vnpy_ctp连接登录过程中,只有在授权码错误的情况下,才禁止再次发起认证
-3. vnpy_uft增加对广期所GFEX的支持
-4. vnpy_tqsdk增加对于output日志输出功能的支持
-5. vnpy_dolphindb允许指定用户自行配置具体的数据库实例
-6. vnpy_rqdata优化对于郑商所期货和期权合约的查询代码转换规则
-7. vnpy_rqdata增加对广期所GFEX的支持
-8. vnpy_portfoliostrategy增加回测爆仓检查
-9. vnpy_portfoliostrategy策略模板增加合约乘数查询函数get_size
-10. vnpy_portfoliostrategy回测加载日线和小时线数据时,不使用分段加载
-
-## 修复
-
-1. 修复vnpy_rpcservice中,RPC接口对于推送数据的vt前缀相关字段错误问题
-2. 修复vnpy_mini中,对于INE交易所今昨仓位的特殊处理
-3. 修复vnpy_datamanager中,批量数据更新时缺失output函数的问题
-4. 修复vnpy_spreadtrading中,回测加载数据时优先从数据服务获取历史数据的问题,改为优先从本地数据库加载
-
-
-# 3.6.0版本
-
-## 新增
-
-1. 新增vnpy_ctp的Mac系统支持(M1/M2)
-
-## 调整
-
-1. BaseDatafeed的相关功能函数增加output入参用于输出日志
-2. 修改相关数据服务模块适配output参数:vnpy_rqdata/vnpy_ifind/vnpy_wind/vnpy_tushare
-3. 修改相关策略应用模块适配output参数:vnpy_ctastrategy/vnpy_ctabacktester/vnpy_portfoliostrategy/vnpy_spreadtrading/vnpy_datamanager
-3. OffsetConverter增加对于SHFE/INE合约的锁仓模式支持
-4. 在OmsEngine中添加全局的OffsetConverter功能,不再需要各AppEngine自行维护
-5. 添加CTA策略模块在执行参数优化时的最大进程数量限制参数:vnpy_ctastrategy/vnpy_ctabacktester
-6. 增加穷举优化算法运行过程中基于tqdm的进度条输出
-7. 增加遗传优化算法运行过程中的迭代次数进度输出
-8. 增加vnpy_optionmaster模块的期权产品对应标的合约的匹配函数,不再限制产品范围
-9. 升级vnpy_tts的dll链接库,解决openctp升级导致的资金不显示的问题
-10. 修改vnpy_ctastrategy使用vnpy.trader.database中统一定义的时区来加载数据
-11. 增加vnpy_ctastrategy策略模板的合约乘数查询函数get_size
-12. 增加vnpy_spreadtrading回测中统计绩效时对于爆仓情况的检查
-13. 增加vnpy_scripttrader基于vt_symbol和direction查询持仓数据的函数
-14. 修改vt_positionid的字符串内容,增加gateway_name前缀标识
-
-## 修复
-
-1. 修复异常捕捉钩子threading_excepthook的参数错误问题
-2. 修复vnpy_ib获取历史数据时的异常失败问题
-3. 修复vnpy_rest/vnpy_websocket中aiohttp的代理参数proxy传空时必须为None的问题
-4. 修复vnpy_optionmaster模块的Greeks监控表行数设置不足的问题
-5. 修复vnpy_rqdata查询股票期权数据报错的问题
-6. 修复vnpy_rqdata中RqdataGateway获取期货指数和连续合约信息时错误的问题
-7. 修复vnpy_portfoliostrategy中,从缓存文件恢复数据,导致defaultdict变成dict的问题
-
-
-# 3.5.0版本
-
-## 新增
-
-1. 新增基于米筐RQData的跨市场行情数据接口RqdataGateway
-2. 新增东方财富证券EMT柜台交易接口vnpy_emt
-
-## 调整
-
-1. 调整vnpy_algotrading模块设计(模板、引擎),只支持单合约算法执行交易
-2. 优化vnpy_algotrading的算法状态控制,增加状态枚举值,算法支持暂停和恢复运行
-3. 升级vnpy_hft接口支持HFT国君统一交易网关的2.0版本API
-4. 优化vnpy_portfoliostrategy的策略模板,支持持仓目标调仓交易模式
-
-## 修复
-
-1. 修复后台线程异常捕捉钩子函数,对于Python 3.7的语法兼容性问题
-2. 修复vnpy_mysql加载历史数据时存在时段重复的问题
-3. 修复vnpy_ib由于TWS客户端升级导致的委托失败问题
-4. 修复vnpy_rest/vnpy_websocket对Python 3.10后asyncio的支持
-5. 修复vnpy_sopt由于流控导致的委托失败时,返回【提交中】状态委托的问题
-
-
-# 3.4.0版本
-
-## 新增
-
-1. 新增杰宜斯资管系统交易接口vnpy_jees
-
-## 调整
-
-1. 开启vnpy.rpc的pyzmq连接keepalive机制,避免在复杂网络环境下闲置连接的断开
-2. 移除vnpy_rpcservice中服务端的EVENT_TIMER定时事件推送
-3. 调整vnpy_postgresql采用批量方式写入数据,提高效率
-4. 添加VeighNa Trader中的子线程异常捕捉(需要Python>=3.8)
-5. 调整vnpy_ib接口查询历史K线数据时,对外汇和贵金属均采用中间价(而非成交价)
-6. 增加vnpy_ctastrategy对于回测过程中资金爆仓(小于等于0)情况的检查
-7. 优化vnpy_webtrader模块的加密鉴权,支持web进程关闭重启
-
-## 修复
-
-1. 修复vnpy.rpc模块对于23.0以上版本pyzmq的NOBLOCK兼容性问题
-2. 修复vnpy_taos由于TDengine版本升级,出现d的一系列兼容问题
-3. 修复vnpy_datamanager刷新数据汇总信息显示时,老数据点移除失败的问题
-
-
-
-# 3.3.0版本
-
-## 新增
-1. 新增数据库组件vnpy.trader.database中的TickOverview对象
-2. 新增掘金仿真环境交易接口vnpy_gm
-3. BaseData基础数据类型增加extra字段(字典类型),用于传送任意相关数据
-
-## 调整
-1. 使用Python内置的zoneinfo库替换三方的pytz库
-2. 调整相关交易接口、数据服务接口、数据库适配器、应用模块,使用新的ZoneInfo对象来标识时区信息
-3. 数据库适配器接口vnpy.trader.database写入数据时,新增流式写入参数stream,提高行情录制性能
-
-
-# 3.2.0版本
-
-## 新增
-1. 添加广州期货交易所枚举值字段GFEX
-2. 新增CTP期权(ETF)穿透式测试接口vnpy_sopttest
-3. 新增Currency.CAD(加元)枚举值
-4. 新增Exchange.TSE(多伦多交易所)和Exchange.AMEX(美洲交易所)枚举值
-5. 新增vnpy_taos,涛思数据TDengine时序数据库适配器
-5. 新增vnpy_timescaledb,TimescaleDB时序数据库适配器
-
-## 调整
-1. 更新vnpy_ctp/vnpy_ctptest支持广州期货交易所
-2. 更新vnpy_tora的现货API接口到最新版本:API_Python3.7_交易_v4.0.3_20220222
-3. 更新vnpy_tora的期权API接口到最新版本:API_Python3.7_v1.3.2_20211201
-4. 更新vnpy_esunny/vnpy_tap添加关闭接口时对于API退出函数的调用
-5. 移除vnpy_ctastrategy/vnpy_ctabacktester/vnpy_optionmaster的反向合约支持
-6. 增加vnpy_ib对于沪股通、深股通、多伦多交易所、美洲交易所的支持
-7. 增加vnpy_ib对于指数行情数据的支持
-8. 添加vnpy_ctastrategy策略交易管理界面的策略实例查找功能
-
-## 修复
-
-1. 修复vnpy_mongodb中K线数据量统计的问题(使用新的count_documents函数)
-2. 修复由于PySide6对象销毁先于__del__调用,导致的BaseMonitor衍生组件无法自动保存界面状态的问题
-
-
-
-# 3.1.0版本
-
-## 新增
-1. 新增恒生云UF2.0证券仿真环境交易接口vnpy_uf
-2. 新增火象投教仿真环境交易接口vnpy_hx
-
-## 调整
-1. 升级tzlocal库的版本到4.2,消除get_localzone()函数的warning
-2. 完善代码中函数和变量类型提示
-3. 使用QtCore.Signal代替老的QtCore.pyqtSignal
-4. 优化vnpy_rohon接口的委托成交相关细节功能
-5. 更新vnpy_xtp到2.2.32.2.0版本XTP API,支持上交所新债系统
-6. 优化vnpy_mongodb的数据写入速度,基于pymongo 4.0版本的批量写入功能
-7. 增加vnpy_ctp对于委托函数返回值为非0(请求发送失败)状态的处理
-8. 对vnpy_ctastrategy和vnpy_ctabacktester的策略模板下拉框中内容,改为基于首字母排序
-
-## 修复
-1. 修复vnpy_optionmaster模块希腊值监控组件的数据刷新问题
-2. 修复vnpy_mongodb由于时间戳的时区信息确实,导致的数据加载范围问题
-3. 修复vnpy_tts的sdist源代码打包缺失lib文件的问题
-4. 修复vnpy_rqdata由于查询返回数据为NaN导致的解析问题
-
-
-# 3.0.0版本
-
-## 调整
-1. 移除api、gateway、app子模块的目录
-2. 移除requirements.txt对于插件的默认依赖
-3. 简化重构rpc子模块,定位于可靠环境下跨进程通讯(本机、局域网)
-4. 移除rpc子模块对于鉴权的支持
-5. 调整rpc子模块中的心跳机制的实现方式
-6. 移除基于QScintilla开发的代码编辑器,改用VSCode打开代码
-7. 优化MainWindow主窗口中,对于QAction按钮图标的加载逻辑
-8. MainEngine添加交易接口时,支持自定义接口名称
-
-## 修复
-1. 使用非原生窗口菜单栏,修复Linux/Mac下【配置】按钮不显示的问题
-
-
-# 2.9.0版本
-
-## 新增
-1. 新增顶点HTS柜台交易接口vnpy_hts
-
-## 调整
-1. 移除恒生期权hsoption接口
-2. vnpy_webtrader增加对于自定义监听地址和端口的支持
-3. vnpy_mongodb锁定pymongo的依赖版本为3.12.3
-4. vnpy_udata安装脚本中添加hs_udata库的依赖
-5. vnpy_uft升级使用3.7.2.4版本的恒生API接口
-
-## 剥离
-2. 将国泰君安证券统一接入网关交易接口剥离到vnpy_hft项目中
-3. 将顶点飞创交易接口剥离到vnpy_sec项目中
-4. 将RPC服务和接口剥离到vnpy_rpcservice项目中
-
-## 修复
-1. 修复vnpy_tora撤单时,由于撤单编号和委托编号冲突导致的撤单失败问题
-2. 修复vnpy_tora股票委托状态中【未成交】状态的错误映射问题
-3. 修复vnpy_ctabacktester中,回测开始日期编辑框的数据缓存问题
-4. 修复vnpy_udata中,分段下载数据时,可能进入死循环的问题
-5. 修复vnpy_udata中,修复下载的数据量为空时,出现的异常报错问题
-6. 修复vnpy_dolphindb中,合约名带有符号时数据无法读取问题
-
-
-# 2.8.0版本
-
-## 新增
-1. 新增东证OST柜台交易接口vnpy_ost
-2. 增加投资组合策略模块的策略参数优化功能
-
-## 修复
-1. 修复部分C++接口模块剥离后,遗留的安装脚本编译代码导致的报错问题
-2. 修复vnpy_xtp订阅深交所行情后,可能出现的闪退问题
-3. 修复vnpy_tushare部分数据字段为None时,导致的数据错误
-4. 修复vnpy_mini,在夜盘换日时上期所行情时间戳的日期字段误差问题
-5. 修复vnpy_uft的ETF期权合约信息解析缺失的问题
-6. 修复vnpy_wind下载数据存在缺失时的N/A解析问题
-7. 修复vnpy_webtrader的html静态文件缺失的问题
-8. 修复vnpy_dolphindb存储Tick数据时的数据类型问题
-9. 修复vnpy_dolphindb读取数据为空时的BUG
-10. 修复vnpy_esunny查询黄金TD合约的合约乘数为0的问题
-11. 修复vnpy_ctastrategy策略初始化读取布尔值false失败的问题
-12. 修复vnpy_rohon的期权合约字段赋值错误的问题
-13. 修复vnpy_leveldb的Linux安装依赖库问题
-
-## 调整
-1. 移除老版本基于requests库的RestClient客户端
-2. 移除老版本基于websocket-client库的WebsocketClient客户端
-3. vnpy_tts增加对上交所和深交所股票模拟交易的支持
-4. 移除vnpy_ctp的期权询价指令支持
-5. 增加vnpy_ctp的授权码验证失败后,避免重复操作的功能
-6. 优化vnpy_uft的断线重连行情订阅逻辑
-7. 增加vnpy_arctic对于用户名和密码的鉴权功能
-8. 增加vnpy_mini对于股指期权的支持
-
-## 剥离
-1. 将华鑫奇点交易接口剥离到vnpy_tora项目中,并升级到4.0版本
-2. 将飞马交易接口剥离到vnpy_femas项目中
-3. 将金仕达黄金接口剥离到vnpy_ksgold项目中
-4. 将投资组合策略模块剥离到vnpy_portfoliostrategy项目中
-5. 将Excel RTD模块剥离到vnpy_excelrtd项目中
-6. 将本地仿真模拟交易模块剥离到vnpy_paperaccount项目中
-
-# 2.7.0版本
-
-## 新增
-1. 新增天软数据服务项目vnpy_tinysoft
-2. 新增同花顺iFinD数据服务项目vnpy_ifind
-3. 新增dYdx交易接口vnpy_dydx
-4. 新增万得Wind数据服务项目vnpy_wind
-5. 新增PortfolioStrategy专用的PortfolioBarGenerator
-
-## 调整
-1. 移除KasiaGateway
-4. 移除MarketRadarApp
-5. 算法交易模块中移除套利和网格两个非执行类算法
-6. vnpy_tushare数据服务,增加持仓量和成交额字段
-8. vnpy_datamanager数据管理器,查询的K线信息按合约代码排序显示
-13. vnpy_dolphindb优化数据的加载解析速度
-14. vnpy_influxdb采用pandas解析CSV数据,提高整体速度
-
-## 修复
-1. 修复vnpy_ctp的CtpGateway,在夜盘换日时上期所行情时间戳的日期字段误差问题
-2. 修复vnpy_arctic的数据重复写入时出现的错误覆盖问题
-
-## 剥离
-1. 将InteractiveBrokers交易接口剥离到vnpy_ib项目中
-2. 将飞鼠交易接口剥离到vnpy_sgit项目中
-3. 将易盛外盘交易接口剥离到vnpy_tap项目中
-4. 将直达期货交易接口剥离到vnpy_da项目中
-5. 将算法交易模块剥离到vnpy_algotrading项目中
-6. 将脚本交易模块剥离到vnpy_scripttrader项目中
-7. 将交易组合管理模块剥离到vnpy_portfoliomanager项目中
-
-
-# 2.6.0版本
-
-## 新增
-1. 增加双边报价业务的发送和撤销函数功能
-2. 增加双边报价监控UI组件
-3. 增加用于对接数据库的抽象接口vnpy.trader.database
-4. 新增基于Arctic的MongoDB数据库接口项目vnpy_arctic
-5. 新增LevelDB数据库接口项目vnpy_leveldb
-6. 新增DolphinDB数据库接口项目vnpy_dolphindb
-7. 增加用于对接数据服务的抽象接口vnpy.trader.datafeed
-8. 新增TuShare数据服务项目vnpy_tushare
-8. 新增恒生UData数据服务项目vnpy_udata
-8. 新增天勤TQSDK数据服务项目vnpy_tqsdk
-8. 新增CoinAPI数据服务项目vnpy_coinapi
-
-## 调整
-1. 移除批量委托和批量撤单相关的函数功能
-2. 移除老虎证券交易接口TigerGateway
-3. 移除鑫管家交易接口XgjGateway
-4. 移除AlgoTrading算法交易模块对于金纳算法服务的支持
-5. RestClient增加对操作系统代理配置的支持
-6. RestClient和WebsocketClient的默认异常处理逻辑由抛出异常修改为打印输出
-7. 价差交易模块移除对反向合约、线性价差、开平字段的支持
-8. 价差交易模块优化对灵活价差的支持,优化价差行情推送过滤判断
-9. 价差交易算法停止时,等待全部委托结束、各条腿平衡后,再结束算法
-
-## 修复
-1. 修复在Linux/Mac系统上,运行多进程优化时的进程启动错误
-2. 修复WebsocketClient由于心跳机制不完善,导致的频繁断线问题
-
-## 剥离
-1. 将米筐数据接口剥离到vnpy_rqdata项目中,并升级到2.9.38版本
-2. 将行情录制模块剥离到vnpy_datarecorder项目中
-3. 将K线图表模块剥离到vnpy_chartwizard项目中
-4. 将SQLite数据库接口剥离到vnpy_sqlite项目中
-5. 将MySQL数据库接口剥离到vnpy_mysql项目中
-6. 将PostgreSQL数据库接口剥离到vnpy_postgresql项目中
-7. 将MongoDB数据库接口剥离到vnpy_mongodb项目中
-8. 将InfluxDB数据库接口剥离到vnpy_influxdb项目中
-13. 将期权波动率交易模块剥离到vnpy_optionmaster项目中
-
-
-# 2.5.0版本
-## 新增
-1. 新增TTS交易系统(兼容CTP的仿真交易环境)的接口vnpy_tts(6.5.1)
-2. 新增易盛启明星/北斗星兼容交易API的接口vnpy_esunny(1.0.2.2)
-3. 新增BarData和TickData的成交额turnover字段
-
-## 调整
-1. 将SpreadTrading模块策略初始化时的K线价差数据加载,改为优先通过RQData查询数据
-2. 在MainWindow的AboutDialog中,基于importlib_metadata模块来获取版本信息
-3. 隐藏所有对话框右上角的【?】按钮
-4. 将易盛外盘TapGateway的合约信息,从行情接口获取改为交易接口获取(避免外盘合约size为0的问题)
-5. 改进VeighNa Trader的异常捕捉对话框弹出方式,避免多次重复报错情况下的程序卡死崩溃
-
-## 修复
-1. 修复Linux下安装时,对于已经剥离的XTP API的自动编译操作
-2. 修复PortfolioManager的UI组件,对于成交事件监听类型错误的BUG
-3. 修复vnpy_rest下的Response对象缺乏text字段导致的BUG
-4. 修复RestClient,代理端口信息传空时,导致底层连接出错的BUG
-6. 修复ArrayManager的Aroon指标计算输出结果顺序错误的BUG
-7. 修复数据库管理器读写TickData时,由于缺少对localtime字段处理导致的BUG
-
-## 剥离
-1. 将融航接口剥离到vnpy_rohon项目中,并升级到6.5.1版本
-2. 将CTP MINI接口剥离到vnpy_mini项目中,并升级到1.5.6版本
-3. 将CTP期权接口剥离到vnpy_sopt项目中
-4. 将恒生UFT柜台极速API接口剥离到vnpy_uft项目中
-
-
-# 2.4.0版本
-
-## 新增
-1. 新增TickData的本地时间戳字段local_time(不带时区信息)
-2. 新增基于asyncio和aiohttp实现的协程异步REST API客户端vnpy_rest项目
-3. 新增基于asyncio和aiohttp实现的协程异步Websocket API客户端vnpy_websocket项目
-4. 新增基于多进程模式的遗传算法优化功能
-5. 新增XTP的API封装中,行情登录函数对于本地网卡地址的参数支持
-
-## 调整
-2. 剥离CTA策略模块下的穷举和遗传优化算法到vnpy.trader.optimize模块下
-3. 遗传算法优化完成后,输出所有回测过的参数对应结果(而不只是最优结果)
-4. CTA策略引擎加载策略文件时,增加模块重载的操作,使得任何策略文件修改可以立即生效
-5. CTA策略引擎扫描特定目录下的策略文件时,使用glob函数(替换原有的os.walk),避免对子目录中文件的错误加载
-6. 将CTA策略模块剥离到vnpy_ctastrategy项目中
-7. 将CTA回测模块剥离到vnpy_ctabacktester项目中
-8. 将XTP接口剥离到vnpy_xtp项目中,并升级到2.2.27.4版本
-9. 将事前风控模块剥离到vnpy_riskmanager项目中
-10. 将数据管理模块剥离到vnpy_datamanager项目中
-
-## 修复
-2. 修复MySQL和PostgreSQL数据库管理器删除K线数据时出错的问题
-3. 修复基于aiohttp的RestClient和WebsocketClient,事件循环停止后重新启动失败的问题
-7. 修复CtaBacktester基于Tick级别数据进行参数优化时,启动优化失败的问题
-8. 修复ToraStockGateway和ToraOptionGateway,调用下单函数时没有返回委托号的问题
-9. 修复InfluxDB数据管理器,导入数据时时间字段解析错误的问题
-
-# 2.3.0版本
-
-## 修复
-1. 修复IbGateway断线重连后,没有自动订阅之前已订阅的合约行情问题
-2. 修复CTA模块的净仓交易模式中,部分平仓部分开仓时,开仓部分下单错误的问题
-6. 修复CtpGateway对于FAK和FOK委托指令的处理错误问题
-10. 修复IbGateway,查询历史数据由于传参错误导致的查询失败问题
-11. 修复IbGateway,当要查询的合约历史数据不存在时卡死的问题
-12. 修复IbGateway,查询返回的合约乘数(字符串)未作转换导致的上层应用问题
-14. 修复BarGenerator,在合成小时K线时部分情况下遗漏分钟K线收盘价更新的问题
-15. 修复UftGateway,在连接ETF期权服务器时无法订阅行情的问题
-16. 修复UftGateway,在连接ETF期权服务器时,对于包含毫秒的委托时间戳处理错误的问题
-
-## 调整
-1. 修改CTA模块的净仓交易模式,支持上期所和能交所的今昨仓拆分下单
-2. 调整组合策略模块的回测引擎K线回放逻辑,当某个时间点K线数据缺失时,推送给策略的K线字典中不对其进行向前补齐
-3. 将CTP接口和API封装,剥离到vnpy_ctp项目中
-4. 将CTP穿透式测试接口和API封装,剥离到vnpy_ctptest项目中
-
-## 新增
-1. 新增DataManager在导入CSV文件时,对于时间戳时区的选择功能
-2. 新增CtaStrategy模块的策略移仓助手功能,实现一键式期货换月移仓支持
-
-
-# 2.2.0版本
-
-## 修复
-1. 修复DataManager查询数据库中K线数据范围时,开始和结束日期相反的问题
-6. 修复PostgreSQL数据库对接层中,save_tick_data函数由于访问interval导致保存出错的问题
-7. 修复DataRecorder模块中add_bar_recording下保存录制用合约配置错误的问题
-8. 修复PostgreSQL数据库对接层中,由于事务执行失败导致的后续报错问题,创建数据库对象时设置自动回滚模式(autorollback=True)
-9. 修复DataManager自动更新数据时,查询数据范围由于调用老版本函数导致的错误
-10. 修复RQData下载获取的历史数据浮点数精度问题
-11. 修复BarGenerator在合成N小时K线时,收盘价、成交量、持仓量字段缺失的问题
-12. 修复K线图表底层组件ChartWidget当绘制数据较少时,坐标轴时间点显示重复的问题
-13. 修复SpreadTrading模块生成的价差盘口数据的时区信息缺失问题
-14. 修复IbGateway的现货贵金属行情数据缺失最新价和时间戳的问题
-15. 修复BarGenerator在合成小时级别K线时,成交量字段部分缺失的问题
-16. 修复vnpy.rpc模块启用非对称加密后无法正常退出的问题
-
-## 调整
-1. 修改vnpy.chart下ChartItem为按需绘制,大幅缩短图表第一次显示出来的耗时
-2. 修改IbGateway的历史数据查询功能,包括所有可用时间(即欧美晚上的电子交易时段)
-3. 修改DataRecorder的数据入库为定时批量写入,提高录制大量合约数据时的写入性能
-
-## 新增
-1. 新增IbGateway连接断开后的自动重连功能(每10秒检查)
-2. 新增双边报价业务相关的底层数据结构和功能函数
-3. 新增开平转换器OffsetConverter的净仓交易模式
-4. 新增CtaStrategy模块策略模板的委托时的净仓交易可选参数
-5. 新增CtaStrategy模块回测引擎中的全年交易日可选参数
-6. 新增ChartWizard模块对于价差行情图表的显示支持
-7. 新增MarketRadar模块的雷达信号条件提醒功能
-
-# 2.1.9.1版本
-
-## 修复
-1. 修复RestClient中,因为pyopenssl.extract_from_urllib3引起的兼容性问题
-
-## 调整
-1. 调整OptionMaster模块中,期权链数据结构搜索平值行权价的算法,不再依赖标的物合约
-
-## 新增
-1. 新增OptionMaster模块使用合成期货作为定价标的合约的功能
-
-
-# 2.1.9版本
-
-## 修复
-1. 修复BarGenerator的小时线合成时,出现同一个小时的K线重复推送两次的问题
-2. 修复遗传算法优化时,因为lru_cache缓存导致的新一轮优化结果不变的问题
-3. 修复RestClient发起请求时,由于requests库底层使用OpenSSL导致的WinError 10054 WSAECONNRESET的问题
-5. 修复程序中频繁捕捉到异常时,异常捕捉对话框反复执行导致卡死的问题
-7. 修复活动委托监控组件ActiveOrderMonitor,保存CSV时会将所有委托数据一起保存的问题
-8. 修复XtpGateway重复发起登录操作时,出现的系统崩溃问题
-9. 修复XtpGateway的股票市价委托类型映射错误问题
-
-## 调整
-1. 对XTP接口的行情价格数据基于合约最小价格跳动进行取整,资金保留2位小数
-2. BaseMonitor保存CSV文件时,表头改为图形界面显示的中文(之前是数据的字段名英文)
-3. 初始化TWAP算法时,对每轮委托数量取整到合约最小交易数量
-4. 将原vnpy.trader.database中的数据库客户端拆分到独立的vnpy.database模块下
-5. 对SQLite/MySQL/PostgreSQL/MongoDB/InfluxDB客户端进行代码重构优化,增加K线数据整体情况BarOverview查询功能
-
-## 新增
-1. 新增BaseMonitor数据监控UI组件(以及其子类),自动保存列宽的功能
-2. 增加华鑫奇点ToraGateway对于FENS服务器连接和资金账户登录的支持,之前只支持前置机连接和用户代码登录
-4. 增加InfluxDB数据库客户端vnpy.database.influx对于Tick数据储存和加载的支持
\ No newline at end of file
+1. First release of VeighNa Crypto
\ No newline at end of file
diff --git a/README_ENG.md b/README_ENG.md
deleted file mode 100644
index 2f6d830..0000000
--- a/README_ENG.md
+++ /dev/null
@@ -1,290 +0,0 @@
-# By Traders, For Traders.
-
-
-
-
-
-
-
-
-
-
-
-
-
-VeighNa is a Python-based open source quantitative trading system development framework, officially released in January 2015, has grown step by step into a full-featured quantitative trading platform with 6 years of continuous contributions from the open source community, and currently has many users from domestic and international financial institutions, including: hedge funds, investment banks, futures brokers, university research institutions, proprietary trading companies, etc.
-
-The new "VeighNa Full Practical Advance" online course series has been launched on the official WeChat account [**VeighNa开源量化**], covering CTA strategies (completed), options volatility trading (being updated) and more. To purchase, please scan the QR code below and click the [Advanced Course] button in the menu bar to.
-
-
-
-
-
-If you have any questions about using VeighNa for secondary development (strategies, modules, etc.), please check the [**VeighNa Project Documentation**](https://www.vnpy.com/docs/cn/index.html). If you can't solve it, please go to the [Questions and Help] section of the [**Official Community Forum**](https://www.vnpy.com/forum/) forum for help, or share your experience in the [Experience Sharing] section!
-
-For financial institution users of VeighNa, a special [VeighNa Institutional Users Group] (QQ group number: 676499931) has been created to share issues related to institutional applications, such as: interbank market access, asset management O32 system, distributed deployment, etc. Please note that this group is only open to financial institution users, please specify: Name - Institution - Department when joining the group.
-
-## Functional Features
-
-1. Full-featured quantitative trading platform (vnpy.trader) that integrates a variety of trading interfaces and provides simple and easy-to-use APIs for specific strategy algorithm and function development, for quickly building quantitative trading applications required by traders.
-
-2. Trading interfaces (vnpy.gateway) covering all domestic and international trading varieties.
-
- * Domestic market
-
- * CTP ([ctp](https://www.github.com/vnpy/vnpy_ctp)): Domestic futures and options
-
- * CTP Mini ([mini](https://www.github.com/vnpy/vnpy_mini)): domestic futures, options
-
- * CTP Securities ([sopt](https://www.github.com/vnpy/vnpy_sopt)): ETF options
-
- * FEMAS ([femas](https://www.github.com/vnpy/vnpy_femas)): domestic futures
-
- * UFT ([uft](https://www.github.com/vnpy/vnpy_uft)): domestic futures, ETF options
-
- * Esunny ([esunny](https://www.github.com/vnpy/vnpy_esunny)): domestic futures, Gold TD
-
- * APEX XSpeed ([sec](https://www.github.com/vnpy/vnpy_sec)): ETF options
-
- * APEX HTS ([hts](https://www.github.com/vnpy/vnpy_hts)): ETF options
-
- * XTP ([xtp](https://www.github.com/vnpy/vnpy_xtp)): domestic securities (A shares), ETF options
-
- * TORA ([tora](https://www.github.com/vnpy/vnpy_tora)): domestic securities (A shares), ETF options
-
- * Guotai Junan ([hft](https://www.github.com/vnpy/vnpy_hft)): domestic securities (A shares)
-
- * SGIT ([sgit](https://www.github.com/vnpy/vnpy_sgit)): spot precious metal, domestic futures
-
- * KsGold ([ksgold](https://www.github.com/vnpy/vnpy_ksgold)): spot precious metal
-
- * Rohon ([rohon](https://www.github.com/vnpy/vnpy_rohon)): futures management
-
- * Jees ([jees](https://www.github.com/vnpy/vnpy_jees)): futures management
-
- * ComStar ([comstar](https://www.github.com/vnpy/vnpy_comstar)): interbank fixed-income market
-
- * TTS ([tts](https://www.github.com/vnpy/vnpy_tts)): domestic futures (simulation)
-
- * Overseas market
-
- * Interactive Brokers ([ib](https://www.github.com/vnpy/vnpy_ib)): global securities, futures, options, foreign exchange, etc.
-
- * Esunny 9.0 ([tap](https://www.github.com/vnpy/vnpy_tap)): global futures
-
- * Direct Futures ([da](https://www.github.com/vnpy/vnpy_da)): global futures
-
- * Special Applications
-
- * RPC service ([rpc](https://www.github.com/vnpy/vnpy_rpcservice)): inter-process communication interface for distributed architecture
-
-3. Out-of-the-box trading applications for various quantitative strategies (vnpy.app).
-
- * [cta_strategy](https://www.github.com/vnpy/vnpy_ctastrategy): CTA strategy engine module, which allows users to perform fine-grained control over the withdrawal behavior of delegates during the operation of CTA-type strategies while maintaining ease of use (reducing trading slippage, implementing high-frequency strategies)
-
- * [cta_backtester](https://www.github.com/vnpy/vnpy_ctabacktester): CTA strategy backtester module, no need to use Jupyter Notebook, directly use the graphical interface to directly carry out strategy backtester analysis, parameter optimization and other related work
-
- * [spread_trading](https://www.github.com/vnpy/vnpy_spreadtrading): spread trading module, support custom spreads, real-time calculation of spread quotes and positions, support semi-automatic spread algorithm trading and fully automatic spread strategy trading two modes
-
- * [option_master](https://www.github.com/vnpy/vnpy_optionmaster): option trading module, designed for the domestic options market, supports a variety of option pricing models, implied volatility surface calculation, Greek value risk tracking and other functions
-
- * [portfolio_strategy](https://www.github.com/vnpy/vnpy_portfoliostrategy): portfolio strategy module, designed for trading multi-contract quantitative strategies (Alpha, option arbitrage, etc.) at the same time, providing historical data backtesting and live automatic trading functions
-
- * [algo_trading](https://www.github.com/vnpy/vnpy_algotrading): algorithm trading module, providing a variety of commonly used intelligent trading algorithms: TWAP, Sniper, Iceberg, BestLimit, etc.
-
- * [script_trader](https://www.github.com/vnpy/vnpy_scripttrader): script strategy module, designed for multi-standard portfolio trading strategies, also can be directly in the command line to achieve REPL instructions in the form of trading, does not support the backtest function
-
- * [paper_account](https://www.github.com/vnpy/vnpy_paperaccount): Simulation trading module, pure localization of simulation trading functions, based on the real-time quotes obtained from the trading interface for commission aggregation, providing commission transaction push and position records
-
- * [chart_wizard](https://www.github.com/vnpy/vnpy_chartwizard): K-line chart module, based on RQData data service (futures) or trading interface (digital currency) to obtain historical data, and combined with Tick push to display real-time market changes
-
- * [portfolio_manager](https://www.github.com/vnpy/vnpy_portfoliomanager): portfolio module, for all kinds of fundamental trading strategies, based on separate strategy sub-accounts, providing automatic tracking of trading positions and real-time profit and loss statistics
-
- * [rpc_service](https://www.github.com/vnpy/vnpy_rpcservice): RPC service module, allowing a VeighNa Trader process to be started as a server, serving as a unified routing channel for quotes and trades, allowing multiple clients to connect at the same time, realizing a multi-process distributed system
-
- * [data_manager](https://www.github.com/vnpy/vnpy_datamanager): Historical data management module, view the existing data in the database through the tree directory, select any time period data to view the field details, support CSV file data import and export
-
- * [data_recorder](https://www.github.com/vnpy/vnpy_datarecorder): Quotes recording module, based on the graphical interface for configuration, according to the demand for real-time recording Tick or K-line quotes to the database, for strategy backtesting or live initialization
-
- * [excel_rtd](https://www.github.com/vnpy/vnpy_excelrtd): Excel RTD (Real Time Data) real-time data service, based on pyxll module to achieve real-time push updates of various data (quotes, contracts, positions, etc.) in Excel
-
- * [risk_manager](https://www.github.com/vnpy/vnpy_riskmanager): risk management module, providing statistics and restrictions on rules including trade flow control, number of orders placed, active orders, total number of cancelled orders, etc., effectively realizing front-end risk control functions
-
- * [web_trader](https://www.github.com/vnpy/vnpy_webtrader): The web service module is designed according to the requirements of B-S architecture, and implements a web server that provides active function call (REST) and passive data push (WebSocket)
-
-
-4. Python trading API interface package (vnpy.api), providing the underlying docking implementation of the above trading interface.
-
- * REST Client ([rest](https://www.github.com/vnpy/vnpy_rest)): The high-performance rest API client based on coroutine process asynchronous IO which adopts the programming model of event message cycle to support the sending of high concurrent real-time transaction requests
-
- * Websocket Client ([websocket](https://www.github.com/vnpy/vnpy_websocket)): The high-performance websocket API client based on coroutine process asynchronous IO supports which sharing event loops with REST Client to avoid multi-threaded performance loss caused by GIL
-
-
-5. simple and easy-to-use event-driven engine (vnpy.event), which is the core of event-driven trading program
-
-6. standardized management client (vnpy.database) interfacing with various databases.
-
- * SQL class
-
- * SQLite ([sqlite](https://www.github.com/vnpy/vnpy_sqlite)): lightweight single file database, no need to install and configure data service programs, default option of vnpy.py, suitable for novice users
-
- * MySQL ([mysql](https://www.github.com/vnpy/vnpy_mysql)): the world's most popular open source relational database, extremely rich documentation, and can replace other high NewSQL compatible implementations (such as TiDB)
-
- * PostgreSQL ([postgresql](https://www.github.com/vnpy/vnpy_postgresql)): more feature-rich open source relational database, support for new features through extension plug-ins, only recommended for skilled users
-
- * NoSQL classes
-
- * DolphinDB ([dolphindb](https://www.github.com/vnpy/vnpy_dolphindb)): A high-performance distributed temporal database developed by Zhejiang Zhiyu Technology Co., Ltd. is especially suitable for low latency or real-time tasks with high speed requirements
-
- * Arctic ([arctic](https://www.github.com/vnpy/vnpy_arctic)): The high-performance financial temporal database developed by quantitative hedge fund Man AHL based on mongodb which adopts performance optimization schemes such as partitioned storage and lz4 compression to achieve higher reading and writing efficiency than mongodb
-
- * MongoDB ([mongodb](https://www.github.com/vnpy/vnpy_mongodb)): non-relational database based on distributed file storage (bson format), built-in memory cache of hot data provides faster read and write speeds
-
- * InfluxDB ([influxdb](https://www.github.com/vnpy/vnpy_influxdb)): non-relational database specially designed for time-series data, columnar data storage provides high read/write efficiency and peripheral analysis applications
-
- * LevelDB ([leveldb](https://www.github.com/vnpy/vnpy_leveldb)): The high-performance key/value database launched by Google which realizes the process memory storage engine based on LSM algorithm, and supports billions of levels of massive data
-
-7. Adapter interfaces for various data services:
-
- * RQData ([rqdata](https://www.github.com/vnpy/vnpy_rqdata)): stocks, futures, options, funds, bonds, gold spot
-
- * UData ([udata](https://www.github.com/vnpy/vnpy_udata)): stock, futures, options
-
- * TuShare ([tushare](https://www.github.com/vnpy/vnpy_tushare)): stocks, futures, options, funds
-
- * Wind ([wind](https://www.github.com/vnpy/vnpy_wind)): stocks, futures, options, funds, bonds
-
- * Tinysoft ([tinysoft](https://www.github.com/vnpy/vnpy_tinysoft)): stocks, futures, options, funds, bonds
-
- * iFinD ([ifind](https://www.github.com/vnpy/vnpy_ifind)): stocks, futures, options, funds, bonds
-
- * TQSDK ([tqsdk](https://www.github.com/vnpy/vnpy_tqsdk)): futures
-
-
-8. Standard component for inter-process communication (vnpy.rpc) for implementing complex trading systems in distributed deployments
-
-9. Python high-performance K-line charts (vnpy.chart), supporting large data volume chart display and real-time data update functions
-
-10. [Community Forum](http://www.vnpy.com) and [Zhihu Blog](http://zhuanlan.zhihu.com/vn-py), which include the development tutorial of VeighNa project and the research on the application of Python in the field of quantitative trading, etc.
-
-11. The official communication group 262656087 (QQ), with strict management (regular purging of long-term diving members), and the membership fee will be donated to the VeighNa community fund.
-
-## Environment preparation
-
-* We recommend using the Python distribution [VeighNa Studio-2.9.0](https://download.vnpy.com/veighna-studio-2.9.0.exe), which is built with the latest version of VeighNa framework and VeighNa Station quantitative management platform, specifically created by the VeighNa team for quantitative trading. Manual installation
-* Supported system versions: Windows 10 or above/Windows Server 2016 or above/Ubuntu 20.04 LTS
-* Supported Python version: Python 3.7 64-bit (**Note that it must be Python 3.7 64-bit version**)
-
-## Installation steps
-
-Download the latest version from [here](https://github.com/vnpy/vnpy/releases), unzip it and run the following command to install it.
-
-**Windows**
-
-```
-install.bat
-```
-
-**Ubuntu**
-
-```
-. install.sh
-```
-
-**Macos**
-
-```
-bash install_osx.sh
-```
-
-## User's Guide
-
-1. Register a CTP Demo account at [SimNow](http://www.simnow.com.cn/) and get the broker code and the trading quotes server address at [this page](http://www.simnow.com.cn/product.action).
-
-2. Register at [VeighNa community forum](https://www.vnpy.com/forum/) to get the VeighNa Station account password (the forum account password is)
-
-3. Launch VeighNa Station (a shortcut will be created automatically on your desktop after installing VeighNa Studio), enter the account password from the previous step and login
-
-4. Click on the **VeighNa Trader** button at the bottom and start your trading!
-
-Attention.
-
-* Please do not close VeighNa Station during the running of VeighNa Trader (it will exit automatically)
-* For flexible configuration of quantitative trading application components, please use **VeighNa Trader**
-
-## Script Run
-
-In addition to the graphical start-up method based on VeighNa Station, you can also create run.py in any directory and write the following sample code.
-
-```Python
-from vnpy.event import EventEngine
-from vnpy.trader.engine import MainEngine
-from vnpy.trader.ui import MainWindow, create_qapp
-from vnpy_ctp import CtpGateway
-from vnpy_ctastrategy import CtaStrategyApp
-from vnpy_ctabacktester import CtaBacktesterApp
-
-def main():
- qapp = create_qapp()
-
- event_engine = EventEngine()
- main_engine = MainEngine(event_engine)
-
- main_engine.add_gateway(CtpGateway)
- main_engine.add_app(CtaStrategyApp)
- main_engine.add_app(CtaBacktesterApp)
-
- main_window = MainWindow(main_engine, event_engine)
- main_window.showMaximized()
-
- qapp.exec()
-
-if __name__ == "__main__"。
- main()
-```
-
-Open CMD in that directory (hold Shift->click right mouse button->open command window/PowerShell here) and then run the following command to start VeighNa Trader.
-
- python run.py
-
-## Contributing code
-
-VeighNa uses Github to host its source code, if you wish to contribute code please use the PR (Pull Request) process of github:
-
-1. [create Issue](https://github.com/vnpy/vnpy/issues/new) - For the larger changes (such as new features, large refactoring, etc.) it is best to first open an issue to discuss, and smaller improvements (such as document improvements, bugfixes, etc.) can be sent directly to PR
-
-2. Fork [VeighNa](https://github.com/vnpy/vnpy) - Click the **Fork** button in the upper right corner
-
-3. CloneYour own fork: ```git clone https://github.com/$userid/vnpy.git```
-
- * If your fork is out of date, you need to manually sync: [Synchronization method](https://help.github.com/articles/syncing-a-fork/)
-
-4. Create your own feature branch from **dev**: ```git checkout -b $my_feature_branch dev```
-
-5. Make changes on $my_feature_branch and push the changes to your fork
-
-6. Create a [Pull Request] from your fork's $my_feature_branch branch to the main project's **dev** branch - [here](https://github.com/vnpy/vnpy/compare?expand=1) Click on **compare across forks** and select the required fork and branch to create the PR
-
-7. Waiting for review, need to continue to improve, or be Merge!
-
-When submitting code, please observe the following rules to improve the quality of the code:
-
- * Check your code with [flake8](https://pypi.org/project/flake8/) to make sure there are no errors and warnings. Just run ``flake8`` in the project root directory.
-
-
-## Other content
-
-* [Getting Help](https://github.com/vnpy/vnpy/blob/dev/.github/SUPPORT.md)
-* [Community Conduct side](https://github.com/vnpy/vnpy/blob/dev/.github/CODE_OF_CONDUCT.md)
-* [Issue templates](https://github.com/vnpy/vnpy/blob/dev/.github/ISSUE_TEMPLATE.md)
-* [PR templates](https://github.com/vnpy/vnpy/blob/dev/.github/PULL_REQUEST_TEMPLATE.md)
-
-
-
-## Copyright statement
-
-MIT
-
-
-
-
diff --git a/docs/community/app/algo_trading.md b/docs/community/app/algo_trading.md
deleted file mode 100644
index eb7119b..0000000
--- a/docs/community/app/algo_trading.md
+++ /dev/null
@@ -1,191 +0,0 @@
-# AlgoTrading - 算法委托执行交易模块
-
-## 功能简介
-
-AlgoTrading是用于**算法委托执行交易**的模块,用户可以通过其UI界面操作来便捷完成启动算法、保存配置、停止算法等任务。
-
-算法交易负责委托订单的具体执行过程。目前,AlgoTrading提供了多种示例算法,用户可以通过把大笔订单自动拆分成合适的小单分批委托,有效降低交易成本和冲击成本(如冰山算法、狙击手算法),也可以在设定的阈值内进行高抛低吸操作(如网格算法、套利算法)。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【AlgoTrading】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_algotrading import AlgoTradingApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(AlgoTradingApp)
-```
-
-## 启动模块
-
-对于用户搭建的算法,需要放到algo_trading.algos目录中,才能被识别加载。
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【算法交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/1.png)
-
-即可进入算法委托执行交易模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/10.png)
-
-
-## 配置算法
-
-配置参数要求如下:
-
-- 算法:在下拉框中选择要执行的交易算法;
-- 本地代码:格式为vt_symbol(合约代码 + 交易所名称);
-- 方向:多、空;
-- 价格:委托下单的价格;
-- 数量:委托的总数量,需要拆分成小批订单进行交易;
-- 执行时间(秒):运行该算法交易的总时间,以秒为单位;
-- 每轮间隔(秒):每隔多少时间进行委托下单操作,以秒为单位;
-- 开平:开、平、平今、平昨。
-
-### 保存配置
-
-交易算法的配置信息可以用json文件保存在本地,这样每次打开算法交易模块无需重复输入,具体操作如下:
-
-- 在【配置名称】选项中输入该算法配置信息的命名,然后点击下方【保存配置】按钮,即可保存配置信息到本地;
-- 保存配置后,在界面右侧的【配置】组件可以看到用户保存的配置名称和配置参数。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/4.png)
-
-保存的配置文件在.vntrader文件夹下的algo_trading_setting.json中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/5.png)
-
-
-## 启动算法
-
-目前VeighNa一共提供了六种常用的示例算法。本文档以时间加权平均算法(TWAP)为例,介绍算法启动过程。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/3.png)
-
-参数配置完成后(已保存的算法信息,通过在【配置】栏对应的算法下点击【使用】,可切换界面左侧配置的信息内容),点击【启动算法】按钮,即可立刻执行算法交易。
-
-若启动成功,则可在右上角【执行中】界面观测到该算法的执行状态。
-
-图中算法执行的任务具体为:使用时间加权平均算法,买入10000手豆油2109合约(y2109),执行价格为9000元,执行时间为600秒,每轮间隔为6秒;即每隔6秒钟,当合约卖一价小于等于9000时,以9000的价格买入100手豆油2109合约,将买入操作分割成100次。
-
-## CSV启动
-
-当有较多算法需要启动时,可以通过CSV文件来一次性批量启动。点击图形界面左侧的【CSV启动】按钮,在弹出的对话框中找到要导入的CSV文件后打开即可快速启动算法。
-
-请注意,CSV文件的格式应如下图所示,和左侧编辑区的各字段一致:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/12.png)
-
-结合Excel的表格快速编辑功能,批量添加算法较为方便。启动成功后,CSV文件中所有算法的执行情况均会显示在【执行中】界面下,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/14.png)
-
-请注意,CSV启动之后,只能在【执行中】、【日志】和【已结束】三个界面观测到内容输出及变化,不会将CSV文件中的算法信息添加到配置中。
-
-
-## 停止算法
-
-当用户需要停止正在执行的交易算法时,可以在【执行中】界面点击【停止】按钮,停止某个正在执行的算法交易,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/6.png)
-
-用户也可以在委托交易界面点击最下方的【全部停止】按钮,一键停止所有执行中的算法交易,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/7.png)
-
-
-## 数据监控
-
-数据监控界面由四个部分构成:
-
-执行中组件:显示正在执行的算法交易,包括:算法、参数和状态。成功启动算法之后,切换到右上角【执行中】界面,会显示该算法的执行状态,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/6.png)
-
-已结束组件:显示已完成的算法交易,同样包括:算法、参数和状态。算法结束或者停止之后,切换到右上角【已结束】界面,会显示该算法的执行状态,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/9.png)
-
-日志组件:显示启动、停止、完成算法的相关日志信息。在打开算法交易模块后,会进行初始化,故【日志】组件会首先输出“算法交易引擎启动”和“算法配置载入成功”,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/11.png)
-
-配置组件:用于载入algo_trading_setting.json的配置信息,并以图形化界面显示在【配置】栏下,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/algo_trading/8.png)
-
-- 点击配置组件的【使用】按钮立刻读取该配置信息,并显示在委托交易界面上,随后点击【启动算法】即可开始进行交易;
-- 点击配置组件的【移除】按钮可以移除该算法配置,并同步更新到json文件内。
-
-
-## 示例算法
-
-示例算法路径位于algo_trading.algos文件夹下(请注意,个别算法是没有写开平方向的,若有需要,可基于自身需求进行个性化修改)。目前,算法交易模块提供了以下六种内置算法:
-
-### DMA - 直接委托算法
-
-直接委托算法(DMA)直接发出新的委托(限价单、停止单、市价单)。
-
-### TWAP - 时间加权平均算法
-
-时间加权平均算法(TWAP)具体执行步骤如下:
-
-- 将委托数量平均分布在某个时间区域内,每隔一段时间用指定的价格挂出买单(或者卖单)。
-
-- 买入情况:卖一价低于目标价格时,发出委托,委托数量在剩余委托量与委托分割量中取最小值。
-
-- 卖出情况:买一价高于目标价格时,发出委托,委托数量在剩余委托量与委托分割量中取最小值。
-
-### Iceberg - 冰山算法
-
-冰山算法(Iceberg)具体执行步骤如下:
-
-- 在某个价位挂单,但是只挂一部分,直到全部成交。
-
-- 买入情况:先检查撤单,最新Tick卖一价低于目标价格,执行撤单;若无活动委托,发出委托,委托数量在剩余委托量与挂出委托量中取最小值。
-
-- 卖出情况:先检查撤单,最新Tick买一价高于目标价格,执行撤单;若无活动委托,发出委托,委托数量在剩余委托量与挂出委托量中取最小值。
-
-### Sniper - 狙击手算法
-
-狙击手算法(Sniper)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现好的价格立刻报价成交。
-
-- 买入情况:最新Tick卖一价低于目标价格时,发出委托,委托数量在剩余委托量与卖一量中取最小值。
-
-- 卖出情况:最新Tick买一价高于目标价格时,发出委托,委托数量在剩余委托量与买一量中取最小值。
-
-### Stop - 条件委托算法
-
-条件委托算法(Stop)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现行情突破立刻报价成交。
-
-- 买入情况:Tick最新价高于目标价格时,发出委托,委托价为目标价格加上超价。
-
-- 卖出情况:Tick最新价低于目标价格时,发出委托,委托价为目标价格减去超价。
-
-### BestLimit - 最优限价算法
-
-最优限价算法(BestLimit)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现好的价格立刻报价成交。
-
-- 买入情况:先检查撤单:最新Tick买一价不等于目标价格时,执行撤单;若无活动委托,发出委托,委托价格为最新Tick买一价,委托数量为剩余委托量。
-
-- 卖出情况:先检查撤单:最新Tick买一价不等于目标价格时,执行撤单;若无活动委托,发出委托,委托价格为最新Tick卖一价,委托数量为剩余委托量。
diff --git a/docs/community/app/chart_wizard.md b/docs/community/app/chart_wizard.md
deleted file mode 100644
index 624919e..0000000
--- a/docs/community/app/chart_wizard.md
+++ /dev/null
@@ -1,70 +0,0 @@
-# ChartWizard - 实时K线图表模块
-
-## 功能简介
-
-ChartWizard是用于**实时K线图表展示**的功能模块,用户可以通过其UI界面查看实时和历史K线行情,目前只支持显示1分钟级别的K线数据,实时K线(最新的一根K线)为Tick级刷新。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【ChartWizard】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_chartwizard import ChartWizardApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(ChartWizardApp)
-```
-
-
-## 启动模块
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-由于VeighNa本身并不提供任何数据服务,对于K线图表绘制过程中用到的历史数据,国内期货历史数据由数据服务提供,用户需要准备和配置数据服务账号(配置方法详见基本使用篇的全局配置部分)。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【K线图表】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/chart_wizard/1.png)
-
-即可进入实时K线图表模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/chart_wizard/2.png)
-
-
-## 新建图表
-
-打开图表窗口后,在【本地代码】编辑框中输入合约代码(注意本地代码由代码前缀和交易所后缀两部分组成,如rb2112.SHFE)。
-
-点击【新建图表】的按钮,即可创建对应合约的K线图表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/chart_wizard/3.png)
-
-用户可以新建多个合约的K线图表,通过切换窗口来实现快速切换:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/chart_wizard/4.png)
-
-
-## 查看图表
-
-每个合约的图表分为上下两块子图区域:
-
-- 上面的子图为行情K线;
-- 下面的子图为成交量数据。
-
-图表上的十字光标可用于定位和显示特定时间点的具体数据,在X轴和Y轴上均会对应数据点的标签,同时在左上角也会显示此根K线的OHLCV等信息。
-
-其他快捷操作:
-
-- 可以通过鼠标左键的拖拽,左右平移K线图显示的时间范围;
-- 可以通过鼠标滚轮的滚动,放大和缩小K线图显示的时间范围。
diff --git a/docs/community/app/cta_backtester.md b/docs/community/app/cta_backtester.md
deleted file mode 100644
index 06acf10..0000000
--- a/docs/community/app/cta_backtester.md
+++ /dev/null
@@ -1,304 +0,0 @@
-# CtaBacktester - CTA回测研究模块
-
-## 功能简介
-
-CtaBacktester是用于**CTA回测研究**的功能模块,用户可以通过其UI界面操作来便捷完成数据下载、历史回测、结果分析和参数优化等任务。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【CtaBacktester】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_ctabacktester import CtaBacktesterApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(CtaBacktesterApp)
-```
-
-
-## 启动模块
-
-对于用户自行开发的策略,需要放到VeighNa Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
-C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-启动VeighNa Trader后,在菜单栏中点击【功能】-> 【CTA回测】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/00.png)
-
-即可打开图形化的回测界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/25.png)
-
-
-## 下载数据
-
-在开始策略回测之前,首先需要保证数据库内有足够的历史数据,CtaBacktester模块也提供了一键下载历史数据的功能。
-
-下载数据需要填写本地代码、K线周期、开始日期以及结束日期四个字段信息:
-
-
-
-- 本地代码
- - 格式为合约代码 + 交易所名称
- - 如IF888.CFFEX、rb2105.SHFE
-- K线周期:
- - 1m(1分钟K线)
- - 1h(1小时K线)
- - d(日K线)
- - w(周K线)
- - tick(一个Tick)
-- 开始和结束日期
- - 格式为yyyy/mm/dd
- - 如2018/2/25、2021/2/28
-
-
-
-填写完成后,点击下方【下载数据】按钮启动下载任务,成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/27.png)
-
-注意下载完成后的历史数据会保存在本地数据库中,后续回测时可以直接使用,无需每次都重复下载。
-
-### 数据来源:数据服务(期货、股票、期权)
-
-以RQData为例,[RQData](https://www.ricequant.com/welcome/purchase?utm_source=vnpy)提供国内期货、股票以及期权的历史数据。在使用前需要保证数据服务已经正确配置(配置方法详见基本使用篇的全局配置部分)。打开CtaBacktester时会自动执行数据服务登录初始化,若成功则会输出“数据服务初始化成功”的日志,如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/26.png)
-
-### 数据来源:IB(外盘期货、股票、现货等)
-
-Interactive Brokers盈透证券(IB)提供丰富的外盘市场历史数据下载(包括股票、期货、期权、现货等),注意下载前需要先启动IB TWS交易软件,并在VeighNa Trader主界面连接好IB接口,并订阅所需合约行情。下载成功如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/28.png)
-
-
-## 执行回测
-
-准备好数据后即可开始使用历史数据对策略进行回测研究,回测时需要配置好相关的参数:
-
-- 策略品种
- - 交易策略:在下拉框中选择要回测的策略名称;
- - 本地代码:注意不要漏掉交易所后缀;
-- 数据范围
- - 格式详见本章[下载数据](#jump)部分的介绍;
-- 交易成本
- - 滑点:下单交易点位与实际交易点位的差别;
- - 百分比手续费:填写数字即可,不要填写百分数;
- - 固定比手续费:可以手续费填0,然后把手续费除以合约乘数后,加在滑点中;
-- 合约属性
- - 合约乘数:合约的交易单位;
- - 价格跳动:合约价格的最小变动价位;
- - 回测资金:账户资金;
- - 合约模式:正向。
-
-配置完成后,点击下方的【开始回测】按钮,会弹出策略参数配置对话框,用于设置策略参数,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/29.png)
-
-点击【确定】按钮后开始执行回测任务,同时日志界面会输出相关信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/10.png)
-
-回测完成后,会自动在右侧区域显示策略回测业绩的统计指标以及相关图表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/30.png)
-
-若数据库没有准备好所需的历史数据就点击【开始回测】,则日志界面会输出“历史数据不足,回测终止”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/15.png)
-
-
-## 结果分析
-
-### 业绩图表
-
-右侧的业绩图表由以下四张子图构成:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/31.png)
-
-【账户净值】图的横轴是时间,纵轴是资金,体现了账户净值在交易时段内随着交易日变化的情况。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/32.png)
-
-【净值回撤】图的横轴是时间,纵轴是回撤,体现了净值从最近高点回撤程度随着交易日变化的情况。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/33.png)
-
-【每日盈亏】图的横轴是时间,纵轴是日盈亏的金额(采用逐日盯市规则以收盘价结算),体现了整个回测周期内策略的每日盈亏变化情况。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/34.png)
-
-【盈亏分布】图的横轴是每日盈亏的数值,纵轴是该盈亏数值的出现概率,体现了整体每日盈亏的概率分布情况。
-
-### 统计指标
-
-统计指标区域用于显示策略历史回测业绩的相关统计数值,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/35.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/36.png)
-
-根据数据类型,指标可以分类为:
-
-- 日期信息
- - 首个交易日
- - 最后交易日
- - 总交易日
- - 盈利交易日
- - 亏损交易日
-- 资金盈亏
- - 起始资金
- - 结束资金
- - 总收益率
- - 年化收益
- - 最大回撤
- - 百分比最大回撤
- - 总盈亏
-- 交易成本
- - 总手续费
- - 总滑点
- - 总成交额
- - 总成交笔数
-- 日均数据
- - 日均盈亏
- - 日均手续费
- - 日均滑点
- - 日均成交额
- - 日均成交笔数
- - 日均收益率
- - 收益标准差(日均)
-- 绩效评价
- - 夏普比率
- - 收益回撤比
-
-### 详细信息
-
-回测完成后,可点击左侧区域的【委托记录】按钮,查看回测过程中策略逐笔委托的细节信息:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/43.png)
-
-如果发现表格内容显示不完整,可以单击鼠标右键弹出菜单后,选择【调整列宽】按钮,即可进行自动列宽缩放:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/46.png)
-
-表格也支持一键将表内数据保存为CSV文件,在上一步右键弹出的菜单中,点击【保存数据】按钮,即可弹出如下图所示选择保存文件名的对话框:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/42.png)
-
-回测过程中策略发出委托的**成交价**不一定是原始下单的价格,而要由回测引擎基于当时的行情数据和下单价格进行撮合后算出,每笔委托对应的具体成交细节可以点击【成交记录】按钮后查看:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/38.png)
-
-点击【每日盈亏】按钮后,可以看到如下图所示的策略每日盈亏细节:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/39.png)
-
-这里每日盈亏的统计采用期货市场普遍使用的逐日盯市(Marking-to-Market)规则进行计算:
-
-- 持仓盈亏:今日开盘持仓的部分,以昨收盘价开仓,今收盘价平仓,计算出的盈亏金额;
-- 交易盈亏:今日日内成交的部分,以成交价格开仓,今收盘价平仓,计算出的盈亏金额;
-- 总盈亏:汇总持仓盈亏和交易盈亏后的金额;
-- 净盈亏:总盈亏扣除手续费和滑点后的金额,也是最终计算显示四张图表时用到的每日盈亏金额。
-
-### K线图表
-
-点击【K线图表】按钮,即可打开用于显示回测K线数据,以及策略具体买卖点位置的图表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/44.png)
-
-注意绘图耗时可能需要一定时间(通常在数十秒到几分钟),请耐心等待。
-
-K线图表中的图例说明可以在窗口底部看到,整体上采用了国内市场标准的配色和风格。开平仓之间的连线采用的是逐笔配对(First-in, First-out)规则进行绘制,每一笔成交会根据其数量自动和其他成交进行匹配,即使策略有复杂的加减仓操作也能正确绘制。
-
-
-## 参数优化
-
-对于开发好的策略,可以使用CtaBacktester内置的优化算法快速进行参数寻优,目前支持穷举和遗传两种优化算法。
-
-### 设置优化参数
-
-点击【参数优化】按钮,会弹出“优化参数配置”的窗口:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/37.png)
-
-点击【目标】下拉框,选择优化过程中要使用的目标函数(即以该数值最大化为目标进行优化):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/45.png)
-
-对于要进行优化的策略参数,需要配置:
-
-- 【开始】和【结束】:用于给定参数优化的范围;
-- 【步进】:用于给定参数每次变化的数值;
-
-举例:如一个参数的【开始】设为10,【结束】设为20,【步进】设为2,则该参数在优化过程中的寻优空间为:10、12、14、16、18、20。
-
-对于要设置固定数值的策略参数,请将【开始】和【结束】都同样设为该数值即可。
-
-### 穷举算法优化
-
-设置好需要优化的参数后,点击窗口底部的【多进程优化】按钮,此时CtaBacktester会调用Python的multiprocessing模块,根据当前电脑CPU的核心数量,启动对应数量的进程来并行执行穷举优化任务。
-
-在优化的过程中,穷举算法会遍历参数寻优空间中的每一个组合。遍历的过程即使用该组合作为策略参数运行一次历史回测,并返回优化目标函数的数值。完成遍历后,根据所有目标函数的数值进行排序,从而选出最优的参数组合结果。
-
-穷举算法优化的效率和CPU核心数量直接相关:若用户计算机是2核,则优化时间为单核的1/2;若计算机是10核,则优化时间会大幅降低到单核的1/10。
-
-### 遗传算法优化
-
-设置好需要优化的参数后,点击窗口底部的【遗传算法优化】按钮,此时CtaBacktester会调用Python的multiprocessing模块和deap模块,来执行高效智能化的多进程遗传算法优化任务。
-
-附上遗传算法的简要工作原理:
-
-1. 定义优化方向,如总收益率最大化;
-2. 随机从全局寻优空间中,选择出部分参数组合形成初始族群;
-3. 对族群内所有个体进行评估,即运行回测获取目标函数结果;
-4. 基于目标函数结果进行排序,剔除表现不好的个体(参数组合);
-5. 对剩下的个体进行交叉或者变异,通过评估和筛选后形成新的族群;
-6. 以上3-5步为一次完整的种群迭代,在整个优化过程中需要多次重复;
-7. 多次迭代后,种群内差异性减少,参数收敛向最优解,最终输出结果。
-
-### 优化结果分析
-
-优化完成后,会在日志区域输出信息提示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/49.png)
-
-此时点击【优化结果】按钮即可查看相关结果:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/50.png)
-
-上图中的参数优化结果,基于启动优化任务时所选的目标函数【总收益率】的数值,由高到低进行了排序。
-
-最后,点击右下角的【保存】按钮即可将优化结果保存到本地CSV文件中,便于后续分析使用。
-
-
-## 策略代码
-
-### 代码编辑
-
-如果需要对策略进行修改,在CtaBacktester界面左上角的下拉框中选择策略后,点击左下角的【代码编辑】按钮,即可自动打开Visual Studio Code进行代码编辑。若找不到Visual Studio Code,则会弹出启动代码编辑器失败对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/61.png)
-
-### 策略重载
-
-当用户通过CtaBacktester对策略源代码进行修改后,此时的修改尚停留在硬盘上的代码文件层面,内存中依然是修改前的策略代码。
-
-想让修改内容在内存中立即生效,需要点击左下角的【策略重载】按钮,此时CtaBacktester会自动扫描并重新加载所有策略文件中的策略代码,同时会有相关日志输出,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_backtester/59.png)
-
-重载刷新完成后,再运行回测或者优化时,使用的就是修改后的策略代码了。
diff --git a/docs/community/app/cta_strategy.md b/docs/community/app/cta_strategy.md
deleted file mode 100644
index 81f6eff..0000000
--- a/docs/community/app/cta_strategy.md
+++ /dev/null
@@ -1,852 +0,0 @@
-# CtaStrategy - CTA自动交易模块
-
-## 功能简介
-
-CtaStrategy是用于**CTA自动交易**的功能模块,用户可以通过其UI界面操作来便捷完成策略初始化、策略启动、策略停止、策略参数编辑以及策略移除等任务。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【CtaStrategy】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_ctastrategy import CtaStrategyApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(CtaStrategyApp)
-```
-
-
-## 启动模块
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
-C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【CTA策略】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/00.png)
-
-即可进入CTA策略模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/2.png)
-
-如果配置了数据服务(配置方法详见基本使用篇的全局配置部分),打开CTA策略模块时会自动执行数据服务登录初始化。若成功登录,则会输出“数据服务初始化成功”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/ctas.png)
-
-
-## 添加策略
-
-用户可以基于编写好的CTA策略模板(类)来创建不同的策略实例(对象)。策略实例的好处在于,同一个策略可以同时去交易多个品种合约,并且每个实例的参数可以是不同的。
-
-在左上角的下拉框中选择要交易的策略名称,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/28.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/5.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 实例名称不能重名;
-- 合约品种
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 一定要是实盘交易系统中可以查到的合约名称;
- - 一般选择该期货品种当前流动性最好的月份;
-- 参数设置
- - 显示的参数名是策略里写在parameters列表中的参数名;
- - 默认数值为策略里的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在左侧的策略监控组件中看到该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/47.png)
-
-策略监控组件顶部显示的是策略实例名、合约品种名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的cta_strategy_setting.json文件中。
-
-### 创建失败
-
-以下为创建策略实例失败的几种可能情况:
-
-- 如果添加了同名的策略实例,则会创建失败,图形界面输出“创建策略失败,存在重名”的日志信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/48.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/49.png)
-
-- 如果合约品种没有填写交易所名称,则会创建失败,图形界面输出“创建策略失败,本地代码缺失交易所后缀”的日志信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/50.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/51.png)
-
-- 如果合约品种的交易所名称填错,则会创建失败,图形界面输出“创建策略失败,本地代码的交易所后缀不正确”的信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/52.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/53.png)
-
-
-## 管理策略
-
-### 初始化
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/54.png)
-
-初始化过程中,主要按顺序完成了以下三步任务:
-
-1. 获取历史数据
-
- 为了确保策略内指标数值的准确性,每个策略实例都需要一定的历史数据来进行策略初始化。
-
- 因此,在策略初始化时,策略实例内部的load_bar函数会先去接口获取最新历史数据。如果接口不提供历史数据,则通过配置的数据服务获取(以RQData为例,[RQData](https://www.ricequant.com/welcome/purchase?utm_source=vnpy)提供国内期货、股票以及期权的历史数据。RQData的数据服务提供盘中K线更新,即使在9点45分才启动策略,也能获取到之前从9点30开盘到9点45分之间的K线数据,提供给策略进行初始化计算,而不用担心数据缺失的问题)。如果没有配置数据服务,则通过访问本地数据库查询。这种情况下,用户需要保证数据库中的数据完整性(满足初始化需求),可以通过DataRecorder录制,或者使用DataManager从CSV文件导入。
-
- 具体载入数据的长度,取决于load_bar函数的参数控制(策略模板默认是10天)。数据载入后会以逐根K线(或者Tick)的方式推送给策略,实现内部变量的初始化计算,比如缓存K线序列、计算技术指标等。
-
-2. 载入缓存变量
-
- 在每天实盘运行的过程中,量化策略中的有些变量只和历史行情数据相关,这类变量通过加载历史数据回放就能得到正确的数值。另一类变量则可能和交易状态相关,如策略的持仓、移动止损的最高价跟踪等,这类变量需要缓存在硬盘上(退出程序时),第二天回放完历史数据后再读取还原,才能保证和之前交易状态的一致性。
-
- 每次停止策略时,会自动将策略的variables列表对应的变量以及策略持仓缓存进.vntrader目录下的cta_strategy_data.json文件中,以便在下一次策略初始化时自动载入。
-
- 请注意,在某些情况下(比如手动平仓了),缓存的数据可能会出现偏差(因为策略持仓维护的是运行策略实例的逻辑持仓,不是特定品种的持仓),那么可以通过手动修改json文件来调整。
-
-3. 订阅行情推送
-
- 最后基于vt_symbol参数获取该策略所交易合约的信息,并订阅该合约的实时行情推送。如果实盘交易系统找不到该合约的信息,比如没有连接登录接口或者vt_symbol填写错误,则会在日志模块中输出相应的报错信息。
-
-以上三个步骤完成后,可观察到此时该策略实例的【inited】状态已经为【True】,且变量也都显示对应的数值(不再为0)。说明该策略实例已经调用过load_bar函数加载历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-### 初始化失败
-
-以下为创建策略实例失败的几种可能情况:
-- 即使交易所填的是VeighNa支持的交易所的名字,成功创建了策略实例。但是如果该合约名字输入错误(比如大小写错误,合约与交易所对不上或者已经退市),导致实盘交易系统找不到该合约,则会初始化失败。此时图形界面输出“行情订阅失败,找不到合约”的日志。如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/55.png)
-
-- 即使合约代码填写正确,成功创建了策略实例。但是如果此时还没有连接接口,或者接口合约信息查询合约操作还没有完成,导致实盘交易系统找不到该合约,也会初始化失败。此时图形界面输出“行情订阅失败,找不到合约”的日志。如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/56.png)
-
- 如果出现了“行情订阅失败,找不到合约”这类问题,可以通过VeighNa Trader的主界面点击【帮助】-【查询合约】进行查询,找到正确的合约信息。如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/57.png)
-
-- 如果策略内用到了K线时间序列管理模块(ArrayManager)来计算变量指标的值,那么请确保历史数据的长度足够ArrayManager进行初始化(默认的ArrayManager需要100条数据才能初始化成功)。如果历史数据的长度不够ArrayManager初始化,即使图形界面上输出了日志“初始化完成”,该策略实例的初始化也是失败的。
-
- - 如果策略逻辑是基于示例策略中的,一但ArrayManager没有初始化成功(if not am.inited)就返回了逻辑写的话,那么由下图可观察到,图形界面左侧的策略实例中基于ArrayManager计算的策略指标的值都是0。说明此时该策略实例虽然启动之后就可以开始自动交易了,但是因为ArrayManager没有初始化成功,策略内的逻辑每次走到ArrayManager初始化状态判断时就返回了,走不到计算指标进而发出交易信号的逻辑。进而该策略实例需要一直等到推进策略实例的数据足够ArrayManager初始化之后,满足ArrayManager初始化的判断条件,才能真正发出交易信号。
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/58.png)
-
- - 如果策略逻辑不是基于示例策略中的,一但ArrayManager没有初始化成功(if not am.inited)就返回的逻辑写的话,那么虽然图形界面左侧的策略实例中的策略指标有具体数值,而且此时启动可以发出交易信号,无需等待ArrayManager初始化完成。但是因为ArrayManager没有初始化成功,该策略实例计算出来的变量指标值是不准确的,进而可能会发出不符合策略预期的交易信号。
-
-### 启动
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动自动交易功能。点击策略实例下的【启动】按钮,即可启动该策略实例。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/59.png)
-
-可观察到此时该策略实例的【inited】和【trading】状态都为【True】。说明此时该策略实例已经调用过load_bar函数,完成了历史数据回放,而且此时策略内部的交易请求类函数(buy/sell/short/cover/cancel_order等),以及信息输出类函数(send_email/put_event等),才会真正执行并发出对应的请求指令到底层接口中(真正执行交易)。
-
-在上一步策略初始化的过程中,尽管策略同样在接收(历史)数据,并调用对应的功能函数,但因为【trading】状态为【False】,所以并不会有任何真正的委托下单操作或者交易相关的日志信息输出。
-
-如果启动之后,策略发出了限价单,可以去VeighNa Trader主界面【委托】栏查看委托订单细节。如果策略发出了本地停止单,可以在CTA策略UI界面右上方区域的停止单监控组件查看委托订单细节。
-
-### 停止
-
-如果启动策略之后,由于某些情况(如到了市场收盘时间,或盘中遇到紧急情况)想要停止、编辑或者移除策略,可以点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/60.png)
-
-CTA策略引擎会自动将该策略之前发出的所有活动委托全部撤销,以保证在策略停止后不会有失去控制的委托存在。同时该策略实例最新的变量信息会被保存到.vntrader文件夹下的cta_strategy_data.json文件中。
-
-此时可观察到该策略实例的【trading】状态已变为【False】,说明此时该策略实例已经停止自动交易了。
-
-在CTA策略的实盘交易过程中,正常情况应该让策略在整个交易时段中都自动运行,尽量不要有额外的暂停重启类操作。对于国内期货市场来说,应该在交易时段开始前,启动策略的自动交易,然后直到收盘后,再关闭自动交易。因为现在CTP夜盘收盘后也会关闭系统,早上开盘前重启,所以夜盘收盘后也需要停止策略,关闭VeighNa Trader了。
-
-### 编辑
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/61.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/62.png)
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下cta_strategy_setting.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-修改前,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/63.png)
-
-修改后,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/64.png)
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/65.png)
-
-### 移除
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面左侧的策略监控组件中将不会再显示该策略实例的信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/66.png)
-
-此时.vntrader文件夹下的cta_strategy_setting.json文件也移除了该策略实例的配置信息。
-
-### 状态跟踪
-
-如果想要通过图形界面跟踪策略的状态,有两种方式:
-
-1. 调用put_event函数
-
- 策略实例中所有的的变量信息,都需要把变量名写在策略的variables列表中,才能在图形界面显示。如果想跟踪变量的状态变化,则需要在策略中调用put_event函数,界面上才会进行数据刷新。
-
- 有时用户会发现自己写的策略无论跑多久,变量信息都不发生变化,这种情况请检查策略中是否漏掉了对put_event函数的调用。
-
-2. 调用write_log函数
-
- 如果不仅想观察到变量信息的状态变化,还想根据策略的状态输出基于自己需求的个性化的日志,可以在策略中调用write_log函数,进行日志输出。
-
-## 运行日志
-
-### 日志内容
-
-CTA策略模块UI界面上输出的日志有两个来源,分别是CTA策略引擎和策略实例。
-
-**引擎日志**
-
-CTA策略引擎一般输出的是全局信息。下图中除了以带中括号的策略实例名开头的内容之外,都是CTA策略引擎输出的日志。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/67.png)
-
-**策略日志**
-
-如果在策略中调用了write_log函数,那么日志内容就会通过策略日志输出。下图红框里的内容分别是两个不同的策略实例输出的策略日志。中括号里是策略实例的名称,中括号后是write_log函数输出的内容。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/68.png)
-
-### 清空操作
-
-如果想要清空CTA策略UI界面上的日志输出,可以点击右上角的【清空日志】按钮,则可一键清空该界面上已输出的日志。
-
-点击【清空日志】前,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/66.png)
-
-点击【清空日志】后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/70.png)
-
-
-## 停止单
-
-图形界面右上方区域的停止单监控组件,是用来跟踪所有CTA引擎内本地停止单的状态变化的。
-
-因为不是所有接口都支持停止单,所以VeighNa提供了本地停止单的功能。在交易接口不支持交易所停止单的前提下,用户依然可以通过策略的下单函数(buy/sell/short/cover),把stop参数设置为True,启用本地停止单功能。
-
-VeighNa的本地停止单有三个特点:
-
-1. 保存在本地电脑上,关机后则失效;
-2. 只有交易员本人能够看到,不必担心泄露底牌;
-3. 停止单触发有延时,导致一定的滑点。
-
-**停止单信息**
-
-在发出本地停止单后,图形界面右上方的监控组件就会显示停止单的委托细节。
-
-本地停止单一共有【等待中】、【已触发】和【已撤销】三个状态,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/71.png)
-
-停止单刚发出时是处于【等待中】的状态。因为停止单的信息记录在本地,没有发往交易所,所以此时主界面上【委托】栏不会有变化。
-
-一旦该停止单的委托价格被触发,为了实现立即成交的目的,CTA策略引擎会立即以**涨跌停价**或者**盘口五档**的价格,去发出**限价**委托(所以建议本地停止单只用于流动性较好的合约)。限价委托发出后,VeighNa Trader主界面上【委托】栏将更新该订单的状态,此时停止单状态会变为【已触发】,【限价委托号】栏下也会填入该订单的限价委托号。
-
-请注意,**停止单界面显示的价格是本地停止单的触发价格,而不是发出限价单的价格**。
-
-如果停止单在被触发前就被策略取消了,那么该订单的状态就会变为【已撤销】。
-
-
-## 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的CTA策略实例,可以使用界面右上角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-### 全部初始化
-
-在所有策略实例创建成功后,点击右上角的【全部初始化】按钮,则可批量初始化策略实例。
-
-点击【全部初始化】前,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/72.png)
-
-点击【全部初始化】后,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/73.png)
-
-### 全部启动
-
-在所有策略实例初始化成功后,点击右上角的【全部启动】按钮,则可批量启动策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/74.png)
-
-### 全部停止
-
-在所有策略实例启动成功后,点击右上角的【全部停止】按钮,则可批量停止策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/75.png)
-
-
-## 移仓助手
-
-如需使用自动移仓助手,请在完成策略初始化之后,对要执行移仓的策略先点击【移仓助手】按钮,则会弹出移仓助手对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/76.png)
-
-首先请在在左侧区域配置要执行的移仓任务,其中:
-
-- 移仓合约:该下拉框中,显示当前CTA策略模块下所有策略实例所交易的合约本地代码,选择要平仓掉的老合约;
-- 目标合约:要将老的仓位和策略,移仓过去的的合约本地代码(vt_symbol),输入要开仓的新合约;
-- 委托超价:执行移仓交易时,委托价格相对于当时盘口对价超出的pricetick。
-
-完成配置确认无误后,点击【移仓】按钮开始执行,移仓过程中会有下图所示的日志输出,完成后该对话框会被设为锁死(变灰无法再点击):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/77.png)
-
-可以看到几乎1秒内就完成了移仓合约对应的全部仓位和策略的移仓操作,同时CTA策略模块界面上的策略交易代码已经变为目标合约。
-
-移仓过程中具体执行的任务步骤如下:
-
-- 仓位移仓:
-
- - 对当前账户内,移仓合约的【所有仓位】进行平仓(注意这里不会区分策略持仓还是手动交易持仓),并记录对应的仓位(多空分别记录);
- - 对目标合约执行开仓交易,开仓的价格为当时的盘口对价加上超价pricetick,数量为上一步中记录的原有移仓合约持仓量。
-
-- 策略移仓:
-
- - 记录当前CTA策略模块中,所有交易对象为移仓合约的策略的【逻辑持仓】(注意这里的逻辑持仓和账户实际持仓不一定完全对应);
- - 将上述交易对象为移仓合约的老策略实例删除,并创建以目标合约为交易标的同名新策略实例;
- - 初始化新策略实例,并将之前记录的老策略实例的【逻辑持仓】,更新到新策略的状态上。
-
-回到VeighNa Trader主界面,也可以查看到详细的移仓委托和成交记录。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/78.png)
-
-
-## CTA策略模板(CtaTemplate)
-
-CTA策略模板提供了信号生成和委托管理功能,用户可以基于该模板(位于site-packages\vnpy_ctastrategy\template中)自行开发CTA策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
-
-1. 策略文件命名采用下划线模式,如boll_channel_strategy.py,而策略类命名采用驼峰式,如BollChannelStrategy。
-
-2. 自建策略的类名不要与示例策略的类名重合。如果重合了,图形界面上只会显示一个策略类名。
-
-下面通过BollChannelStrategy策略示例,来展示策略开发的具体步骤:
-
-在基于CTA策略模板编写策略逻辑之前,需要在策略文件的顶部载入需要用到的内部组件,如下方代码所示:
-
-```python 3
-from vnpy_ctastrategy import (
- CtaTemplate,
- StopOrder,
- TickData,
- BarData,
- TradeData,
- OrderData,
- BarGenerator,
- ArrayManager
-)
-```
-
-其中,CtaTemplate是CTA策略模板,StopOrder、TickData、BarData、TradeData和OrderData都是储存对应信息的数据容器,BarGenerator是K线生成模块,ArrayManager是K线时间序列管理模块。
-
-### 策略参数与变量
-
-在策略类的下方,可以设置策略的作者(author),参数(parameters)以及变量(variables),如下方代码所示:
-
-```python 3
-
- author = "用Python的交易员"
-
- boll_window = 18
- boll_dev = 3.4
- cci_window = 10
- atr_window = 30
- sl_multiplier = 5.2
- fixed_size = 1
-
- boll_up = 0
- boll_down = 0
- cci_value = 0
- atr_value = 0
-
- intra_trade_high = 0
- intra_trade_low = 0
- long_stop = 0
- short_stop = 0
-
- parameters = [
- "boll_window",
- "boll_dev",
- "cci_window",
- "atr_window",
- "sl_multiplier",
- "fixed_size"
- ]
- variables = [
- "boll_up",
- "boll_down",
- "cci_value",
- "atr_value",
- "intra_trade_high",
- "intra_trade_low",
- "long_stop",
- "short_stop"
- ]
-
-```
-
-虽然策略的参数和变量都从属于策略类,但策略参数是固定的(由交易员从外部指定),而策略变量则在交易的过程中随着策略的状态而变化,所以策略变量一开始只需要初始化为对应的基础类型。例如:整数设为0,浮点数设为0.0,而字符串则设为""。
-
-如果需要CTA引擎在运行过程中,将策略参数和变量显示在UI界面上,并在数据刷新、停止策略时保存其数值,则需把参数和变量的名字(以字符串的数据类型)添加进parameters和variables列表里。
-
-请注意,该列表只能接受参数或变量以str、int、float和bool四种数据类型传入。如果策略里需要用到其他数据类型的参数与变量,请把该参数或变量的定义放到__init__函数下。
-
-### 类的初始化
-
-入参:cta_engine: Any, strategy_name: str, vt_symbol: str, setting: dict
-
-出参:无
-
-__init__函数是策略类的构造函数,需要与继承的CtaTemplate保持一致。
-
-在这个继承的策略类里,初始化一般分三步,如下方代码所示:
-
-```python 3
- def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
- """"""
- super().__init__(cta_engine, strategy_name, vt_symbol, setting)
-
- self.bg = BarGenerator(self.on_bar, 15, self.on_15min_bar)
- self.am = ArrayManager()
-```
-
-1 . 通过super( )的方法继承CTA策略模板,在__init__( )函数中传入CTA引擎、策略名称、vt_symbol以及参数设置。注意其中的CTA引擎,可以是实盘引擎或者回测引擎,这样可以方便地**实现同一套代码同时跑回测和实盘**(以上参数均由策略引擎在使用策略类创建策略实例时自动传入,用户无需进行设置)。
-
-2 . 调用K线生成模块(BarGenerator):通过时间切片将Tick数据合成1分钟K线数据。如有需求,还可合成更长的时间周期数据,如15分钟K线。
-
-如果只基于on_bar进行交易,这里代码可以写成:
-
-```python 3
- self.bg = BarGenerator(self.on_bar)
-```
-
-而不用给bg实例传入需要基于on_bar周期合成的更长K线周期,以及接收更长K线周期的函数名。
-
-请注意,合成X分钟线时,X必须设为能被60整除的数(60除外)。对于小时线的合成没有这个限制。
-
-BarGenerator默认的基于on_bar函数合成长周期K线的数据频率是分钟级别,如果需要基于合成的小时线或者更长周期的K线交易,请在策略文件顶部导入Interval,并传入对应的数据频率给bg实例。如下方代码所示:
-
-文件顶部导入Interval:
-
-```python 3
-from vnpy.trader.constant import Interval
-```
-
-__init__函数创建bg实例时传入数据频率:
-
-```python 3
- self.bg = BarGenerator(self.on_bar, 2, self.on_2hour_bar, Interval.HOUR)
-```
-
-3 . 调用K线时间序列管理模块(ArrayManager):基于K线数据,如1分钟、15分钟,
-将其转化为便于向量化计算的时间序列数据结构,并在内部支持使用talib库来计算相应的技术指标。
-
-ArrayManager的默认长度为100,如需调整ArrayManager的长度,可传入size参数进行调整(size不能小于计算指标的周期长度)。
-
-### CTA策略引擎调用的函数
-
-CtaTemplate中的update_setting函数和该函数后面四个以get开头的函数,都是CTA策略引擎去负责调用的函数,一般在策略编写的时候是不需要调用的。
-
-### 策略的回调函数
-
-CtaTemplate中以on开头的函数称为回调函数,在编写策略的过程中能够用来接收数据或者接收状态更新。回调函数的作用是当某一个事件发生的时候,策略里的这类函数会被CTA策略引擎自动调用(无需在策略中主动操作)。回调函数按其功能可分为以下三类:
-
-#### 策略实例状态控制(所有策略都需要)
-
-**on_init**
-
-* 入参:无
-
-* 出参:无
-
-初始化策略时on_init函数会被调用,默认写法是先调用write_log函数输出“策略初始化”日志,再调用load_bar函数加载历史数据,如下方代码所示:
-
-```python 3
- def on_init(self):
- """
- Callback when strategy is inited.
- """
- self.write_log("策略初始化")
- self.load_bar(10)
-```
-
-请注意,如果是基于Tick数据回测,请在此处调用load_tick函数。
-
-策略初始化时,策略的inited和trading状态都为【False】,此时只是调用ArrayManager计算并缓存相关的计算指标,不能发出交易信号。调用完on_init函数之后,策略的inited状态才变为【True】,策略初始化才完成。
-
-**on_start**
-
-* 入参:无
-
-* 出参:无
-
-启动策略时on_start函数会被调用,默认写法是调用write_log函数输出“策略启动”日志,如下方代码所示:
-
-```python 3
- def on_start(self):
- """
- Callback when strategy is started.
- """
- self.write_log("策略启动")
-```
-
-调用策略的on_start函数启动策略后,策略的trading状态变为【True】,此时策略才能够发出交易信号。
-
-**on_stop**
-
-* 入参:无
-
-* 出参:无
-
-停止策略时on_stop函数会被调用,默认写法是调用write_log函数输出“策略停止”日志,如下方代码所示:
-
-```python 3
- def on_stop(self):
- """
- Callback when strategy is stopped.
- """
- self.write_log("策略停止")
-```
-
-调用策略的on_stop函数停止策略后,策略的trading状态变为【False】,此时策略就不会发出交易信号了。
-
-#### 接收数据、计算指标、发出交易信号
-
-**on_tick**
-
-* 入参:tick: TickData
-
-* 出参:无
-
-绝大部分交易系统都只提供Tick数据的推送。即使一部分平台可以提供K线数据的推送,但是这些数据到达本地电脑的速度也会慢于Tick数据的推送,因为也需要平台合成之后才能推送过来。所以实盘的时候,VeighNa里所有的策略的K线都是由收到的Tick数据合成的。
-
-当策略收到最新的Tick数据的行情推送时,on_tick函数会被调用。默认写法是通过BarGenerator的update_tick函数把收到的Tick数据推进前面创建的bg实例中以便合成1分钟的K线,如下方代码所示:
-
-```python 3
- def on_tick(self, tick: TickData):
- """
- Callback of new tick data update.
- """
- self.bg.update_tick(tick)
-```
-
-**on_bar**
-
-* 入参:bar: BarData
-
-* 出参:无
-
-当策略收到最新的K线数据时(实盘时默认推进来的是基于Tick合成的一分钟的K线,回测时则取决于选择参数时填入的K线数据频率),on_bar函数就会被调用。示例策略里出现过的写法有两种:
-
-1 . 如果策略基于on_bar推进来的K线交易,那么请把交易请求类函数都写在on_bar函数下(因本次示例策略类BollChannelStrategy不是基于on_bar交易,故不作示例讲解。基于on_bar交易的示例代码可参考其他示例策略);
-
-2 . 如果策略需要基于on_bar推进来的K线数据通过BarGenerator合成更长时间周期的K线来交易,那么请在on_bar中调用BarGenerator的update_bar函数,把收到的这个bar推进前面创建的bg实例中即可,如下方代码所示:
-
-```python 3
- def on_bar(self, bar: BarData):
- """
- Callback of new bar data update.
- """
- self.bg.update_bar(bar)
-```
-
-示例策略类BollChannelStrategy是通过15分钟K线数据回报来生成CTA信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_15min_bar(self, bar: BarData):
- """"""
- self.cancel_all()
-
- am = self.am
- am.update_bar(bar)
- if not am.inited:
- return
-
- self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev)
- self.cci_value = am.cci(self.cci_window)
- self.atr_value = am.atr(self.atr_window)
-
- if self.pos == 0:
- self.intra_trade_high = bar.high_price
- self.intra_trade_low = bar.low_price
-
- if self.cci_value > 0:
- self.buy(self.boll_up, self.fixed_size, True)
- elif self.cci_value < 0:
- self.short(self.boll_down, self.fixed_size, True)
-
- elif self.pos > 0:
- self.intra_trade_high = max(self.intra_trade_high, bar.high_price)
- self.intra_trade_low = bar.low_price
-
- self.long_stop = self.intra_trade_high - self.atr_value * self.sl_multiplier
- self.sell(self.long_stop, abs(self.pos), True)
-
- elif self.pos < 0:
- self.intra_trade_high = bar.high_price
- self.intra_trade_low = min(self.intra_trade_low, bar.low_price)
-
- self.short_stop = self.intra_trade_low + self.atr_value * self.sl_multiplier
- self.cover(self.short_stop, abs(self.pos), True)
-
- self.put_event()
-```
-
-- 清空未成交委托:为了防止之前下的单子在上一个15分钟没有成交,但是下一个15分钟可能已经调整了价格,就用cancel_all()方法立刻撤销之前未成交的所有委托,保证策略在当前这15分钟开始时的整个状态是清晰和唯一的;
-
-- 调用K线时间序列管理模块:基于最新的15分钟K线数据来计算相应的技术指标,如布林带通道上下轨、CCI指标、ATR指标等。首先获取ArrayManager对象,然后将收到的K线推送进去,检查ArrayManager的初始化状态,如果还没初始化成功就直接返回,没有必要去进行后续的交易相关的逻辑判断。因为很多技术指标计算对最少K线数量有要求,如果数量不够的话计算出来的指标会出现错误或无意义。反之,如果没有return,就可以开始计算技术指标了;
-
-- 信号计算:通过持仓的判断以及结合CCI指标、布林带通道、ATR指标在通道突破点挂出停止单委托(buy/sell),同时设置离场点(short/cover)。
-
- 请注意,如果需要在图形界面刷新指标数值,请不要忘记调用put_event()函数。
-
-#### 委托状态更新
-
-以下函数在策略中可以直接pass,其具体逻辑应用交给回测/实盘引擎负责。
-
-**on_trade**
-
-* 入参:bar: TradeData
-
-* 出参:无
-
-收到策略成交回报时on_trade函数会被调用。
-
-**on_order**
-
-* 入参:bar: OrderData
-
-* 出参:无
-
-收到策略委托回报时on_order函数会被调用。
-
-**on_stop_order**
-
-* 入参:bar: StopOrder
-
-* 出参:无
-
-收到策略停止单回报时on_stop_order函数会被调用。
-
-### 主动函数
-
-**buy**:买入开仓(Direction:LONG,Offset:OPEN)
-
-**sell**:卖出平仓(Direction:SHORT,Offset:CLOSE)
-
-**short**:卖出开仓(Direction:SHORT,Offset:OPEN)
-
-**cover**:买入平仓(Direction:LONG,Offset:CLOSE)
-
-* 入参:price: float, volume: float, stop: bool = False, lock: bool = False, net: bool = False
-
-* 出参:vt_orderids: List[vt_orderid] / 无
-
-buy/sell/short/cover都是策略内部的负责发单的交易请求类函数。策略可以通过这些函数给CTA策略引擎发送交易信号来达到下单的目的。
-
-以下方buy函数的代码为例,可以看到,价格和数量是必填的参数,停止单转换、锁仓转换和净仓转换则默认为False。也可以看到,函数内部收到传进来的参数之后就调用了CtaTemplate里的send_order函数来发单(因为是buy指令,则自动把方向填成了LONG,开平填成了OPEN)
-
-如果stop设置为True,那么该笔订单则会自动转成停止单,如果接口支持交易所停止单则会转成交易所停止单,如果接口不支持交易所停止单则会转换成VeighNa的本地停止单。
-
-如果lock设置为True,那么该笔订单则会进行锁仓委托转换(在有今仓的情况下,如果想平仓,则会先平掉所有的昨仓,然后剩下的部分都进行反向开仓来代替平今仓,以避免平今的手续费惩罚)。
-
-如果net设置为True,那么该笔订单则会进行净仓委托转换(基于整体账户的所有仓位,根据净仓持有方式来对策略下单的开平方向进行转换)。但是净仓交易模式与锁仓交易模式互斥,因此net设置为True时,lock必须设置为False。
-
-请注意,如果向上期所发出平仓委托,因为该交易所必须指定平今、平昨,底层会对其平仓指令自动进行转换。因为上期所部分品种有平今优惠,所以默认是以平今优先的方式发出委托的(如果交易的标的在上期所平昨更优惠的话,可以自行在vnpy.trader.converter的convert_order_request_shfe函数中做适当的修改)。
-
-```python 3
- def buy(self, price: float, volume: float, stop: bool = False, lock: bool = False, net: bool = False):
- """
- Send buy order to open a long position.
- """
- return self.send_order(Direction.LONG, Offset.OPEN, price, volume, stop, lock, net)
-```
-
-请注意,国内期货有开平仓的概念,例如买入操作要区分为买入开仓和买入平仓;但对于股票、外盘期货都是净持仓模式,没有开仓和平仓概念,所以只需使用买入(buy)和卖出(sell)这两个指令就可以了。
-
-**send_order**
-
-* 入参:direction: Direction, offset: Offset, price: float, volume: float, stop: bool = False, lock: bool = False, net: bool = False
-
-* 出参:vt_orderids / 无
-
-send_order函数是CTA策略引擎调用的发送委托的函数。一般在策略编写的时候不需要单独调用,通过buy/sell/short/cover函数发送委托即可。
-
-实盘的时候,收到传进来的参数后,会调用round_to函数基于合约的pricetick和min_volume对委托的价格和数量进行处理。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回[]。
-
-**cancel_order**
-
-* 入参:vt_orderid: str
-
-* 出参:无
-
-**cancel_all**
-
-* 入参:无
-
-* 出参:无
-
-cancel_order和cancel_all都是负责撤单的交易请求类函数。cancel_order是撤掉策略内指定的活动委托,cancel_all是撤掉策略所有的活动委托。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-### 功能函数
-
-以下为策略以外的功能函数:
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**get_engine_type**
-
-* 入参:无
-
-* 出参:engine_type: EngineType
-
-如果策略对于回测和实盘时有不同的逻辑处理,可以调用get_engine_type函数获取当下使用的引擎类型来进行逻辑判断。
-
-请注意,如果要调用该函数进行逻辑判断,请在策略文件顶部导入“EngineType”。
-
-**get_pricetick**
-
-* 入参:无
-
-* 出参:pricetick: float / None
-
-在策略中调用get_pricetick函数,可以获取交易合约的最小价格跳动。
-
-**load_bar**
-
-* 入参:days: int, interval: Interval = Interval.MINUTE, callback: Callable = None, use_database: bool = False
-
-* 出参:无
-
-在策略中调用load_bar函数,可以在策略初始化时加载K线数据。
-
-如下方代码所示,调用load_bar函数时,默认加载的天数是10,频率是一分钟,对应也就是加载10天的1分钟K线数据。在回测时,10天指的是10个交易日,而在实盘时,10天则是指的是自然日,因此建议加载的天数宁可多一些也不要太少。use_database参数默认为False,会先依次尝试通过交易接口、数据服务、数据库获取历史数据,直到获取历史数据或返回空。当use_database设置为True后,会跳过通过交易接口和数据服务获取历史数据,直接去数据库查询。
-
-```python 3
- def load_bar(
- self,
- days: int,
- interval: Interval = Interval.MINUTE,
- callback: Callable = None,
- use_database: bool = False
- ):
- """
- Load historical bar data for initializing strategy.
- """
- if not callback:
- callback = self.on_bar
-
- self.cta_engine.load_bar(
- self.vt_symbol,
- days,
- interval,
- callback,
- use_database
- )
-```
-
-**load_tick**
-
-* 入参:days: int
-
-* 出参:无
-
-在策略中调用load_tick函数,可以在策略初始化时加载Tick数据。
-
-**put_event**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用put_event函数,可以通知图形界面刷新策略状态相关显示。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能刷新界面。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后(配置方法详见基本使用篇的全局配置部分),在策略中调用send_email函数,可以发送指定内容的邮件到自己的邮箱。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能发送邮件。
-
-**sync_data**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用sync_data函数,可以在实盘交易的时候,每次停止或成交时都同步策略变量到对应json文件中进行本地缓存,方便第二天初始化时再进行读取还原(CTA策略引擎会去调用,在策略里无需主动调用)。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能同步策略信息。
diff --git a/docs/community/app/data_manager.md b/docs/community/app/data_manager.md
deleted file mode 100644
index 04f8237..0000000
--- a/docs/community/app/data_manager.md
+++ /dev/null
@@ -1,192 +0,0 @@
-# DataManager - 历史数据管理模块
-
-## 功能简介
-
-DataManager是用于**历史数据管理**的功能模块,用户可以通过其UI界面操作来便捷完成数据下载、数据查看、数据导入和数据导出等任务。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【DataManager】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_datamanager import DataManagerApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(DataManagerApp)
-```
-
-
-## 启动模块
-
-启动VeighNa Trader后,在菜单栏中点击【功能】-> 【数据管理】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/00.png)
-
-即可进入历史数据管理UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/1.png)
-
-
-## 下载数据
-
-DataManager模块提供了一键下载历史数据的功能,点击右上角【下载数据】按钮,会弹出下载历史数据窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/2.png)
-
-需要填写代码、交易所、周期以及开始日期四个字段信息:
-
-
-
-- 代码
- - 代码格式为合约品种
- - 如IF888、rb2105
-- 交易所
- - 合约交易的交易所(点击窗口右侧箭头按钮可选择VeighNa支持的交易所列表)
-- 周期
- - MINUTE(1分钟K线)
- - HOUR(1小时K线)
- - DAILY(日K线)
- - WEEKLY(周K线)
- - TICK(一个Tick)
-- 开始日期
- - 格式为yy/mm/dd
- - 如2018/2/25
-
-
-
-填写完成后,点击下方【下载】按钮启动下载程序,下载成功如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/3.png)
-
-注意下载完成后的历史数据会保存在本地数据库中,后续回测或实盘时可以直接使用,无需每次都重复下载。
-
-### 数据来源:数据服务(期货、股票、期权)
-
-以RQData为例,[RQData](https://www.ricequant.com/welcome/purchase?utm_source=vnpy)提供国内期货、股票以及期权的历史数据。在使用前需要保证数据服务已经正确配置(配置方法详见基本使用篇的全局配置部分)。
-
-### 数据来源:IB(外盘期货、股票、现货等)
-
-Interactive Brokers盈透证券(IB)提供丰富的外盘市场历史数据下载(包括股票、期货、期权、现货等),注意下载前需要先启动IB TWS交易软件,并在VeighNa Trader主界面连接好IB接口,并订阅所需合约行情。
-
-
-## 导入数据
-
-如果已经从其他渠道获取到了CSV格式的数据文件,可以通过DataManager的数据导入功能,将其快速导入VeighNa数据库。点击右上角的【导入数据】按钮,会弹出从如下图所示的对话框:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/21.png)
-
-点击顶部的【选择文件】按钮,会弹出窗口选择要导入的CSV文件路径,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/5.png)
-
-然后配置数据导入的相关细节:
-
-- 合约信息
- - 格式详见本章[下载数据](#jump)部分的介绍;
- - 请注意,导入的合约代码(symbol)和交易所(exchange)两个字段组合起来,才能构成在CTA回测等模块中使用的本地代码(vt_symbol);
- - 若合约代码为**IF2003**,交易所选择**CFFEX**(中金所),则在CtaBacktester中回测要用到的本地代码应为**IF2003.CFFEX**;
- - 可以对时间戳时区进行选择;
-- 表头信息
- - 可查看CSV文件的表头信息,并将对应的表头字符串输入在表头信息中;
- - 对于CSV文件中不存在的字段(如股票数据没有【持仓量】字段),请留空即可;
-- 格式信息
- - 采用Python内置库datetime模块的时间格式定义,来解析时间戳字符串;
- - 默认时间格式为"%Y-%m-%d %H:%M:%S",对应的是"2017-1-3 0:00:00";
- - 如果时间戳是"2017-1-3 0:00",那么时间格式应该是"%Y-%m-%d %H:%M"。
-
-填写完毕,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/22.png)
-
-点击【确定】按钮,开始从CSV文件导入数据到数据库中。导入过程中界面会处于半卡住的情况,CSV文件越大(数据量越多),卡住的时间也会越长。成功载入之后,会弹出窗口显示载入成功,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/20.png)
-
-
-## 查看数据
-
-目前VeighNa Trader中获取数据的方式一共有三种:
-
-- 通过数据服务或者交易接口下载
-
-- 从CSV文件导入
-
-- 使用DataRecorder模块录制
-
-不管采用何种方法获取数据,点击左上角的【刷新】按钮,即可看到当前数据库中已有数据的统计情况(Tick数据除外)。刷新过程中界面可能会有偶尔的卡顿,通常对于越多的数据,卡顿的时间也会越长。刷新成功之后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/7.png)
-
-点击【查看】按钮,则会弹出选择数据要查看数据区间的对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/10.png)
-
-选择好要显示的数据范围后,点击【确定】按钮即可在右侧表格中看到每个时间点上具体的数据字段:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/11.png)
-
-在数据库已有数据的前提下,点击表格最左侧【数据】列下的数据频率前的小箭头,则可展开或收起该数据频率下的合约信息显示。
-
-若表格的右侧区域显示不完整,可拖动界面底端的横向滚动条进行调整。
-
-
-## 导出数据
-
-如果想导出数据库中的数据到本地CSV文件,则可选择要导出的合约,点击该合约所在行右侧的【导出】按钮后,会弹出选择数据区间对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/8.png)
-
-选择要导出的数据区间范围,点击【确定】后,会再次弹出对话框选择输出文件的位置,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/9.png)
-
-选择好导出文件要放置的目录,填写完CSV文件名之后,点击【保存】按钮即可完成CSV文件的导出。
-
-
-## 删除数据
-
-若想删除特定合约数据,则可选择要删除的合约,点击该合约行数据右侧的【删除】按钮后,会弹出对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/12.png)
-
-点击【OK】按钮即可删除该合约数据,并弹出删除成功窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/13.png)
-
-此时再点击【刷新】按钮,图形界面上已经没有该合约的信息了,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/14.png)
-
-
-## 更新数据
-
-在用户**配置了数据服务**或者**交易接口(已连接)提供充足的历史数据**的情况下,点击右上角的【更新数据】按钮,即可基于图形界面上显示的所有合约数据,执行一键自动下载更新。
-
-更新前图形界面显示如下图:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/17.png)
-
-点击【更新数据】按钮,会弹出更新进度的信息提示对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/19.png)
-
-此时DataManager会自动**从数据库中已有数据的结束日期开始,下载截止到当前最新日期**的数据,并更新到数据库中。
-
-如果需要更新的数据较少,则可能瞬间完成更新任务,此时没有观察到更新对话框也是正常的。
-
-更新完成后,点击左上角【刷新】按钮,即可看到该合约数据已更新至当前最新日期。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_manager/18.png)
-
-## 数据范围
-
-请注意,虽然界面上显示了数据库中已有数据的开始和结束时间,**但并不代表数据库中储存了从开始时间到结束时间之间所有的数据**。
-
-如果依赖于交易接口提供的历史数据,一但开始时间和结束时间之间的时间跨度超过接口所能提供的数据范围,就可能导致数据之间出现缺失的情况。因此建议更新数据之后,点击【查看】按钮检查一下该合约数据是否连续。
\ No newline at end of file
diff --git a/docs/community/app/data_recorder.md b/docs/community/app/data_recorder.md
deleted file mode 100644
index dc3ab12..0000000
--- a/docs/community/app/data_recorder.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# DataRecorder - 实盘行情记录模块
-
-DataRecorder是用于**实盘行情记录**的模块,用户可以利用该模块记录实时Tick数据和K线数据,并自动写入保存到数据库中。
-
-记录的数据可以通过DataManager模块查看,也可以用于CtaBacktester的历史回测,以及CtaStrategy、PortfolioStrategy等策略的实盘初始化。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【DataRecorder】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_datarecorder import DataRecorderApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(DataRecorderApp)
-```
-
-## 启动模块
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分),看到VeighNa Trader主界面【日志栏】输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【行情记录】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/1.png)
-
-即可启动DataRecorder,并弹出DataRecorder的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/4.png)
-
-
-## 添加记录
-
-DataRecorder模块支持按需添加K线(1分钟)和Tick数据的记录任务:
-
-1. 在【本地代码】编辑框中输入需要录制的合约本地代码(vt_symbol),如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/5.png)
-- 注意本地代码由代码前缀和交易所后缀两部分组成,如rb2112.SHFE;
-- 编辑框对于接口连接后收到的合约信息,提供自动补全功能(大小写敏感);
-
-2. 在【写入间隔】编辑框中选择定时批量写入频率,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/6.png)
-这样可以每次从队列中先取出所有待记录数据,再一次性把队列中已有数据写入数据库,从而降低数据库压力和记录延迟;
-
-3. 点击右侧【K线记录】或者【Tick记录】对应的【添加】按钮添加录制任务:
-
-- 添加成功后,合约本地代码会出现在下方的【K线记录列表】或者【Tick记录列表】中,并在界面下方输出对应日志,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/10.png)
-
-
-## 移除记录
-
-当不再需要记录某一合约的行情时,可以移除其对应的录制任务:
-
-1. 在【本地代码】编辑框中输入需要移除录制任务的合约本地代码(vt_symbol);
-2. 点击右侧【K线记录】或者【Tick记录】对应的【移除】按钮移除相应录制任务。
-
-移除成功,【K线记录列表】或者【Tick记录列表】下对应的录制任务信息会被移除,并在界面下方输出对应日志,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/data_recorder/9.png)
diff --git a/docs/community/app/excel_rtd.md b/docs/community/app/excel_rtd.md
deleted file mode 100644
index 2d46e90..0000000
--- a/docs/community/app/excel_rtd.md
+++ /dev/null
@@ -1,105 +0,0 @@
-# ExcelRtd - EXCEL RTD模块
-
-## 功能简介
-
-ExcelRtd是用于**在Excel中访问VeighNa程序内任意数据信息**的功能模块,
-RTD全称是RealTimeData,是微软提供的主要面向金融行业中实时数据需求设计的Excel数据对接方案。ExcelRtd依赖于PyXLLC模块(www.pyxll.com),该模块属于商业软件,需要购买才能使用(提供30天免费使用)。
-
-## 安装PyXLL
-为了使用ExcelRtd模块,需要安装PyXLL插件。步骤如下:
-
-首先进入[PyXLL官网](https://www.pyxll.com/),点击DownloadPyXLL,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_0.png)
-
-接着跳转到下载界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/13.png)
-
-这时需要填写相应字段,其中**Python Version**选择Python3.10,而**Excel Version**则根据自己安装的Excel版本选择,一般为64bit(x64)。
-
-填写完之后点击【Download PyXLL】,就会跳转到下载页面。将文件下载好之后,进入放置该文件的文件夹,按住shift键并且点击鼠标右键,选择【在此处打开PowerShell窗口】,运行以下命令:
-```bash
-pip install pyxll
-pyxll install
-```
-
-接着按照软件要求就能成功安装了。
-
-请注意,在执行到下图这一步时:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_9.png)
-
-如果没有具体指定路径,会安装到图中的默认位置(因为后面还需要进入这个文件夹,所以请记住这个路径)。
-
-接着进入该目录下的examples目录,并把路径~/veighna_studio/Lib/site-packages/vnpy_excelrtd/下的vnpy_rtd.py放入该目录,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_5.png)
-
-如此就算正式安装完成了。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【ExcelRtd】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_excelrtd import ExcelRtdApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(ExcelRtdApp)
-```
-
-## 启动模块
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】 -> 【Excel RTD】,或者点击左侧按钮栏的图表:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_6.png)
-
-即可进入Excel RTD模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/15.png)
-
-
-## 功能和配置
-
-### 基础应用
-
-在启动Excel RTD模块后,即可在Excel表格中通过PyXll调用该模块提供的功能(主要是通过rtd_tick_data函数获取实时数据)。
-
-首先打开一个excel表格,并且在每个单元格中调用rtd_tick_data函数并传入相应参数则可获取对应的数据,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/14.png)
-
-上图是获取豆油2205四个字段实时数据(分别是bid_price_1、high_price、low_price以及last_price)的例子。
-
-从图中可以看出rtd_tick_data函数需要两个参数:一个是vt_symbol,另一个是VeighNa中定义的TickData的属性(具体属性可参考源代码vnpy.trader.object.TickData)。这两个参数都是字符串,第一个参数可以通过单元格的具体位置指定,比如“A1”表示A列第1行的数据。
-
-与此同时,在Excel RTD模块的图形界面中也能看到相应输出,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/16.png)
-
-### 进阶应用
-当然,上面只是简单的展示了ExcelRtd模块的功能。至于具体获取哪些数据,以什么样的方式展示在excel上,则由用户根据自己的实际需求编写。这里提供几个进阶的案例,包括期货市场报价跟踪、市场深度行情跟踪以及价差监控:
-
-#### 期货市场报价跟踪
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_10.png)
-
-#### 市场深度行情跟踪
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_11.png)
-#### 价差监控
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/excel_rtd/excel_rtd_12.png)
\ No newline at end of file
diff --git a/docs/community/app/index.rst b/docs/community/app/index.rst
deleted file mode 100644
index fa6ee94..0000000
--- a/docs/community/app/index.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-策略应用
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
- :caption: Elite版
-
- cta_strategy.md
- cta_backtester.md
- spread_trading.md
- option_master.md
- portfolio_strategy.md
- algo_trading.md
- script_trader.md
- paper_account.md
- data_recorder.md
- data_manager.md
- risk_manager.md
- rpc_service.md
- chart_wizard.md
- portfolio_manager.md
- excel_rtd.md
- web_trader.md
diff --git a/docs/community/app/option_master.md b/docs/community/app/option_master.md
deleted file mode 100644
index 2c659ac..0000000
--- a/docs/community/app/option_master.md
+++ /dev/null
@@ -1,283 +0,0 @@
-# OptionMaster - 期权波动率交易模块
-
-## 功能简介
-
-OptionMaster是用于**期权波动率交易**的功能模块,用户可以通过OptionMaster完成期权实时定价、波动率曲面跟踪、持仓希腊值监控、组合压力测试、电子眼自动交易等功能。
-
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【OptionMaster】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_optionmaster import OptionMasterApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(OptionMasterApp)
-```
-
-
-## 启动模块
-
-启动VeighNa Trader后,在菜单栏中点击【功能】-> 【期权交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/1.png)
-
-即可进入OptionMaster管理界面(下称管理界面),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/2.png)
-
-
-## 配置组合
-
-在管理界面上,选择要交易的期权产品,点击【配置】按钮打开如下图所示的组合配置对话框:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/3.png)
-
-
-配置参数如下:
-
-* 定价模型
- * Black-76模型:针对欧式期货期权(股指期权);
- * Black-Scholes模型:针对欧式股票期权(ETF期权);
- * Binomial-Tree模型:针对美式期货期权(商品期权);
-* 年化利率
- * 定价模型中用到的无风险折现利率;
-* 合约模式
- * 正向:包括ETF期权、期货期权、股指期权等大多数产品;
-* Greeks小数位
- * 显示希腊值时保留的小数位数;
-* 期权链对应的定价标的
- * 注意只有选择了标的物的期权链,才会被加入交易组合;
- * 定价标的物支持
- * 期货合约:交易所本身提供的期货价格;
- * 合成期货:基于期权价格算出的合成期货价格;
- * OptionMaster在定价计算过程中会对标的物价格相对期权链的升贴水进行自动修正,因此推荐选择交易最活跃的合约作为标的物。
-
-点击底部的【确认】按钮,完成期权组合的初始化,此时管理界面上的【配置】按钮会被锁定,而其他按钮则会被激活。
-
-
-## 行情监控
-
-点击管理界面的【T型报价】按钮,打开T型报价窗口:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/4.png)
-
-窗口整体分为左右区域,中间白色列为行权价,左侧为看涨期权,右侧为看跌期权。
-
-每行显示的为某一行权价期权对应的信息,从外向内显示的信息包括:
-
-* 合约代码
-* 期权的实时现金希腊值
- * Vega
- * Theta
- * Gamma
- * Delta
-* 交易信息
- * 持仓量
- * 成交量
-* 1档盘口信息
- * 买隐波
- * 买量
- * 买价
- * 卖价
- * 卖量
- * 卖隐波
-* 净持仓
-
-
-## 快速交易
-
-点击管理界面的【快速交易】按钮,打开手动下单窗口:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/5.png)
-
-整体使用方法和VeighNa Trader主界面的交易组件相似,输入合约代码、买卖方向、开平方向、交易价格和数量后,点击【委托】按钮即可发出限价委托,点击【全撤】按钮即可一键全撤当前的全部活动委托。
-
-双击T型报价中某一期权的单元格,可以快速填充本窗口的【代码】编辑框。
-
-
-## 持仓希腊值
-
-点击管理界面的【持仓希腊值】按钮,打开希腊值风险监控窗口:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/16.png)
-
-窗口中的监控信息分为四个维度:
-
-* 交易组合(包括所有下属期权链和标的物汇总数据)
-* 标的物合约
-* 期权链(包括所有下属期权汇总数据)
-* 期权合约
-
-每个维度的监控信息包括:
-
-* 持仓相关
- * 多仓:当前的多头持仓
- * 空仓:当前的空头持仓
- * 净仓:多仓 - 空仓
-* 总希腊值
- * Delta:标的价格涨跌1%对应的该维度盈亏金额
- * Gamma:标的价格涨跌1%对应的该维度的Delta变动
- * Theta:每过去一个交易日,该维度的盈亏金额
- * Vega:隐含波动率涨跌1%对应的该维度的盈亏金额
-
-## 升贴水监控
-
-点击管理界面的【升贴水监控】按钮,打开期权链定价升贴水校准幅度的监控窗口:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/6.png)
-
-以上图为例,可以看到:
-
-* IO2104,以对应月份期货IF2104定价,升贴水接近0;
-* IO2105、IO2106、IO2109,以活跃合约IF2104定价,贴水依次增加;
-* IO2112、IO2203,以对应月份的合成期货定价,升贴水为0。
-
-
-## 波动率曲线
-
-点击管理界面的【波动率曲线】按钮,打开当前的市场波动率曲线监控图表:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/7.png)
-
-图表中每个期权链的波动率曲线采用不同颜色显示,具体颜色对应期权链的图例在左侧。
-
-每个期权链会包括三条曲线:
-
-* 向上箭头:该月份看涨期权的1档盘口隐含波动率中值,即买1价和卖1价盘口波动率的均值;
-* 向下箭头:该月份看跌期权的1档盘口隐含波动率中值;
-* 小圆点:该月份定价波动率的数值,定价波动率用于希腊值计算和电子眼交易,通过后面的【波动率管理】组件设置。
-
-图表中显示的曲线通过窗口顶部每个期权链对应的勾选框来控制,可以根据需求进行调整,如下图中只显示了IO2109这一个期权链:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/17.png)
-
-
-## Delta对冲
-
-点击管理界面的【Delta对冲】按钮,打开交易组合的Delta自动对冲功能:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/8.png)
-
-* 对冲标的:可以选择投资组合内的任意一个标的物合约;
-* 执行频率:多久执行一次检查,判断是否要执行对冲;
-* Delta目标:如果触发对冲,将Delta值对冲到多少;
- * 选择0,即为保持整体组合的Delta中性;
- * 选择正数,即为保持整体组合的Delta多头敞口;
- * 选择负数,即为保持整体组合的Delta空头敞口;
-* Delta范围:当仓位类型的Delta值偏离上述Delta目标超过多少时,触发对冲任务;
-* 委托超价:发出对冲委托时,价格相对于对面盘口的超价;
-
-点击【启动】按钮即可启动自动对冲功能,当读秒达到执行间隔时即会执行一次检查,如果满足条件则会启动TWAP算法执行对冲操作。
-
-点击【停止】按钮即可停止自动对冲功能的运行。
-
-## 情景分析
-
-点击管理界面的【情景分析】按钮,打开交易组合整体持仓风险的压力测试和情景分析功能:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/9.png)
-
-首先配置执行的分析任务:
-
-* 目标数据:支持盈亏、Delta、Gamma、Theta、Vega;
-* 时间衰减:交易日的衰减天数;
-* 价格变动:
- * 分析中价格的涨跌变动范围;
- * 假设单前价格为100,变动为10%,则范围为90~110;
-* 波动率变动:
- * 分析中波动率的涨跌变动范围;
- * 假设当前波动率为20%,变动为10%,则范围为10%~30%。
-
-点击执行分析按钮后,压力测试引擎会根据当前的交易组合持仓,以及每个情景下的价格和隐含波动率情况,来计算对应的目标数据,并将结果绘制为3D曲面。
-
-下图显示的是以Gamma值为计算目标,10%价格变动,15%波动率变动的结果:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/18.png)
-
-该3D图中的垂直轴为计算目标的数值,水平的两轴分别为价格和波动率的变动数值。
-
-
-## 波动率管理
-
-点击管理界面的【波动率管理】按钮,打开定价波动率管理界面:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/11.png)
-
-点击顶部的期权链标签切换对应期权链的定价波动率管理组件,第一次打开时下方表格中的【定价隐波】数值均为0。
-
-首先进行定价曲线的初始化,点击顶部的【重置】按钮,将当前该行权价的虚值期权的中值隐波,映射到定价隐波上。
-
-映射完成后可以在波动率图表中查看当前的定价波动率曲线形状,如果某一行权价的定价隐波和整体曲线相比存在不平滑的情况,则可以基于相对平滑的行权价的定价隐波对其进行拟合。
-
-在组件表格中的【执行拟合】列,勾选要执行拟合的行权价勾选框,勾选完成后点击顶部的【拟合】按钮,即可基于OptionMaster内置的Cubic Spline(三项式差值)算法来执行波动率曲线的拟合。
-
-拟合完成后如果还存在不满意的部分,则可以通过【定价隐波】列的滚动框来进行手动微调,点击上下箭头每次上升或者下跌0.1%,或者也可以直接输入想要修改的数值。
-
-当因为对波动率曲线高低的整体观点,需要对曲线进行整体平移时,可以通过组件顶部的【+0.1%】和【-0.1%】按钮,来对所有行权价的定价波动率进行平移调整。
-
-## 电子眼
-
-点击管理界面的【电子眼】按钮,打开交易组合的电子眼自动套利算法功能:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/12.png)
-
-电子眼算法可以基于交易员预设的定价波动率曲线,在允许的持仓范围内自动捕捉市场上出现的瞬时交易执行机会,同时结合Delta自动对冲功能来保证投资组合的整体Delta中性。
-
-电子眼界面类似T型报价分为左右区域,中间的白色为行权价,左侧为看涨期权,右侧为看跌期权。每个期权上对应存在一个独立的电子眼交易算法,交易员可以同时启动数百个交易算法(具体数量取决于CPU性能)而互不干扰。
-
-每个电子眼算法的配置参数包括:
-
-* 交易价差相关
- * 价格价差
- * 隐波价差
-* 仓位限制相关
- * 持仓范围
- * 目标持仓
-* 最大委托
- * 单笔最大的委托数量
-* 方向
- * 算法允许的交易方向
- * 包括只允许做多、只允许做空、允许双向交易
-
-电子眼算法的执行流程如下:
-
-1. 基于定价波动率,计算期权的**理论价**
-2. 计算目标买卖的价差:
- 1. 隐波价差的价格值 = 隐波价差 * 期权理论Vega值
- 2. 交易价差 = max(价格价差, 隐波价差的价格值)
-3. 计算目标买卖价:
- 1. 目标买价 = 理论价 - 交易价差 / 2
- 2. 目标卖价 = 理论价 + 交易价差 / 2
-4. 以做多交易为例,当盘口卖1价格低于目标买价时,触发买入信号
-5. 计算本轮委托量:
- 1. 算法持仓上限 = 目标持仓 + 持仓范围
- 2. 剩余多头可交易量 = 算法多头持仓上限 - 当前净持仓
- 3. 本轮委托量 = min(剩余多头可交易量,卖1量,最大委托量)
-6. 使用目标买价和本轮委托量,发出对应的交易委托
-
-配置好算法参数后,点击该行的【定价】列的按钮启动算法的定价计算,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/13.png)
-
-【定价】和【交易】按钮的状态显示:
-
-* 为N时,代表算法当前未启动该任务
-* 为Y时,代表算法已在执行对应的任务
-
-启动定价的4个期权算法,会开始实时更新目标买卖价等相关数值。
-
-此时点击【交易】列的按钮,即可启动算法的交易执行,当价格和持仓满足条件时就会自动发出交易委托,详细的算法运行状态日志信息可以通过右侧日志区域监控:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/option_master/14.png)
-
-当需要对算法配置进行批量修改时,可以通过电子眼窗口的右上角的全局修改功能进行操作,更加方便快捷。
-
diff --git a/docs/community/app/paper_account.md b/docs/community/app/paper_account.md
deleted file mode 100644
index 5e8f6cc..0000000
--- a/docs/community/app/paper_account.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# PaperAccount - 本地仿真交易模块
-
-
-## 功能简介
-
-PaperAccount是用于**本地仿真交易**的功能模块,用户可以通过其UI界面基于实盘行情进行本地化的模拟交易。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【PaperAccount】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_paperaccount import PaperAccountApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(PaperAccountApp)
-```
-
-
-## 启动模块
-
-在启动模块之前,请先连接要进行模拟交易的接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-交易接口连接后,本地模拟交易模块自动启动。此时所有合约的交易委托和撤单请求均**被本地模拟交易模块接管**,不会再发往实盘服务器。
-
-
-## 功能配置
-
-在菜单栏中点击【功能】-> 【模拟交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/paper_account/4.png)
-
-即可进入本地模拟交易模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/paper_account/5.png)
-
-用户可以通过UI界面对以下功能进行配置:
-
-- 市价委托和停止委托的成交滑点
- - 用于影响市价单和停止单成交时,成交价格相对于盘口价格的**滑点跳数**;
-
-- 模拟交易持仓盈亏的计算频率
- - 多少秒执行一次持仓盈亏计算更新,如果持仓较多时发现程序卡顿,建议尝试调低频率;
-
-- 下单后立即使用当前盘口撮合
- - 默认情况下,用户发出的委托需要**等到下一个TICK盘口推送才会撮合**(模拟实盘情景),对于TICK推送频率较低的不活跃合约可以勾选该选项,委托后会**立即基于当前的最新TICK盘口撮合**;
-
-- 清空所有持仓
- - 一键清空本地所有持仓数据。
-
-本地模拟交易模块同样可以和其他策略应用模块(如CtaStrategy模块、SpreadTrading模块等)一起使用,从而实现本地化的量化策略仿真交易测试。
-
-
-## 数据监控
-
-用户可以通过【查询合约】来查询确认合约的交易接口状态:
-
-点击菜单栏的【帮助】->【合约查询】,在弹出的对话框中直接点击右上角的【查询】按钮,发现所有合约的【交易接口】列均显示为PAPER,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/paper_account/2.png)
-
-在对某一合约进行下单和撤单操作前,用户必须先**订阅**该合约的行情。
-
-下图中【委托】、【成交】、【持仓】三个监控组件中显示的信息,其接口列均为PAPER(本地模拟数据):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/paper_account/3.png)
-
-请注意,本地模拟交易模块**没有提供资金计算功能**,所以【资金】组件显示的是实盘账号的资金,并不会因为在本地模拟交易模块产生的委托而改变。
-
-
-## 业务逻辑
-
-本地模拟交易模块的业务逻辑如下所示:
-
-- 支持的委托类型(不支持的类型会被拒单):
-
- - 限价单;
- - 市价单;
- - 停止单;
-
-- 委托撮合规则采用**到价成交**模式,以买入委托为例:
-
- - 限价单:当盘口卖1价ask_price_1小于等于委托价格,则成交;
- - 停止单:当盘口卖1价ask_price_1大于等于委托价格,则成交;
-
-- 委托成交时**不考虑盘口挂单量**,一次性全部成交;
-
-- 委托成交后,先推送委托状态更新OrderData,再推送成交信息TradeData,**和实盘交易中的顺序一致**;
-
-- 委托成交后,模块会自动记录相应的持仓信息PositionData:
-
- - 根据合约本身的持仓模式(多空仓 vs 净仓位)信息,维护对应的持仓信息;
- - **开仓成交时,采用加权平均计算更新持仓成本价;**
- - **平仓成交时,持仓成本价不变;**
- - 多空仓模式下,挂出平仓委托后会冻结相应的持仓数量,可用数量不足时会拒单;
- - 持仓的盈亏会基于持仓成本价和最新成交价定时计算(默认频率1秒);
-
-- 数据的持久化保存:
-
- - 成交数据和委托数据不保存,关闭VeighNa Trader后即消失;
- - 持仓数据会在有变化时**立即写入硬盘文件**,重启VeighNa Trader登录交易接口后即可看到(要收到相应的合约信息)。
diff --git a/docs/community/app/portfolio_manager.md b/docs/community/app/portfolio_manager.md
deleted file mode 100644
index eb183ef..0000000
--- a/docs/community/app/portfolio_manager.md
+++ /dev/null
@@ -1,122 +0,0 @@
-
-# PortfolioManager - 投资组合管理模块
-
-## 功能简介
-
-PortfolioManager是用于**投资组合管理**的功能模块,用户可以在盘中通过其UI界面对交易策略进行实时的业绩跟踪和盈亏分析。
-
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【PortfolioManager】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_portfoliomanager import PortfolioManagerApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(PortfolioManagerApp)
-```
-
-
-## 启动模块
-
-在菜单栏中点击【功能】-> 【投资组合】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_manager/1.jpg)
-
-即可进入投资组合管理模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_manager/6.png)
-
-
-## 组合信息表
-
-界面整体可以分为左右两部分,左边显示的是当前已有投资组合的信息表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_manager/7.png)
-
-
-组合信息表每列的含义如下:
-
- - 组合名称:委托来源标识(reference),所有从VeighNa发出的委托请求都可以直接通过该标识来区分其交易来源,如手动交易、算法执行、量化策略等,每个交易来源可以视作一个独立的投资组合。
-
- - 手动交易:ManualTrading
-
- - CTA策略:CtaStrategy_策略名
-
- - 价差交易:SpreadTrading_价差名
-
- - 期权交易:OptionMaster_ElectronicEye/DeltaHedging
-
- - 算法交易:AlgoTrading_算法编号
-
- - 脚本策略:ScriptTrader
-
- - 组合策略:PortfolioStrategy_策略名
-
- - 本地代码:带交易所后缀的合约代码(vt_symbol)
-
- - 开盘仓位:昨日收盘时(今日开盘),投资组合内该合约的持仓
-
- - 当前仓位:开盘仓位加上今日成交数量(多头成交 - 空头成交)的结果
-
- - 交易盈亏:今日所有成交,以成交价格映射到当前最新价的盈亏
-
- - 持仓盈亏:组合开盘仓位,以昨收盘价映射到当前最新价的盈亏
-
- - 总盈亏:交易盈亏和持仓盈亏的和
-
- - 多头成交:投资组合内该合约今日买开和买平成交数量
-
- - 空头成交:投资组合内该合约今日卖开和卖平成交数量
-
-其中,交易盈亏(TradingPnl)和持仓盈亏(HoldingPnl)的计算方式采用的是期货交易所每日结算时所用的逐日盯市(Marking to Market)算法,计算过程如下所示:
-
- - 交易盈亏 = 持仓量 * (当日收盘价-昨日收盘价)* 合约规模
-
- - 持仓盈亏 = 持仓变化量 * (当日收盘价 - 开仓成交价)* 合约规模
-
- - 总盈亏 = 交易盈亏 + 持仓盈亏
-
- - 净盈亏 = 总盈亏 - 总手续费 - 总滑点
-
-用户可以通过展开和折叠投资组合,调整列宽来查看信息:
-
- - 点击每个投资组合左侧的箭头可以展开和折叠各投资组合的信息;
-
- - 点击顶部的【全部展开】和【全部折叠】按钮对所有投资组合进行批量操作;
-
- - 点击【调整列宽】按钮可以自动调整表格每列的宽度。
-
-## 成交记录表
-
-界面右侧部分显示的是所有成交记录,点击右上角的下拉框可以根据投资组合进行筛选,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_manager/8.png)
-
-
-## 刷新频率
-
-投资组合的盈亏基于定时逻辑自动计算,计算频率可以通过顶部中间的选项框进行调整,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_manager/5.png)
-
-
-请注意,所有组合的持仓数据会在关闭VeighNa Trader时写入缓存文件中,所以不要直接杀进程退出,会丢失数据。
-
-在隔日加载时,程序会自动将昨天的总仓位结算到今天的昨仓数据字段中,该逻辑对于24小时交易的市场(外盘期货)不一定合适,后续考虑加入每日定时结算或者手动结算功能。
-
-如果发现有仓位记录错误,或者策略已经移除的情况,可以手动修改缓存文件,再重新启动VeighNa Trader即可。
-
-Windows系统上缓存文件的默认路径位于:
-
- C:\Users\Administrator\.vntrader\portfolio_manager_data.json
-
-其中Administrator是当前Windows系统的用户名。
\ No newline at end of file
diff --git a/docs/community/app/portfolio_strategy.md b/docs/community/app/portfolio_strategy.md
deleted file mode 100644
index 82a2dc2..0000000
--- a/docs/community/app/portfolio_strategy.md
+++ /dev/null
@@ -1,883 +0,0 @@
-# PortfolioStrategy - 多合约组合策略模块
-
-## 功能简介
-
-PortfolioStrategy是用于**多合约组合策略实盘**的功能模块,用户可以通过其UI界面操作来便捷完成策略初始化、策略启动、策略停止、策略参数编辑以及策略移除等任务。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【PortfolioStrategy】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_portfoliostrategy import PortfolioStrategyApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(PortfolioStrategyApp)
-```
-
-
-## 启动模块
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
- C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【组合策略】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/0.png)
-
-即可进入多合约组合策略模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/1.png)
-
-如果配置了数据服务(配置方法详见基本使用篇的全局配置部分),打开多合约组合策略模块时会自动执行数据服务登录初始化。若成功登录,则会输出“数据服务初始化成功”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/2.png)
-
-
-## 添加策略
-
-用户可以基于编写好的组合策略模板(类)来创建不同的策略实例(对象)。
-
-在左上角的下拉框中选择要交易的策略名称,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/3.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/4.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 实例名称不能重名;
-- 合约品种
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 一定要是实盘交易系统中可以查到的合约名称;
- - 合约名用“,”隔开,中间不加空格;
-- 参数设置
- - 显示的参数名是策略里写在parameters列表中的参数名;
- - 默认数值为策略里的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在左侧的策略监控组件中看到该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/5.png)
-
-策略监控组件顶部显示的是策略实例名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的portfolio_strategy_setting.json文件中。
-
-请注意,如果添加了同名的策略实例,则会创建失败,图形界面输出“创建策略失败,存在重名”的日志信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/8.png)
-
-
-## 管理策略
-
-### 初始化
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/6.png)
-
-初始化完成后,可观察到此时该策略实例的【inited】状态已经为【True】。说明该策略实例已经加载过历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-请注意,与CTA策略不同,如果创建实例时输入错误的vt_symbol,多合约组合策略模块会在初始化时报错,而不是在创建策略实例时报错,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/7.png)
-
-### 启动
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动该策略的自动交易功能。点击该策略实例下的【启动】按钮,即可启动该策略实例。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/10.png)
-
-可观察到此时该策略实例的【inited】和【trading】状态都为【True】。说明此时该策略实例已经完成了历史数据回放,而且此时策略内部的交易请求类函数(buy/sell/short/cover/cancel_order等),以及信息输出类函数(send_email/put_event等),才会真正执行并发出对应的请求指令到底层接口中(真正执行交易)。
-
-在上一步策略初始化的过程中,尽管策略同样在接收(历史)数据,并调用对应的功能函数,但因为【trading】状态为【False】,所以并不会有任何真正的委托下单操作或者交易相关的日志信息输出。
-
-如果启动之后,策略发出了委托,可以去VeighNa Trader主界面【委托】栏查看委托订单细节,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/9.png)
-
-请注意,与CTA策略模块不同,多合约组合策略**不提供本地停止单功能**,所以UI界面上不会有停止单的显示区域了。
-
-
-### 停止
-
-如果启动策略之后,由于某些情况(如到了市场收盘时间,或盘中遇到紧急情况)想要停止、编辑或者移除策略,可以点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/11.png)
-
-组合策略引擎会自动将该策略之前发出的所有活动委托全部撤销,以保证在策略停止后不会有失去控制的委托存在。同时该策略实例最新的变量信息会被保存到.vntrader文件夹下的portfolio_strategy_data.json文件中。
-
-此时可观察到该策略实例的【trading】状态已变为【False】,说明此时该策略实例已经停止自动交易了。
-
-在多合约组合策略的实盘交易过程中,正常情况应该让策略在整个交易时段中都自动运行,尽量不要有额外的暂停重启类操作。对于国内期货市场来说,应该在交易时段开始前,启动策略的自动交易,然后直到收盘后,再关闭自动交易。因为现在CTP夜盘收盘后也会关闭系统,早上开盘前重启,所以夜盘收盘后也需要停止策略,关闭VeighNa Trader了。
-
-### 编辑
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/12.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中。
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下porfolio_strategy_setting.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-修改前,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/18.png)
-
-
-修改后,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/17.png)
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例。
-
-### 移除
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面左侧的策略监控组件中将不会再显示该策略实例的信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/13.png)
-
-此时.vntrader文件夹下的portfolio_strategy_setting.json文件也移除了该策略实例的配置信息。
-
-### 状态跟踪
-
-如果想要通过图形界面跟踪策略的状态,有两种方式:
-
-1. 调用put_event函数
-
- 策略实例中所有的的变量信息,都需要把变量名写在策略的variables列表中,才能在图形界面显示。如果想跟踪变量的状态变化,则需要在策略中调用put_event函数,界面上才会进行数据刷新。
-
- 有时用户会发现自己写的策略无论跑多久,变量信息都不发生变化,这种情况请检查策略中是否漏掉了对put_event函数的调用。
-
-2. 调用write_log函数
-
- 如果不仅想观察到变量信息的状态变化,还想根据策略的状态输出基于自己需求的个性化的日志,可以在策略中调用write_log函数,进行日志输出。
-
-## 运行日志
-
-### 日志内容
-
-多合约组合策略模块UI界面上输出的日志有两个来源,分别是策略引擎和策略实例。
-
-**引擎日志**
-
-策略引擎一般输出的是全局信息。下图中除了策略实例名后加冒号的内容之外,都是策略引擎输出的日志。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/15.png)
-
-**策略日志**
-
-如果在策略中调用了write_log函数,那么日志内容就会通过策略日志输出。下图红框里的内容是策略实例输出的策略日志。冒号前是策略实例的名称,冒号后是write_log函数输出的内容。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/16.png)
-
-### 清空操作
-
-如果想要清空多合约组合策略UI界面上的日志输出,可以点击右上角的【清空日志】按钮,则可一键清空该界面上已输出的日志。
-
-点击【清空日志】后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/14.png)
-
-## 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的组合策略实例,可以使用界面右上角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-### 全部初始化
-
-在所有策略实例创建成功后,点击右上角的【全部初始化】按钮,则可批量初始化策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/19.png)
-
-### 全部启动
-
-在所有策略实例初始化成功后,点击右上角的【全部启动】按钮,则可批量启动策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/20.png)
-
-### 全部停止
-
-在所有策略实例启动成功后,点击右上角的【全部停止】按钮,则可批量停止策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/portfolio_strategy/21.png)
-
-## 多合约组合策略模板(StrategyTemplate)-- 基础
-
-多合约组合策略模板提供了信号生成和委托管理功能,用户可以基于该模板(位于site-packages\vnpy_portfoliostrategy\template中)自行开发多合约组合策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
-
-1. 策略文件命名采用下划线模式,如portfolio_boll_channel_strategy.py,而策略类命名采用驼峰式,如PortfolioBollChannelStrategy。
-
-2. 自建策略的类名不要与示例策略的类名重合。如果重合了,图形界面上只会显示一个策略类名。
-
-下面通过PortfolioBollChannelStrategy策略示例,来展示策略开发的具体步骤:
-
-在基于策略模板编写策略逻辑之前,需要在策略文件的顶部载入需要用到的内部组件,如下方代码所示:
-
-```python 3
-from typing import List, Dict
-from datetime import datetime
-
-from vnpy.trader.utility import ArrayManager, Interval
-from vnpy.trader.object import TickData, BarData
-from vnpy_portfoliostrategy import StrategyTemplate, StrategyEngine
-from vnpy_portfoliostrategy.utility import PortfolioBarGenerator
-```
-
-其中,StrategyTemplate是策略模板,StrategyEngine是策略引擎,Interval是数据频率,TickData和BarData都是储存对应信息的数据容器,PortfolioBarGenerator是组合策略K线生成模块,ArrayManager是K线时间序列管理模块。
-
-### 策略参数与变量
-
-在策略类的下方,可以设置策略的作者(author),参数(parameters)以及变量(variables),如下方代码所示:
-
-```python 3
-
- author = "用Python的交易员"
-
- boll_window = 18
- boll_dev = 3.4
- cci_window = 10
- atr_window = 30
- sl_multiplier = 5.2
- fixed_size = 1
- price_add = 5
-
- parameters = [
- "boll_window",
- "boll_dev",
- "cci_window",
- "atr_window",
- "sl_multiplier",
- "fixed_size",
- "price_add"
- ]
- variables = []
-
-```
-
-虽然策略的参数和变量都从属于策略类,但策略参数是固定的(由交易员从外部指定),而策略变量则在交易的过程中随着策略的状态而变化,所以策略变量一开始只需要初始化为对应的基础类型。例如:整数设为0,浮点数设为0.0,而字符串则设为""。
-
-如果需要策略引擎在运行过程中,将策略参数和变量显示在UI界面上,并在数据刷新、停止策略时保存其数值,则需把参数和变量的名字(以字符串的数据类型)添加进parameters和variables列表里。
-
-请注意,该列表只能接受参数或变量以str、int、float和bool四种数据类型传入。如果策略里需要用到其他数据类型的参数与变量,请把该参数或变量的定义放到__init__函数下。
-
-### 类的初始化
-
-入参:strategy_engine: StrategyEngine, strategy_name: str, vt_symbols: List[str], setting: dict
-
-出参:无
-
-__init__函数是策略类的构造函数,需要与继承的StrategyTemplate保持一致。
-
-在这个继承的策略类里,初始化一般分四步,如下方代码所示:
-
-```python 3
- def __init__(
- self,
- strategy_engine: StrategyEngine,
- strategy_name: str,
- vt_symbols: List[str],
- setting: dict
- ):
- """"""
- super().__init__(strategy_engine, strategy_name, vt_symbols, setting)
-
- self.boll_up: Dict[str, float] = {}
- self.boll_down: Dict[str, float] = {}
- self.cci_value: Dict[str, float] = {}
- self.atr_value: Dict[str, float] = {}
- self.intra_trade_high: Dict[str, float] = {}
- self.intra_trade_low: Dict[str, float] = {}
-
- self.targets: Dict[str, int] = {}
- self.last_tick_time: datetime = None
-
- self.ams: Dict[str, ArrayManager] = {}
- for vt_symbol in self.vt_symbols:
- self.ams[vt_symbol] = ArrayManager()
- self.targets[vt_symbol] = 0
-
- self.pbg = PortfolioBarGenerator(self.on_bars, 2, self.on_2hour_bars, Interval.HOUR)
-```
-
-1 . 通过super( )的方法继承策略模板,在__init__( )函数中传入策略引擎、策略名称、vt_symbols以及参数设置(以上参数均由策略引擎在使用策略类创建策略实例时自动传入,用户无需进行设置)。
-
-2 . 创建策略所需的存放不同合约K线时间序列管理实例(ArrayManager)和策略变量的字典。
-
-3 . 分别为策略交易的不同合约创建ArrayManager和目标仓位变量并放进字典里。
-
-ArrayManager的默认长度为100,如需调整ArrayManager的长度,可传入size参数进行调整(size不能小于计算指标的周期长度)。
-
-4 . 调用组合策略K线生成模块(PortfolioBarGenerator):通过时间切片将Tick数据合成1分钟K线数据。如有需求,还可合成更长的时间周期数据,如15分钟K线。
-
-如果只基于on_bar进行交易,这里代码可以写成:
-
-```python 3
- self.pbg = PortfolioBarGenerator(self.on_bars)
-```
-
-而不用给pbg实例传入需要基于on_bars周期合成的更长K线周期,以及接收更长K线周期的函数名。
-
-请注意:
-
- - 合成X分钟线时,X必须设为能被60整除的数(60除外)。对于小时线的合成没有这个限制。
-
- - PortfolioBarGenerator默认的基于on_bar函数合成长周期K线的数据频率是分钟级别,如果需要基于合成的小时线或者更长周期的K线交易,请在策略文件顶部导入Interval,并传入对应的数据频率给bg实例。
-
- - **self.on_hour_bars函数名在程序内部已使用**,如需合成1小时K线,请使用self.on_1_hour_bars或者其他命名。
-
-### 策略引擎调用的函数
-
-StrategyTemplate中的update_setting函数和该函数后面四个以get开头的函数以及update_trade和update_order函数,都是策略引擎去负责调用的函数,一般在策略编写的时候是不需要调用的。
-
-### 策略的回调函数
-
-StrategyTemplate中以on开头的函数称为回调函数,在编写策略的过程中能够用来接收数据或者接收状态更新。回调函数的作用是当某一个事件发生的时候,策略里的这类函数会被策略引擎自动调用(无需在策略中主动操作)。回调函数按其功能可分为以下两类:
-
-#### 策略实例状态控制(所有策略都需要)
-
-**on_init**
-
-* 入参:无
-
-* 出参:无
-
-初始化策略时on_init函数会被调用,默认写法是先调用write_log函数输出“策略初始化”日志,再调用load_bars函数加载历史数据。如下方代码所示:
-
-```python 3
- def on_init(self):
- """
- Callback when strategy is inited.
- """
- self.write_log("策略初始化")
- self.load_bars(10)
-```
-
-与CTA策略不同,多合约组合策略只支持K线回测,所以多合约策略模板并没有load_ticks函数。
-
-策略初始化时,策略的inited和trading状态都为【False】,此时只是调用ArrayManager计算并缓存相关的计算指标,不能发出交易信号。调用完on_init函数之后,策略的inited状态才变为【True】,策略初始化才完成。
-
-**on_start**
-
-* 入参:无
-
-* 出参:无
-
-启动策略时on_start函数会被调用,默认写法是调用write_log函数输出“策略启动”日志,如下方代码所示:
-
-```python 3
- def on_start(self):
- """
- Callback when strategy is started.
- """
- self.write_log("策略启动")
-```
-
-调用策略的on_start函数启动策略后,策略的trading状态变为【True】,此时策略才能够发出交易信号。
-
-**on_stop**
-
-* 入参:无
-
-* 出参:无
-
-停止策略时on_stop函数会被调用,默认写法是调用write_log函数输出“策略停止”日志,如下方代码所示:
-
-```python 3
- def on_stop(self):
- """
- Callback when strategy is stopped.
- """
- self.write_log("策略停止")
-```
-
-调用策略的on_stop函数停止策略后,策略的trading状态变为【False】,此时策略就不会发出交易信号了。
-
-#### 接收数据、计算指标、发出交易信号
-
-**on_tick**
-
-* 入参:tick: TickData
-
-* 出参:无
-
-绝大部分交易系统都只提供Tick数据的推送。即使一部分平台可以提供K线数据的推送,但是这些数据到达本地电脑的速度也会慢于Tick数据的推送,因为也需要平台合成之后才能推送过来。所以实盘的时候,VeighNa里所有的策略的K线都是由收到的Tick数据合成的。
-
-当策略收到实盘中最新的Tick数据的行情推送时,on_tick函数会被调用。默认写法是通过PortfolioBarGenerator的update_tick函数把收到的Tick数据推进前面创建的pbg实例中以便合成1分钟的K线,如下方代码所示:
-
-```python 3
- def on_tick(self, tick: TickData):
- """
- Callback of new tick data update.
- """
- self.pbg.update_tick(tick)
-```
-
-请注意,on_tick函数只在实盘中会被调用,回测不支持。
-
-**on_bars**
-
-* 入参:bars: Dict[str, BarData]
-
-* 出参:无
-
-当策略收到最新的K线数据时(实盘时默认推进来的是基于Tick合成的一分钟的K线,回测时则取决于选择参数时填入的K线数据频率),on_bars函数就会被调用。
-
-与CTA策略模块不同,多合约组合策略模块在接收K线推送时,是通过on_bars回调函数一次性接收该时间点上所有合约的K线数据,而不是通过on_bar函数一个个接收(无法判断当前时点的K线是否全部走完了 )。
-
-示例策略里出现过的写法有两种:
-
-1 . 如果策略基于on_bars推进来的K线交易,那么请把交易请求类函数都写在on_bars函数下(因本次示例策略类PortfolioBollChannelStrategy不是基于on_bars交易,故不作示例讲解。基于on_bars交易的示例代码可参考其他示例策略);
-
-2 . 如果策略需要基于on_bars推进来的K线数据通过PortfolioBarGenerator合成更长时间周期的K线来交易,那么请在on_bars中调用PortfolioBarGenerator的update_bars函数,把收到的bars推进前面创建的pbg实例中即可,如下方代码所示:
-
-```python 3
- def on_bars(self, bars: Dict[str, BarData]):
- """
- Callback of new bars data update.
- """
- self.pbg.update_bars(bars)
-```
-
-示例策略类PortfolioBollChannelStrategy是通过2小时K线数据回报来生成信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_2hour_bars(self, bars: Dict[str, BarData]):
- """"""
- self.cancel_all()
-
- for vt_symbol, bar in bars.items():
- am: ArrayManager = self.ams[vt_symbol]
- am.update_bar(bar)
-
- for vt_symbol, bar in bars.items():
- am: ArrayManager = self.ams[vt_symbol]
- if not am.inited:
- return
-
- self.boll_up[vt_symbol], self.boll_down[vt_symbol] = am.boll(self.boll_window, self.boll_dev)
- self.cci_value[vt_symbol] = am.cci(self.cci_window)
- self.atr_value[vt_symbol] = am.atr(self.atr_window)
-
- current_pos = self.get_pos(vt_symbol)
- if current_pos == 0:
- self.intra_trade_high[vt_symbol] = bar.high_price
- self.intra_trade_low[vt_symbol] = bar.low_price
-
- if self.cci_value[vt_symbol] > 0:
- self.targets[vt_symbol] = self.fixed_size
- elif self.cci_value[vt_symbol] < 0:
- self.targets[vt_symbol] = -self.fixed_size
-
- elif current_pos > 0:
- self.intra_trade_high[vt_symbol] = max(self.intra_trade_high[vt_symbol], bar.high_price)
- self.intra_trade_low[vt_symbol] = bar.low_price
-
- long_stop = self.intra_trade_high[vt_symbol] - self.atr_value[vt_symbol] * self.sl_multiplier
-
- if bar.close_price <= long_stop:
- self.targets[vt_symbol] = 0
-
- elif current_pos < 0:
- self.intra_trade_low[vt_symbol] = min(self.intra_trade_low[vt_symbol], bar.low_price)
- self.intra_trade_high[vt_symbol] = bar.high_price
-
- short_stop = self.intra_trade_low[vt_symbol] + self.atr_value[vt_symbol] * self.sl_multiplier
-
- if bar.close_price >= short_stop:
- self.targets[vt_symbol] = 0
-
- for vt_symbol in self.vt_symbols:
- target_pos = self.targets[vt_symbol]
- current_pos = self.get_pos(vt_symbol)
-
- pos_diff = target_pos - current_pos
- volume = abs(pos_diff)
- bar = bars[vt_symbol]
- boll_up = self.boll_up[vt_symbol]
- boll_down = self.boll_down[vt_symbol]
-
- if pos_diff > 0:
- price = bar.close_price + self.price_add
-
- if current_pos < 0:
- self.cover(vt_symbol, price, volume)
- else:
- self.buy(vt_symbol, boll_up, volume)
- elif pos_diff < 0:
- price = bar.close_price - self.price_add
-
- if current_pos > 0:
- self.sell(vt_symbol, price, volume)
- else:
- self.short(vt_symbol, boll_down, volume)
-
- self.put_event()
-```
-
-- 清空未成交委托:为了防止之前下的单子在上一个2小时没有成交,但是下一个2小时可能已经调整了价格,就用cancel_all()方法立刻撤销之前未成交的所有委托,保证策略在当前这2小时开始时的整个状态是清晰和唯一的;
-
-- 调用K线时间序列管理模块:基于最新的2小时K线数据来计算相应的技术指标,如布林带上下轨、CCI指标、ATR指标等。首先获取ArrayManager对象,然后将收到的K线推送进去,检查ArrayManager的初始化状态,如果还没初始化成功就直接返回,没有必要去进行后续的交易相关的逻辑判断。因为很多技术指标计算对最少K线数量有要求,如果数量不够的话计算出来的指标会出现错误或无意义。反之,如果没有return,就可以开始计算技术指标了;
-
-- 信号计算:通过持仓的判断以及结合CCI指标、ATR指标在通道突破点挂出**限价单委托**(buy/sell),同时设置离场点(short/cover)。
-
- 请注意:
- 1. 在CTA策略模块中,通常都是通过访问策略的变量pos获取策略持仓来进行持仓判断。但在多合约组合策略模块中,是通过调用get_pos函数获取某一合约现在的持仓来进行逻辑判断,然后设定该合约的目标仓位,最后通过目标仓位和实际仓位的差别来进行逻辑判断进而发出交易信号的;
-
- 2. 如果需要在图形界面刷新指标数值,请不要忘记调用put_event()函数。
-
-#### 委托状态更新
-
-因为组合策略中需要对多合约同时下单交易,在回测时无法判断某一段K线内部每个合约委托成交的先后时间顺序,因此无法提供on_order和on_trade函数来获取委托成交推送,而只能在每次on_bars回调时通过get_pos和get_order来进行相关的状态查询。
-
-### 主动函数
-
-**buy**:买入开仓(Direction:LONG,Offset:OPEN)
-
-**sell**:卖出平仓(Direction:SHORT,Offset:CLOSE)
-
-**short**:卖出开仓(Direction:SHORT,Offset:OPEN)
-
-**cover**:买入平仓(Direction:LONG,Offset:CLOSE)
-
-* 入参:vt_symbol: str, price: float, volume: float, lock: bool = False, net: bool = False
-
-* 出参:vt_orderids: List[str] / 无
-
-buy/sell/short/cover都是策略内部的负责发单的交易请求类函数。策略可以通过这些函数给策略引擎发送交易信号来达到下单的目的。
-
-以下方buy函数的代码为例,可以看到,**具体要交易合约的代码**,价格和数量是必填的参数,锁仓转换和净仓转换则默认为False。也可以看到,函数内部收到传进来的参数之后就调用了StrategyTemplate里的send_order函数来发单(因为是buy指令,则自动把方向填成了LONG,开平填成了OPEN)。
-
-与CTA策略模块不同,组合策略模块不提供本地停止单功能,所以委托函数中移除了stop参数。
-
-如果lock设置为True,那么该笔订单则会进行锁仓委托转换(在有今仓的情况下,如果想平仓,则会先平掉所有的昨仓,然后剩下的部分都进行反向开仓来代替平今仓,以避免平今的手续费惩罚)。
-
-如果net设置为True,那么该笔订单则会进行净仓委托转换(基于整体账户的所有仓位,根据净仓持有方式来对策略下单的开平方向进行转换)。但是净仓交易模式与锁仓交易模式互斥,因此net设置为True时,lock必须设置为False。
-
-请注意,如果向上期所发出平仓委托,因为该交易所必须指定平今、平昨,底层会对其平仓指令自动进行转换。因为上期所部分品种有平今优惠,所以默认是以平今优先的方式发出委托的(如果交易的标的在上期所平昨更优惠的话,可以自行在vnpy.trader.converter的convert_order_request_shfe函数中做适当的修改)。
-
-```python 3
- def buy(self, vt_symbol: str, price: float, volume: float, lock: bool = False, net: bool = False) -> List[str]:
- """
- Send buy order to open a long position.
- """
- return self.send_order(vt_symbol, Direction.LONG, Offset.OPEN, price, volume, lock, net)
-```
-
-请注意,国内期货有开平仓的概念,例如买入操作要区分为买入开仓和买入平仓;但对于股票、外盘期货都是净持仓模式,没有开仓和平仓概念,所以只需使用买入(buy)和卖出(sell)这两个指令就可以了。
-
-**send_order**
-
-* 入参:vt_symbol: str, direction: Direction, offset: Offset, price: float, volume: float, lock: bool = False, net: bool = False
-
-* 出参:vt_orderids: List[str] / 无
-
-send_order函数是策略引擎调用的发送委托的函数。一般在策略编写的时候不需要单独调用,通过buy/sell/short/cover函数发送限价委托即可。
-
-实盘的时候,收到传进来的参数后,会调用round_to函数基于合约的pricetick和min_volume对委托的价格和数量进行处理。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回[]。
-
-**cancel_order**
-
-* 入参:vt_orderid: str
-
-* 出参:无
-
-**cancel_all**
-
-* 入参:无
-
-* 出参:无
-
-cancel_order和cancel_all都是负责撤单的交易请求类函数。cancel_order是撤掉策略内指定的活动委托,cancel_all是撤掉策略所有的活动委托。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-### 功能函数
-
-以下为策略以外的功能函数:
-
-**get_pos**
-
-* 入参:vt_symbol: str
-
-* 出参:int / 0
-
-在策略里调用get_pos函数,可以获取特定合约的持仓数据。
-
-**get_order**
-
-* 入参:vt_orderid
-
-* 出参:OrderData / 无
-
-在策略里调用get_order函数,可以获取特定合约的委托数据。
-
-**get_all_active_orderids**
-
-* 入参:无
-
-* 出参:List[OrderData] / 无
-
-在策略里调用get_all_active_orderids函数,可以获取当前全部活动委托号。
-
-**get_pricetick**
-
-* 入参:vt_symbol
-
-* 出参:pricetick: float / None
-
-在策略里调用get_price函数,可以获取特定合约的最小价格跳动。
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**load_bars**
-
-* 入参:days: int, interval: Interval = Interval.MINUTE
-
-* 出参:无
-
-在策略中调用load_bars函数,可以在策略初始化时加载K线数据。
-
-如下方代码所示,load_bars函数调用时,默认加载的天数是10,频率是一分钟,对应也就是加载10天的1分钟K线数据。在回测时,10天指的是10个交易日,而在实盘时,10天则是指的是自然日,因此建议加载的天数宁可多一些也不要太少。加载时会先依次尝试通过交易接口、数据服务、数据库获取历史数据,直到获取历史数据或返回空。
-
-```python 3
- def load_bars(self, days: int, interval: Interval = Interval.MINUTE) -> None:
- """
- Load historical bar data for initializing strategy.
- """
- self.strategy_engine.load_bars(self, days, interval)
-```
-
-**put_event**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用put_event函数,可以通知图形界面刷新策略状态相关显示。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能刷新界面。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后(配置方法详见基本使用篇的全局配置部分),在策略中调用send_email函数,可以发送指定内容的邮件到自己的邮箱。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能发送邮件。
-
-**sync_data**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用sync_data函数,可以在实盘的时候,每次停止或成交时都同步策略变量进json文件中进行本地缓存,方便第二天初始化时再进行读取还原(策略引擎会去调用,在策略里无需主动调用)。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能同步策略信息。
-
-## 多合约组合策略模板(StrategyTemplate)-- 进阶
-
-PortfolioStrategy模块针对的是多标的投资组合类的量化策略,这类策略在执行层面追求的是将策略投资组合的持仓调整到目标状态,而不去过多关注底层的委托交易细节。
-
-首先介绍持仓目标调仓交易的功能函数,来展示持仓目标调仓交易的功能支持:
-
-### 持仓目标调仓交易的功能函数介绍
-
-以下为持仓目标调仓交易模式中策略调用的功能函数:
-
-**set_target**
-
-* 入参:vt_symbol: str, target: int
-
-* 出参:无
-
-在策略里调用set_target函数,可以设定特定合约的目标仓位。
-
-请注意:目标仓位是一种持续性的状态,因此设置后在后续时间会持续保持下去,直到被再次设置修改。
-
-**get_target**
-
-* 入参:vt_symbol: str
-
-* 出参:int
-
-在策略里调用get_target函数,可以获取设定的特定合约目标仓位。
-
-请注意:策略的目标仓位状态会在sync_data时(成交、停止等)自动持久化到硬盘文件,并在策略重启后恢复。
-
-**rebalance_portfolio**
-
-* 入参:bars: Dict[str, BarData]
-
-* 出参:无
-
-在策略里调用rebalance_portfolio函数,可以基于设定的特定合约的目标仓位执行调仓交易。
-
-请注意:只有当前bars字典中有K线切片的合约,才会参与本次调仓交易的执行,从而保证非交易时段(没有行情推送)的合约不会错误发出委托。
-
-**calculate_price**
-
-* 入参:vt_symbol: str, direction: Direction, reference: float
-
-* 出参:pricetick: float
-
-在策略里重载calculate_price函数,可以按需设定特定合约的目标价格(如固定价格超价、固定pricetick超价、百分比超价等)。
-
-如果不传则默认返回参考价格(如不在策略中重载,则在rebalance_portfolio函数中以K线的收盘价作为委托价发出)。
-
-### 持仓目标调仓交易的功能函数使用示例
-
-持仓目标调仓交易功能与StrategyTemplate基础用法最大的不同,就在于策略on_bars函数中的处理差异。下面通过TrendFollowingStrategy策略示例,来展示持仓目标调仓交易的具体步骤:
-
-**on_bars**
-
-* 入参:bars: Dict[str, BarData]
-
-* 出参:无
-
-当策略收到最新的K线数据时(实盘时默认推进来的是基于Tick合成的一分钟的K线,回测时则取决于选择参数时填入的K线数据频率),on_bars函数就会被调用。
-
-示例策略类TrendFollowingStrategy是通过一分钟K线数据回报来生成信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_bars(self, bars: Dict[str, BarData]) -> None:
- """K线切片回调"""
- # 更新K线计算RSI数值
- for vt_symbol, bar in bars.items():
- am: ArrayManager = self.ams[vt_symbol]
- am.update_bar(bar)
-
- for vt_symbol, bar in bars.items():
- am: ArrayManager = self.ams[vt_symbol]
- if not am.inited:
- return
-
- atr_array = am.atr(self.atr_window, array=True)
- self.atr_data[vt_symbol] = atr_array[-1]
- self.atr_ma[vt_symbol] = atr_array[-self.atr_ma_window:].mean()
- self.rsi_data[vt_symbol] = am.rsi(self.rsi_window)
-
- current_pos = self.get_pos(vt_symbol)
- if current_pos == 0:
- self.intra_trade_high[vt_symbol] = bar.high_price
- self.intra_trade_low[vt_symbol] = bar.low_price
-
- if self.atr_data[vt_symbol] > self.atr_ma[vt_symbol]:
- if self.rsi_data[vt_symbol] > self.rsi_buy:
- self.set_target(vt_symbol, self.fixed_size)
- elif self.rsi_data[vt_symbol] < self.rsi_sell:
- self.set_target(vt_symbol, -self.fixed_size)
- else:
- self.set_target(vt_symbol, 0)
-
- elif current_pos > 0:
- self.intra_trade_high[vt_symbol] = max(self.intra_trade_high[vt_symbol], bar.high_price)
- self.intra_trade_low[vt_symbol] = bar.low_price
-
- long_stop = self.intra_trade_high[vt_symbol] * (1 - self.trailing_percent / 100)
-
- if bar.close_price <= long_stop:
- self.set_target(vt_symbol, 0)
-
- elif current_pos < 0:
- self.intra_trade_low[vt_symbol] = min(self.intra_trade_low[vt_symbol], bar.low_price)
- self.intra_trade_high[vt_symbol] = bar.high_price
-
- short_stop = self.intra_trade_low[vt_symbol] * (1 + self.trailing_percent / 100)
-
- if bar.close_price >= short_stop:
- self.set_target(vt_symbol, 0)
-
- self.rebalance_portfolio(bars)
-
- self.put_event()
-```
-
-- 调用K线时间序列管理模块:基于最新的分钟K线数据来计算相应的技术指标,如ATR指标、RSI指标等。首先获取ArrayManager对象,然后将收到的K线推送进去,检查ArrayManager的初始化状态,如果还没初始化成功就直接返回,没有必要去进行后续的交易相关的逻辑判断。因为很多技术指标计算对最少K线数量有要求,如果数量不够的话计算出来的指标会出现错误或无意义。反之,如果没有return,就可以开始计算技术指标了;
-
-- 信号计算:通过持仓的判断(get_pos)以及结合指标计算结果在通道突破点**设定目标仓位**(set_target)
-
-- 执行调仓交易(rebalance_portfolio)
-
-**calculate_price**
-
-* 入参:vt_symbol: str, direction: Direction, reference: float
-
-* 出参:prcie: float
-
-当rebalance_portfolio函数检测到目标仓位与实际仓位存在差别的时候,会调用calculate_price函数计算调仓委托价格。
-
-策略内的默认写法是针对委托方向基于设置的price_add来计算委托价格,也可以参考示例策略PairTradingStrategy中的基于设置的tick_add来计算委托价格。
-
-```python 3
- def calculate_price(self, vt_symbol: str, direction: Direction, reference: float) -> float:
- """计算调仓委托价格(支持按需重载实现)"""
- if direction == Direction.LONG:
- price: float = reference + self.price_add
- else:
- price: float = reference - self.price_add
-
- return price
-```
-
-### 与StrategyTemplate基础用法的差别
-
-**on_bars**
-
-1 . 无需清空未成交委托:rebalance_portfolio中已经有调用cancel_all函数的逻辑,无需再在收到on_bars函数推送的时候调用cancel_all函数对未成交的委托进行撤单处理。
-
-2 . 无需使用self.targets字典缓存合约目标仓位:直接调用set_target函数传入合约以及目标仓位(正数代表做多、负数代表做空)进行设置即可。
-
-3 . 无需基于缓存的目标仓位在策略内手写委托逻辑:rebalance_portfolio函数已经自动接管调仓交易,会基于目标仓位进行委托。
-
-**calculate_price**
-
-持仓目标调仓交易需要调用calculate_price函数计算调仓委托价格。
diff --git a/docs/community/app/risk_manager.md b/docs/community/app/risk_manager.md
deleted file mode 100644
index 013cd9a..0000000
--- a/docs/community/app/risk_manager.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# RiskManager - 事前风控管理模块
-
-## 功能简介
-
-RiskManager模块是用于**事前风控管理**的功能模块,用户可以通过其UI界面操作来便捷完成启动风控,参数修改和停止风控等任务。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【RiskManager】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_riskmanager import RiskManagerApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(RiskManagerApp)
-```
-
-## 启动模块
-
-在菜单栏中点击【功能】-> 【交易风控】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/risk_manager/1-1.png)
-
-即可进入事前风控模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/risk_manager/1-2.png)
-
-
-## 启动风控
-
-事前风控模块负责在委托通过交易API接口发出前,检查其状态是否符合各种风控规则。风控规则包括交易流控、下单数量、活动委托、撤单总数等,具体如下:
-
- - 委托流控相关:
- - 委托流控上限:给定时间窗口内最多允许发出的委托笔数
- - 委托流控清空:每隔多少秒清零上述统计的委托笔数
- - 单笔委托上限:每一笔委托允许的最大下单量
- - 总成交上限:今天日内允许的最大总成交笔数(注意不是委托笔数)
- - 活动委托上限:允许的处于活动状态(提交中、未成交、部分成交)最大委托数量
- - 合约撤单上限:今天日内允许的单合约撤单次数上限(每个合约独立统计)
-
-推荐每天在运行自动交易前启动事前风控,以检查每一笔发出的委托是否符合风控要求:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/risk_manager/1-3.png)
-
-1. 在【风控运行状态】一栏的下拉框中选择【启动】;
-2. 设定各种风控规则的参数后,点击下方的【保存】按钮,即可开始运行风控;
-3. 此时系统内的每一笔委托,都需要满足全部风控要求(不超过限制)后,才能通过底层接口发出。
-
-
-## 参数修改
-
-事前风控模块允许用户自定义风控参数:
-
-* 用户可以点击输入框右侧的上下箭头来修改参数,也可以直接输入数字来修改,如下图所示。
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/risk_manager/1-4.png)
-* 修改后请点击【保存】按钮生效。
-
-## 停止风控
-
-不需要运行风控时,用户可以停止风控:
-
-* 在【风控运行状态】的下拉框中选择【停止】,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/risk_manager/1-5.png)
-* 点击下方的【保存】按钮即可停止对委托的风控检查。
diff --git a/docs/community/app/rpc_service.md b/docs/community/app/rpc_service.md
deleted file mode 100644
index 6b2f308..0000000
--- a/docs/community/app/rpc_service.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# RpcService - RPC服务器模块
-
-## 功能简介
-
-RpcService是用于**将VeighNa Trader进程转化为RPC服务器**的功能模块,对外提供交易路由、行情数据推送、持仓资金查询等功能。
-
-关于RPC的具体应用场景请参考本文档结尾的【RPC的应用场景】版块。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【RpcService】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-›
-```python 3
-# 写在顶部
-from vnpy_rpcservice import RpcServiceApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(RpcServiceApp)
-```
-
-### 启动模块
-
-在启动模块之前,请先连接登录交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/market_radar/1.png)
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【RPC服务】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/rpc_service/1.png)
-
-即可进入RPC服务模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/rpc_service/2.png)
-
-## 配置和使用
-
-### 配置RPC服务
-RPC服务基于ZeroMQ开发,对外的通讯地址包括:
-
-* **请求响应地址**
- * 用于被动接收客户端发送过来的请求,执行对应任务后返回结果;
- * 功能举例:
- * 行情订阅;
- * 委托下单;
- * 委托撤单;
- * 初始化信息查询(合约、持仓、资金等);
-* **事件广播地址**
- * 用于主动推送服务端收到的事件数据,到所有已连接的客户端;
- * 功能举例:
- * 行情推送;
- * 委托推送;
- * 成交推送。
-
-以上地址均采用ZeroMQ的地址格式,由**通讯协议**(如tcp://)和**通讯地址**(如127.0.0.1:2014)两部分组成。
-
-RPC服务支持的通讯协议包括:
-
-* **TCP协议**
- * 协议前缀:tcp://
- * Windows和Linux系统均可使用
- * 可用于本机通讯(127.0.0.1)或者网络通讯(网络IP地址)
-* **IPC协议**
- * 协议前缀:ipc://
- * 只能在Linux系统上使用(POSIX本地端口通讯)
- * 只能用于本机通讯,后缀为任意字符串内容
-
-一般推荐直接使用TCP协议(以及默认地址),对于使用Ubuntu系统且希望追求更低通讯延时的用户可以使用IPC协议。
-
-### 运行RPC服务
-
-完成通讯地址的配置后,点击【启动】按钮即可启动RPC服务,日志区域会输出"RPC服务启动成功",如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/rpc_service/3.png)
-
-启动成功后,即可在另一VeighNa Trader进程中(客户端)使用RpcGateway来连接
-
-如需停止RPC服务可以点击【停止】按钮,此时日志输出"RPC服务已停止"。
-
-
-### 连接客户端
-
-VeighNa提供了与RpcService配套使用的RpcGateway,作为客户端的标准接口来连接服务端并进行交易,对上层应用透明。
-
-从客户端的视角看,RpcGateway是类似CTP的接口。因为已经在服务端统一完成外部交易账户的配置连接,客户端只需要和服务器端进行通讯即可,无需再次输入账户密码等信息。
-
-在客户端加载RpcGateway接口后,进入VeighNa Trader主界面,点击菜单栏中【系统】->【连接RPC】,在弹出的窗口中点击【连接】即可连接使用,如下图所示。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/rpc_service/5.png)
-
-【主动请求地址】和【推送订阅地址】,分别对应之前在服务端配置的【请求响应地址】和【事件广播地址】,注意不要写反。
-
-
-## RPC简介
-
-由于全局解释器锁GIL的存在,导致单一Python进程只能利用CPU单核的算力。远程过程调用(Remote Procedure Call Protocol, RPC)服务可以用于**跨进程或者跨网络的服务功能调用**,有效解决了上述问题。
-
-由一个特定的进程连接交易接口充当**服务器**的角色,在本地物理机或者局域网内部向其他独立的**客户端**进程主动推送事件,并处理客户端相关请求,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/rpc_service/7.png)
-
-## RPC服务(RpcService)的应用场景
-
-- 针对运行策略数量较多的用户,只需本地一条行情和交易通道,可以支持多个客户端进程同时交易,且每个客户端中交易策略独立运行,互不影响;
-- 针对中小型投资机构用户,可以通过在服务端加载各种交易接口以及RiskManagerApp,实现一个轻量级的资管交易系统,多个交易员共享统一的交易通道,并实现基金产品级别的风险管理。
diff --git a/docs/community/app/script_trader.md b/docs/community/app/script_trader.md
deleted file mode 100644
index 82f721e..0000000
--- a/docs/community/app/script_trader.md
+++ /dev/null
@@ -1,439 +0,0 @@
-# ScriptTrader - 脚本策略交易模块
-
-## 功能简介
-
-ScriptTrader是用于**脚本策略交易**的功能模块,提供了交互式的量化分析和程序化交易功能,又提供以整个策略连续运行的脚本策略功能。
-
-故其可视为直接利用Python对交易客户端进行操作。它与CTA策略模块的区别在于:
-
-- 突破了单交易所,单标的的限制;
-- 可以较方便的实现如股指期货和一篮子股票之间的对冲策略、跨品种套利、股票市场扫描自动化选股等功能。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【ScriptTrader】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_scripttrader import ScriptTraderApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(ScriptTraderApp)
-```
-
-## 启动模块
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【脚本策略】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/0.png)
-
-即可进入脚本交易模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/1.png)
-
-如果配置了数据服务(配置方法详见基本使用篇的全局配置部分),打开脚本交易模块时会自动执行数据服务登录初始化。若成功登录,则会输出“数据服务初始化成功”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/20.png)
-
-用户可以通过UI界面使用以下功能:
-
-### 启动
-
-脚本策略需要事先编写好脚本策略文件,如test_strategy.py(脚本策略模板可参考[**脚本策略**](#jump)部分),因此点击【打开】按钮后需要用户指定该脚本策略文件的路径,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/21.png)
-
-打开脚本策略之后,点击【启动】按钮则会启动脚本策略,并在下方界面输出相关信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/8.png)
-
-### 停止
-
-如果想停止脚本策略,直接点击【停止】按钮,之后策略会停止,通知会在下方界面输出“策略交易脚本停止”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/11.png)
-
-### 清空
-
-如果觉得下方显示界面的信息太多,或者想开启新的脚本策略,可以点击【清空】按钮,这时下方的所有信息就会被清空,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/10.png)
-
-
-## 脚本策略模板
-
-
-
-脚本策略文件编写需要遵循一定格式,下面提供使用模板,其作用为:
-
-- 订阅两个品种的行情;
-- 打印合约信息;
-- 每隔3秒获取最新行情。
-
-```python 3
-from time import sleep
-from vnpy_scripttrader import ScriptEngine
-
-def run(engine: ScriptEngine):
- """"""
- vt_symbols = ["sc2209.INE", "sc2203.INE"]
-
- # 订阅行情
- engine.subscribe(vt_symbols)
-
- # 获取合约信息
- for vt_symbol in vt_symbols:
- contract = engine.get_contract(vt_symbol)
- msg = f"合约信息,{contract}"
- engine.write_log(msg)
-
- # 持续运行,使用strategy_active来判断是否要退出程序
- while engine.strategy_active:
- # 轮询获取行情
- for vt_symbol in vt_symbols:
- tick = engine.get_tick(vt_symbol)
- msg = f"最新行情, {tick}"
- engine.write_log(msg)
-
- # 等待3秒进入下一轮
- sleep(3)
-```
-
-其中engine.strategy_active用于控制While循环,可视作是脚本策略的开关:
-
-- 点击【启动】按钮,启动While循环,执行脚本策略;
-- 点击【停止】按钮,退出While循环,停止脚本策略。
-
-
-## 功能函数
-
-Jupyter模式是基于脚本引擎(ScriptEngine)驱动的,下面通过jupyter notebook来说明ScriptEngine引擎的各功能函数。
-
-首先打开Jupyter notebook,然后加载组件、初始化脚本引擎:
-
-```python 3
-from vnpy_scripttrader import init_cli_trading
-from vnpy_ctp import CtpGateway
-engine = init_cli_trading([CtpGateway])
-```
-
-其中:
-
-- 脚本引擎可以支持同时连接多个接口;
-- init_cli_trading(gateways: Sequence[BaseGateway])可以将多个接口类,以列表的形式传递给init_cli_trading;
-- init_cli_trading可视为vnpy封好的初始化启动函数,对主引擎、脚本引擎等各种对象进行了封装。
-
-### 连接接口
-
-**connect_gateway**
-
-* 入参:setting: dict, gateway_name: str
-
-* 出参:无
-
-不同接口需要不同的配置参数,SimNow的配置如下:
-```json
-setting = {
- "用户名": "xxxx",
- "密码": "xxxx",
- "经纪商代码": "9999",
- "交易服务器":"180.168.146.187:10202",
- "行情服务器":"180.168.146.187:10212",
- "产品名称":"simnow_client_test",
- "授权编码":"0000000000000000"
-}
-engine.connect_gateway(setting,"CTP")
-```
-
-其他接口配置可以参考site-packages目录下不同接口模块类(如vnpy_ctp.gateway.ctp_gateway)中的default_setting来填写。
-
-### 订阅行情
-
-**subscribe**
-
-* 入参:vt_symbols: Sequence[str]
-
-* 出参:无
-
-subscribe()函数用于订阅行情信息,若需要订阅一篮子合约的行情,可以使用列表格式。
-```python 3
-engine.subscribe(vt_symbols = ["rb2209.SHFE","rb2210.SHFE"])
-```
-
-### 查询数据
-这里介绍一下连接上交易接口并成功订阅数据后的数据存储:
-
-- 底层接口不停向主引擎推送新的数据;
-- 主引擎里维护着一个ticks字典用于缓存不同标的的最新tick数据(仅能缓存最新数据);
-- use_df的作用是转换成DataFrame格式,便于数据分析。
-
-#### 单条查询
-
-**get_tick**
-
-* 入参:vt_symbol: str, use_df: bool = False
-
-* 出参:TickData
-
-查询单个标的最新tick,use_df为可选参数,用于把返回的类对象转化成DataFrame格式,便于数据分析。
-
-```python 3
-tick = engine.get_tick(vt_symbol="rb2210.SHFE",use_df=False)
-```
-
-其中:
-
-- vt_symbol:为本地合约代码,格式是合约品种+交易所,如rb2210.SHFE;
-- use_df:为bool变量,默认False,返回TickData类对象,否则返回相应DataFrame,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/13.png)
-
-**get_order**
-
-* 入参:vt_orderid: str, use_df: bool = False
-
-* 出参:OrderData
-
-根据vt_orderid查询委托单的详细信息。
-
-```python 3
-order = engine.get_order(vt_orderid="CTP.3_-1795780178_1",use_df=False)
-```
-
-其中,vt_orderid为本地委托号(在委托下单时,会自动返回该委托的vt_orderid)。
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/14.png)
-
-**get_contract**
-
-* 入参:vt_symbol, use_df: bool = False
-
-* 出参:ContractData
-
-根据本地vt_symbol来查询对应合约对象的详细信息。
-
-```python 3
-contract = engine.get_contract(vt_symbol="rb2210.SHFE",use_df=False)
-```
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/15.png)
-
-**get_account**
-
-* 入参:vt_accountid: str, use_df: bool = False
-
-* 出参:AccountData
-
-根据本地vt_accountid来查询对应资金信息。
-
-```python 3
-account = engine.get_account(vt_accountid="CTP.189672",use_df=False)
-```
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/16.png)
-
-**get_position**
-
-* 入参:vt_positionid: str, use_df: bool = False
-
-* 出参:PositionData
-
-根据vt_positionid来查询持仓情况,返回对象包含接口名称、交易所、合约代码、数量、冻结数量等。
-
-```python 3
-position = engine.get_position(vt_positionid='CTP.hc2305.SHFE.多')
-```
-注意,vt_positionid为vnpy内部对于一笔特定持仓的唯一持仓编号,格式为"gateway_name.vt_symbol.Direction.value",其中持仓方向可选“多”、“空”和“净”,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/17.png)
-
-#### 多条查询
-
-**get_ticks**
-
-* 入参:vt_symbols: Sequence[str], use_df: bool = False
-
-* 出参:Sequence[TickData]
-
-查询多个合约最新tick。
-
-```python 3
-ticks = engine.get_ticks(vt_symbols=['rb2209.SHFE','rb2210.SHFE'],use_df=True)
-```
-
-vt_symbols是列表格式,里面包含多个vt_symbol,如图。
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/18.png)
-
-
-**get_orders**
-
-* 入参:vt_orderids: Sequence[str], use_df: bool = False
-
-* 出参:Sequence[OrderData]
-
-根据查询多个vt_orderid查询其详细信息。vt_orderids为列表,里面包含多个vt_orderid。
-
-```python 3
-orders = engine.get_orders([orderid_one,orderid_two],use_df=True)
-```
-
-**get_trades**
-
-* 入参:vt_orderid: str, use_df: bool = False
-
-* 出参:Sequence[TradeData]
-
-根据给定的一个vt_orderid返回这次报单过程中的所有TradeData对象。vt_orderid是本地委托号,每一个委托OrderData,由于部分成交关系,可以对应多笔成交TradeData。
-
-```python 3
-trades = engine.get_trades(vt_orderid=your_vt_orderid,use_df=True)
-```
-
-**get_bars**
-
-* 入参:vt_symbol: str, start_date: str, interval: Interval, use_df: bool = False
-
-* 出参:Sequence[BarData]
-
-通过配置的数据服务查询历史数据。
-
-```python 3
-bars = engine.get_bars(vt_symbol="rb2210.SHFE",start_date="20211201",
- interval=Interval.MINUTE,use_df=False)
-```
-
-其中:
-
-- vt_symbol:本地合约代码,格式为合约代码 + 交易所名称;
-- start_date:起始日期,格式为"%Y%m%d";
-- interval:K线周期,包括:分钟、小时、日、周;
-- bars:包含了一系列BarData数据的列表对象,其BarData的定义如下:
-```python 3
-@dataclass
-class BarData(BaseData):
-
- symbol: str
- exchange: Exchange
- datetime: datetime
-
- interval: Interval = None
- volume: float = 0
- turnover: float = 0
- open_interest: float = 0
- open_price: float = 0
- high_price: float = 0
- low_price: float = 0
- close_price: float = 0
-
- def __post_init__(self):
- self.vt_symbol = f"{self.symbol}.{self.exchange.value}"
-```
-
-#### 全量查询
-
-在全量查询中,唯一参数是use_df,默认为False。返回的是一个包含相应数据的List对象,例如ContractData、AccountData和PositionData。
-
-**get_all_contracts**
-
-* 入参:use_df: bool = False
-
-* 出参:Sequence[ContractData]
-
-默认返回一个list,包含了全市场的ContractData,如果use_df=True则返回相应的DataFrame。
-
-**get_all_active_orders**
-
-* 入参:use_df: bool = False
-
-* 出参:Sequence[OrderData]
-
-活动委托指的是等待委托完全成交,故其状态包含“已提交、未成交、部分成交”;函数将返回包含一系列OrderData的列表对象。
-
-**get_all_accounts**
-
-* 入参:use_df: bool = False
-
-* 出参:Sequence[AccountData]
-
-默认返回包含AccountData的列表对象。
-
-**get_all_positions**
-
-* 入参:use_df: bool = False
-
-* 出参:Sequence[PositionData]
-
-默认返回包含PositionData的列表对象,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/script_trader/19.png)
-
-### 交易委托
-
-**buy**:买入开仓(Direction:LONG,Offset:OPEN)
-
-**sell**:卖出平仓(Direction:SHORT,Offset:CLOSE)
-
-**short**:卖出开仓(Direction:SHORT,Offset:OPEN)
-
-**cover**:买入平仓(Direction:LONG,Offset:CLOSE)
-
-* 入参:vt_symbol: str, price: float, volume: float, order_type: OrderType = OrderType.LIMIT
-
-* 出参:str
-
-以委托买入为例,engine.buy()函数入参包括:
-
-- vt_symbol:本地合约代码(字符串格式);
-- price:报单价格(浮点数类型);
-- volume:报单数量(浮点数类型);
-- order_type:OrderType枚举常量,默认为限价单(OrderType.LIMIT),同时支持停止单(OrderType.STOP)、FAK(OrderType.FAK)、FOK(OrderType.FOK)、市价单(OrderType.MARKET),不同交易所支持报单方式不完全一致。
-```python 3
-engine.buy(vt_symbol="rb2210.SHFE", price=4200, volume=1, order_type=OrderType.LIMIT)
-```
-
-执行交易委托后会返回本地委托号vt_orderid。
-
-**send_order**
-
-* 入参:vt_symbol: str, price: float, volume: float, direction: Direction, offset: Offset, order_type: OrderType
-
-* 出参:str
-
-send_order函数是脚本交易策略引擎调用的发送委托的函数。一般在策略编写的时候不需要单独调用,通过buy/sell/short/cover函数发送委托即可。
-
-**cancel_order**
-
-* 入参:vt_orderid: str
-
-* 出参:无
-
-基于本地委托号撤销委托。
-
-```python 3
-engine.cancel_order(vt_orderid='CTP.3_-1795780178_1')
-```
-
-### 信息输出
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后(配置方法详见基本使用篇的全局配置部分),调用send_email函数可以发送标题为“脚本策略引擎通知”的邮件到自己的邮箱。
diff --git a/docs/community/app/spread_trading.md b/docs/community/app/spread_trading.md
deleted file mode 100644
index 28989c7..0000000
--- a/docs/community/app/spread_trading.md
+++ /dev/null
@@ -1,865 +0,0 @@
-# SpreadTrading - 多合约价差套利模块
-
-## 功能简介
-
-SpreadTrading是用于**多合约价差套利**的功能模块,用户可以通过其UI界面操作来便捷创建灵活的价差合约、完成手动交易和自动交易等任务。
-
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【SpreadTrading】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_spreadtrading import SpreadTradingApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(SpreadTradingApp)
-```
-
-
-## 启动模块
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```bash
- C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-在启动模块之前,请先连接交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块(**如果在合约信息查询成功之前打开模块,可能会导致价差的价格跳动取值为零,进而在委托成交之后引发底层报错**),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【价差交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/1.png)
-
-即可进入价差交易模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/2.png)
-
-
-## 创建价差合约
-
-### 查询合约
-
-在创建价差合约前,用户可以通过【查询合约】功能,寻找可以组成价差的合约(**不支持交易所套利合约**):
-
-- 在VeighNa Trader菜单栏中点击【帮助】-> 【查询合约】按钮,弹出合约查询界面,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/3.png)
-- 在界面中找到可用于组成价差交易的合约;
-- 本文档以豆油期货的跨期套利来展示,即交易y2205.DCE(豆油期货22年5月到期合约)和y2209.DCE(豆油期货22年9月到期合约)。
-
-### 构建价差合约
-
-在价差交易的界面左侧,点击【价差创建】按钮,弹出创建价差界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/4.png)
-
-价差交易模块支持灵活的价差计算公式(例如A/B、A-B*C等),同时允许引入不参与交易的定价腿,满足复杂境内外套利价差需要考虑汇率和税率等因素的需求。在创建价差合约时,需要配置相关参数,各参数要求如下:
-
-- 价差名称
- - 用户定义的价差合约名称;
- - 价差名称不能重名;
-- 主动腿代码
- - 价差盘口价格满足条件时,先发出的那条腿的本地代码。
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 必须是下面的腿选项中的一项;
-- 最小交易量
- - 最小交易手数;
-- 价格公式
- - 价差合约的计算公式;
- - 支持任何Python内置数学函数;
- - 注意其中的变量只能是A、B、C、D、E(不需要都用);
-- 【A、B、C、D、E】
- - 包含构建价差合约的主动腿与被动腿,也可以引入不参与交易的定价腿,由合约代码、交易方向、交易乘数组成:
- - 合约代码为公式中的变量所对应的合约本地代码(vt_symbol);
- - 一般来说,价差交易原则上是主动腿完成交易后,立刻用被动腿进行对冲,故主动腿一般选择较为不活跃的合约,价格乘数和交易乘数均为正;被动腿一般选择较为活跃的合约,价格乘数和交易乘数均为负;
- - 不用的变量留空即可;
-
-设置好价差合约的参数后,点击下方的【创建价差】按钮,即可成功创建价差合约。
-
-在豆油期货跨期套利示例中,其价格乘数和交易乘数均为1:1,即价差 = y2205 - y2209;买入1手价差等于买入1手y2205,同时卖出1手y2209完成对冲。
-
-请注意,在多条腿并且期货合约规模不等时,构建价差合约会相对困难一些,如构建虚拟钢厂套利所用到的价差合约时,计算公式如下:
-
-- 螺纹钢生产技艺是16吨铁矿石加上5吨焦炭练成10吨螺纹钢。
-- 基于价格乘数的价差spread = 1* RB - 1.6\*I - 0.5\*J。
-- 但是由于螺纹是10吨/手,铁矿石和焦炭都是100吨/手,所以他们交易乘数是1:10:10;
-- 故基于最大公约数规则,其实际交易手数关系是每买入100手螺纹钢(1000吨),需要卖出16手铁矿石(1600吨)和5手焦炭(500吨)完成对冲。
-
-### 监控价差合约
-
-价差合约创建完毕,监控界面中的【日志】栏会输出“价差创建成功”;【价差】栏也会展示价差合约的实时行情,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/6.png)
-
-在豆油期货价差交易示例中,【价差】组件的各字段含义如下所示:
-
-- 买价
- - y2205买一价 - y2209卖一价
-- 买量
- - min(y2205买一量, y2209卖一量)
- - 取最小值用于保证各合约能均能成交
-- 卖价
- - y2205卖一价 - y2209买一价
-- 卖量
- - min(y2205卖一量, y2209买一量)
-
-### 移除价差合约
-
-在价差交易的界面左侧,点击【移除价差】按钮,弹出移除价差界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/35.png)
-
-选择好要移除的价差合约之后,点击【移除】按钮,即可成功移除价差合约。【日志】组件输出“价差移除成功”,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/36.png)
-
-
-## 手动交易
-
-假设当前豆油期货价差合约买价为408,卖价为420,并且在大周期上,价差围绕0上下波动。
-
-价差交易的盈利在于高抛低吸,即在低位,如-300买入豆油期货价差合约,在高位,如+800卖出价差合约,平仓获利离场。由于不能立刻成交,所以其默认执行算法SpreadTaker(主动对价成交算法)会每隔一段时间进行委托操作,一般是以超价的限价单的形式发出委托。
-
-下面通过2个例子,分别是发出委托立即成交和发出委托等待成交来具体介绍手动交易的操作情况:
-
-### 发出委托立即成交
-
-假设目标价差合约价格为425,我们以超价5元的形式,即430的价位发出买入限价单,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/2-7.png)
-
-由于限价单(430)价位高于当前卖价(420),所以委托立刻成交,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/8.png)
-
-此时各监控组件状态如下所示:
-
-- 日志组件
- - 买入y_05_09价差合约的顺序是:发出y2205多头委托 -> y2205委托成交 -> 发出y2209空头委托 -> y2209委托成交。价差交易必须遵循的逻辑是主动腿成交后,才去用被动腿来对冲头寸,并且对冲必须尽可能及时。这也是为什么一般被动腿会选择较为活跃合约的原因。
-- 价差组件
- - 买入1手豆油期货价差合约成交后,【净仓】从0变成1。实际上,VeighNa Trader【持仓】组件显示,y2205合约多头持仓1手,y2209合约空头持仓1手。
-- 算法组件
- - 本次委托SpreadTaker算法执行情况:成交数量1手,委托状态是【全部成交】。
-
-### 发出委托等待成交
-
-以400的价位发出限价买入指令,由于当前买价卖价分别位于412和426,所以委托状态显示【未成交】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/9.png)
-
-此时各监控组件状态如下所示:
-
-- 日志组件
- - 本次算法即SpreadTaker_000002已经启动,但由于价格没有触发到目标价位,算法在循环读秒中处于等待状态;
-- 算法组件
- - 委托状态为【未成交】,要结束算法只需鼠标双击【SpreadTaker_000002】单元格即可。
-
-仅当卖价低于-300时,才触发该限价单,已超价5元,即-295去主动成交。
-
-### 撤销委托
-
- 鼠标双击【SpreadTaker_000002】单元格,即可结束该算法。此时【日志】组件输出“算法已停止”,【算法】组件显示委托状态由【未成交】变成【已撤销】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/10.png)
-
-
-## 自动交易
-
-### 添加策略
-
-用户可以基于编写好的价差策略模板(类)来创建不同的策略实例(对象)。
-
-在左侧的下拉框中选择要交易的策略名称(如BasicSpreadStrategy),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/19.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/11.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 用户自定义的策略实例名称,这里是test;
- - 策略实例名称不能重名;
-- 价差名称
- - 用于交易的价差合约,这里是y_05_09;
- - 一定要是价差组件可以查询到的价差合约;
-- 参数设置
- - 显示的参数名是策略里写在parameters列表中的参数名;
- - 默认数值为策略里的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
- - 以BasicSpreadStrategy为例,该策略的参数设置如下:
- - buy_price
- - 买入开仓阈值,图中是-300,即当价格跌破-300时,执行委托;
- - sell_price
- - 卖出平仓阈值,图中是400,即当价格回升到400时,执行委托;
- - short_price
- - 卖出开仓阈值,图中是800,即当价格上涨到800时,执行委托;
- - cover_price
- - 买入平仓阈值,图中是600,即当价格下跌到600时,执行委托;
- - max_pos
- - 主动腿委托数量;
- - payup
- - 超价的数值;
- - interval
- - 时间间隔,即每隔一段时间,会发出委托。
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在右下角的策略监控组件中看到该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/12.png)
-
-策略监控组件顶部显示的是策略实例名、价差名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的spread_trading_strategy.json文件中。
-
-### 管理策略
-
-#### 初始化
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/23.png)
-
-可观察到此时该策略实例的【inited】状态已经为【True】。说明该策略实例已经调用过load_bar函数加载历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-#### 启动
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动该策略的自动交易功能。点击该策略实例下的【启动】按钮,即可启动该策略实例。成功启动后,【日志】组件则会输出相应信息(请注意,策略启动并不代表算法启动,算法启动状态取决于策略逻辑),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/13.png)
-
-此时,【算法】组件显示,test策略调用SpreadTaker算法,分别在-300和800的位子上挂上买入和卖出委托;由于实际价格没有达到这2个阈值,故委托一直挂着,其委托状态为【未成交】。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/14.png)
-
-【策略】组件中【trading】字段从【False】变为【True】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/24.png)
-
-#### 停止
-
-若要停止策略,点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。【日志】组件输出“算法已停止”,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/15.png)
-
-【算法】组件中算法状态变为【已撤销】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/16.png)
-
-【策略】组件中【trading】字段从【True】变为【False】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/29.png)
-
-#### 编辑
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/18.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/30.png)
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下spread_trading_strategy.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-修改前,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/26-1.png)
-
-修改后,json文件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/27-1.png)
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/28.png)
-
-#### 移除
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面右下角的策略监控组件中将不会再显示该策略实例的信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/34.png)
-
-此时.vntrader文件夹下的spread_trading_strategy.json文件也移除了该策略实例的配置信息。
-
-### 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的价差策略实例,可以使用界面左下角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-#### 全部初始化
-
-在所有策略实例创建成功后,点击左下角的【全部初始化】按钮,则可批量初始化策略实例,如下图所示:
-
-点击【全部初始化】后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/31.png)
-
-#### 全部启动
-
-在所有策略实例初始化成功后,点击左下角的【全部启动】按钮,则可批量启动策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/32.png)
-
-#### 全部停止
-
-在所有策略实例启动成功后,点击左下角的【全部停止】按钮,则可批量停止策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/33.png)
-
-
-## 价差交易策略模板(SpreadStrategyTemplate)
-
-价差交易策略模板提供了信号生成和委托管理功能,用户可以基于该模板(位于vnpy_spreadtrading.template中)自行开发策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
-
-1. 策略文件命名采用下划线模式,如statistical_arbitrage_strategy.py,而策略类命名采用驼峰式,如StatisticalArbitrageStrategy。
-
-2. 自建策略的类名不要与示例策略的类名重合。如果重合了,图形界面上只会显示一个策略类名。
-
-目前,VeighNa官方提供两个价差策略,即BasicSpreadStrategy和StatisticalArbitrageStrategy。下面通过StatisticalArbitrageStrategy示例,来展示策略开发的具体步骤:
-
-在基于价差交易策略模板编写策略逻辑之前,需要在策略文件的顶部载入需要用到的内部组件,如下方代码所示:
-
-```python 3
-from vnpy.trader.utility import BarGenerator, ArrayManager
-from vnpy_spreadtrading import (
- SpreadStrategyTemplate,
- SpreadAlgoTemplate,
- SpreadData,
- OrderData,
- TradeData,
- TickData,
- BarData
-)
-```
-
-其中,SpreadStrategyTemplate和SpreadAlgoTemplate是价差交易策略模板和价差算法模板,SpreadData、OrderData、TickData、TradeData和BarData是储存对应信息的数据容器,BarGenerator是K线生成模块,ArrayManager是K线时间序列管理模块。
-
-### 策略参数与变量
-
-在策略类的下方,可以设置策略的作者(author),参数(parameters)以及变量(variables),如下方代码所示:
-
-```python 3
- author = "用Python的交易员"
-
- boll_window = 20
- boll_dev = 2
- max_pos = 10
- payup = 10
- interval = 5
-
- spread_pos = 0.0
- boll_up = 0.0
- boll_down = 0.0
- boll_mid = 0.0
-
- parameters = [
- "boll_window",
- "boll_dev",
- "max_pos",
- "payup",
- "interval"
- ]
- variables = [
- "spread_pos",
- "boll_up",
- "boll_down",
- "boll_mid"
- ]
-```
-
-虽然策略的参数和变量都从属于策略类,但策略参数是固定的(由交易员从外部指定),而策略变量则在交易的过程中随着策略的状态变化,所以策略变量一开始只需要初始化为对应的基础类型。例如:整数设为0,浮点数设为0.0,而字符串则设为""。
-
-如果需要价差交易模块引擎在运行过程中,将策略参数和变量显示在UI界面上,并在数据刷新、停止策略时保存其数值,则需把参数和变量的名字(以字符串的数据类型)添加进parameters和variables列表里。
-
-请注意,该列表只能接受参数和变量以str、int、float和bool四种数据类型传入。如果策略里需要用到其他数据类型的参数与变量,请把该参数或变量的定义放到__init__函数下。
-
-### 类的初始化
-
-入参:strategy_engine, strategy_name: str, spread: SpreadData, setting: dict
-
-出参:无
-
-__init__函数是策略类的构造函数,需要与继承的SpreadStrategyTemplate保持一致。
-
-在这个继承的策略类里,初始化一般分三步,如下方代码所示:
-
-```python 3
- def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
- """"""
- super().__init__(
- strategy_engine, strategy_name, spread, setting
- )
-
- self.bg = BarGenerator(self.on_spread_bar)
- self.am = ArrayManager()
-```
-
-1 . 通过super( )的方法继承SpreadStrategyTemplate,在__init__( )函数中传入策略引擎、策略名称、价差以及参数设置(以上参数均由策略引擎在使用策略类创建策略实例时自动传入,用户无需进行设置);
-
-2 . 调用K线生成模块(BarGenerator):通过时间切片将Tick数据合成1分钟K线数据。如有需求,还可合成更长的时间周期数据。
-
-3 . 调用K线时间序列管理模块(ArrayManager):基于K线数据将其转化为便于向量化计算的时间序列数据结构,并在内部支持使用talib库来计算相应的技术指标。
-
-ArrayManager的默认长度为100,如需调整ArrayManager的长度,可传入size参数进行调整(size不能小于计算指标的周期长度)。
-
-### 价差策略引擎调用的函数
-
-SpreadStrategyTemplate中的update_setting函数、该函数后面四个以get开头的函数和后面两个以update开头的函数,都是价差策略引擎去负责调用的函数,一般在策略编写的时候是不需要调用的。
-
-### 策略的回调函数
-
-SpreadStrategyTemplate中以on开头的函数称为回调函数,在编写策略的过程中能够用来接收价差行情或者接收状态更新。回调函数的作用是当某一个事件发生的时候,策略里的这类函数会被价差交易策略引擎自动调用(无需在策略中主动操作)。回调函数按其功能可分为以下三类:
-
-#### 策略实例状态控制(所有策略都需要)
-
-**on_init**
-
-* 入参:无
-
-* 出参:无
-
-初始化策略时on_init函数会被调用,默认写法是调用write_log函数输出“策略初始化”日志,再调用load_bar函数加载历史数据,如下方代码所示:
-
-```python 3
- def on_init(self):
- """
- Callback when strategy is inited.
- """
- self.write_log("策略初始化")
- self.load_bar(10)
-```
-
-请注意,如果是基于Tick数据回测,请在此处调用load_tick函数。
-
-策略初始化时,策略的inited和trading状态都为【False】,此时只是调用ArrayManager计算并缓存相关的计算指标,不能发出交易信号。调用完on_init函数之后,策略的inited状态才变为【True】,策略初始化才完成。
-
-**on_start**
-
-* 入参:无
-
-* 出参:无
-
-启动策略时on_start函数会被调用,默认写法是调用write_log函数输出“策略启动”日志,如下方代码所示:
-
-```python 3
- def on_start(self):
- """
- Callback when strategy is started.
- """
- self.write_log("策略启动")
-```
-
-调用策略的on_start函数启动策略后,策略的trading状态变为【True】,此时策略才能够发出交易信号。
-
-**on_stop**
-
-* 入参:无
-
-* 出参:无
-
-停止策略时on_stop函数会被调用,默认写法是调用write_log函数输出“策略停止”日志,同时还原策略的变量,如下方代码所示:
-
-```python 3
- def on_stop(self):
- """
- Callback when strategy is stopped.
- """
- self.write_log("策略停止")
- self.put_event()
-```
-调用策略的on_stop函数停止策略后,策略的trading状态变为【False】,此时策略就不会发出交易信号了。
-
-#### 接收数据、计算指标、发出交易信号
-
-**on_spread_data**
-
-* 入参:无
-
-* 出参:无
-
-当价差数据更新的时候on_spread_data函数会被调用(因本次示例策略类StatisticalArbitrageStrategy不是基于on_spread_data交易,故不作示例讲解。基于on_spread_data交易的示例代码可参考示例策略BasicSpreadStrategy)。StatisticalArbitrageStrategy的写法是先调用get_spread_tick获取价差Tick数据,然后推进on_spread_tick函数中,如下方代码所示:
-
-```python 3
- def on_spread_data(self):
- """
- Callback when spread price is updated.
- """
- tick = self.get_spread_tick()
- self.on_spread_tick(tick)
-```
-
-**on_spread_tick**
-
-* 入参:tick: TickData
-
-* 出参:无
-
-当策略收到最新的价差Tick数据的行情时,on_spread_tick函数会被调用。默认写法是通过BarGenerator的update_tick函数把收到的Tick数据推进前面创建的bg实例中以便合成1分钟的K线,如下方代码所示:
-
-```python 3
- def on_spread_tick(self, tick: TickData):
- """
- Callback when new spread tick data is generated.
- """
- self.bg.update_tick(tick)
-```
-
-**on_spread_bar**
-
-* 入参:bar: BarData
-
-* 出参:无
-
-当策略收到最新的价差K线数据时(实盘时默认推进来的是基于Tick合成的一分钟的K线,回测时则取决于选择参数时填入的K线数据频率),on_spread_bar函数就会被调用。
-
-如果策略基于on_spread_bar推进来的K线交易,那么请把交易请求类函数都写在on_spread_bar函数下。示例策略类StatisticalArbitrageStrategy是通过1分钟K线数据回报来生成CTA信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_spread_bar(self, bar: BarData):
- """
- Callback when spread bar data is generated.
- """
- self.stop_all_algos()
-
- self.am.update_bar(bar)
- if not self.am.inited:
- return
-
- self.boll_mid = self.am.sma(self.boll_window)
- self.boll_up, self.boll_down = self.am.boll(
- self.boll_window, self.boll_dev)
-
- if not self.spread_pos:
- if bar.close_price >= self.boll_up:
- self.start_short_algo(
- bar.close_price - 10,
- self.max_pos,
- payup=self.payup,
- interval=self.interval
- )
- elif bar.close_price <= self.boll_down:
- self.start_long_algo(
- bar.close_price + 10,
- self.max_pos,
- payup=self.payup,
- interval=self.interval
- )
- elif self.spread_pos < 0:
- if bar.close_price <= self.boll_mid:
- self.start_long_algo(
- bar.close_price + 10,
- abs(self.spread_pos),
- payup=self.payup,
- interval=self.interval
- )
- else:
- if bar.close_price >= self.boll_mid:
- self.start_short_algo(
- bar.close_price - 10,
- abs(self.spread_pos),
- payup=self.payup,
- interval=self.interval
- )
-
- self.put_event()
-```
-
-- 清空未成交委托:为了防止之前下的单子在上1分钟没有成交,但是下1分钟可能已经调整了价格,就用stop_all_algos()方法立刻撤销之前未成交的所有委托,保证策略在当前这1分钟开始时的整个状态是清晰和唯一的;
-
-- 调用K线时间序列管理模块:基于最新的1分钟价差K线数据来计算相应的技术指标,如布林带通道上下轨等。首先获取ArrayManager对象,然后将收到的K线推送进去,检查ArrayManager的初始化状态,如果还没初始化成功就直接返回,没有必要去进行后续的交易相关的逻辑判断。因为很多技术指标计算对最少K线数量有要求,如果数量不够的话计算出来的指标会出现错误或无意义。反之,如果没有return,就可以开始计算技术指标了;
-
-- 信号计算:通过持仓的判断以及结合布林带通道在通道突破点挂出委托,同时设置离场点。
-
- 请注意,如果需要在图形界面刷新指标数值,请不要忘记调用put_event()函数。
-
-#### 委托状态更新
-
-以下函数在策略中几乎都可以直接pass,其具体逻辑应用交给回测/实盘引擎负责。
-
-**on_spread_pos**
-
-* 入参:无
-
-* 出参:无
-
-收到持有仓位更新时on_spread_pos函数会被调用。与CTA策略模块访问策略逻辑持仓不同,价差交易模块访问的是账户底层持仓。所以默认写法是通过调用get_spread_pos函数获取价差持仓,以供策略进行逻辑判断,如下方代码所示:
-
-```python 3
- def on_spread_pos(self):
- """
- Callback when spread position is updated.
- """
- self.spread_pos = self.get_spread_pos()
- self.put_event()
-```
-
-**on_spread_algo**
-
-* 入参:algo: SpreadAlgoTemplate
-
-* 出参:无
-
-收到算法状态更新时on_spread_algo函数会被调用。
-
-**on_order**
-
-* 入参:order: OrderData
-
-* 出参:无
-
-收到策略委托回报时on_order函数会被调用。
-
-**on_trade**
-
-* 入参:trade: TradeData
-
-* 出参:无
-
-收到策略成交回报时on_trade函数会被调用。
-
-### 主动函数
-
-**start_long_algo**
-
-* 入参:price: float, volume: float, payup: int, interval: int, lock: bool = False, extra: dict = None
-
-* 出参:algoid: str
-
-**start_short_algo**
-
-* 入参:price: float, volume: float, payup: int, interval: int, lock: bool = False, extra: dict = None
-
-* 出参:algoid: str
-
-与CTA策略模块不同,价差交易的示例策略都是通过调用star_long_algo/start_short_algo函数(针对价差)而不是buy/sell/short/cover函数(针对特定合约)来发出委托的。在价差交易模块中,算法负责价差交易的执行,策略负责价差算法的调度。价差算法将价差交易简化为了普通委托,封装掉了所有主动腿下单和被动腿对冲的细节。
-
-以下方star_long_algo函数的代码为例,可以看到,价格、数量、超价的数值、时间间隔是必填的参数,锁仓转换和开平方向则分别默认为False和Offset.NONE。也可以看到,函数内部收到传进来的参数之后就调用了SpreadStrategyTemplate里的start_algo函数来发单(因为是long指令,则自动把方向填成了LONG)
-
-```python 3
- def start_long_algo(
- self,
- price: float,
- volume: float,
- payup: int,
- interval: int,
- lock: bool = False,
- extra: dict = None
- ) -> str:
- """"""
- if not extra:
- extra = None
-
- return self.start_algo(
- Direction.SHORT, price, volume,
- payup, interval, lock, extra
- )
-```
-
-**start_algo**
-
-* 入参:direction: Direction, price: float, volume: float, payup: int, interval: int, lock: bool, extra: dict
-
-* 出参:algoid: str
-
-start_algo函数是价差策略引擎调用的启动新的价差交易算法的函数。一般在策略编写的时候不需要单独调用,通过start_long_algo/start_short_algo函数发送委托即可。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回[]。
-
-**stop_algo**
-
-* 入参:algoid: str
-
-* 出参:无
-
-**stop_all_algos**
-
-* 入参:无
-
-* 出参:无
-
-stop_algo和stop_all_algos都是负责停止价差算法的交易请求类函数。stop_algo是停止策略内指定的价差算法,stop_all_algos是停止策略所有的活动价差算法。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-**buy**:买入开仓(Direction:LONG,Offset:OPEN)
-
-**sell**:卖出平仓(Direction:SHORT,Offset:CLOSE)
-
-**short**:卖出开仓(Direction:SHORT,Offset:OPEN)
-
-**cover**:买入平仓(Direction:LONG,Offset:CLOSE)
-
-* 入参:vt_symbol: str, price: float, volume: float, lock: bool = False
-
-* 出参:vt_orderids: List[vt_orderid] / 无
-
-buy/sell/short/cover都是策略内部的负责针对特定合约发出底层交易委托的请求类函数。策略可以通过这些函数给价差策略引擎发送交易信号来达到下单的目的。
-
-以下方buy函数的代码为例,可以看到,本地代码、价格和数量是必填的参数,锁仓转换则默认为False。也可以看到,函数内部收到传进来的参数之后就调用了SpreadStrategyTemplate里的send_order函数来发单(因为是buy指令,则自动把方向填成了LONG,开平填成了OPEN)
-
-如果lock设置为True,那么该笔订单则会进行锁仓委托转换(在有今仓的情况下,如果想平仓,则会先平掉所有的昨仓,然后剩下的部分都进行反向开仓来代替平今仓,以避免平今的手续费惩罚)。
-
-```python 3
- def buy(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]:
- """"""
- return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.OPEN, lock)
-```
-
-**send_order**
-
-* 入参:vt_symbol: str, price: float, volume: float, direction: Direction, offset: Offset, lock: bool = False
-
-* 出参:vt_orderids / 无
-
-send_order函数是价差策略引擎调用的针对特定合约(**而不是价差**)发送委托的函数。一般在策略编写的时候不需要单独调用,通过buy/sell/short/cover函数发送委托即可。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回[]。
-
-**cancel_order**
-
-* 入参:vt_orderid: str
-
-* 出参:无
-
-**cancel_all**
-
-* 入参:无
-
-* 出参:无
-
-cancel_order和cancel_all都是负责撤单的交易请求类函数。cancel_order是撤掉策略内指定的活动委托,cancel_all是撤掉策略所有的活动委托。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-### 功能函数
-
-以下为策略以外的功能函数:
-
-**put_event**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用put_event函数,可以通知图形界面刷新策略状态相关显示。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能刷新界面。
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**get_spread_tick**
-
-* 入参:无
-
-* 出参:tick: TickData
-
-在策略里调用get_spread_tick函数,可以获取价差Tick数据。
-
-**get_spread_pos**
-
-* 入参:无
-
-* 出参:spread_pos: float
-
-在策略里调用get_spread_pos函数,可以获取价差净持仓数据。
-
-**get_leg_tick**
-
-* 入参:vt_symbol: str
-
-* 出参:leg.tick: TickData / None
-
-在策略里调用get_leg_tick函数,可以获取特定合约的Tick数据。
-
-**get_leg_pos**
-
-* 入参:vt_symbol: str, direction: Direction = Direction.NET
-
-* 出参:leg.net_pos: float / leg.long_pos: float /leg.short_pos: float / None
-
-在策略里调用get_leg_pos函数,可以获取特定合约的持仓数据,用于处理瘸腿后的细粒度调整。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后(配置方法详见基本使用篇的全局配置部分),在策略中调用send_email函数,可以发送指定内容的邮件到自己的邮箱。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能发送邮件。
-
-**load_bar**
-
-* 入参:days: int, interval: Interval = Interval.MINUTE, callback: Callable = None
-
-* 出参:无
-
-在策略中调用load_bar函数,可以在策略初始化时加载价差K线数据。
-
-如下方代码所示,load_bar函数调用时,默认加载的天数是10,频率是一分钟,对应也就是加载10天的1分钟K线数据。在回测时,10天指的是10个交易日,而在实盘时,10天则是指的是自然日,因此建议加载的天数宁可多一些也不要太少。加载时会先依次尝试通过交易接口、数据服务、数据库获取历史数据,直到获取历史数据或返回空。
-
-请注意,回测期内每条腿的K线数据(1分钟最佳),若有某条腿缺失一段,则所有腿的这一段数据都会被弃用。
-
-```python 3
- def load_bar(
- self,
- days: int,
- interval: Interval = Interval.MINUTE,
- callback: Callable = None,
- ):
- """
- Load historical bar data for initializing strategy.
- """
- if not callback:
- callback = self.on_spread_bar
-
- self.strategy_engine.load_bar(self.spread, days, interval, callback)
-```
-
-**load_tick**
-
-* 入参:days: int
-
-* 出参:无
-
-价差Tick数据来源:
-首先需要在SpreadTrading模块中创建配置好价差后,通过DataRecorder模块来进行Tick录制,本地代码填入xx-spread.LOCAL,其中xx-spread为用户定义的价差名称,LOCAL为固定交易所后缀(代表本地生成)。
-
-在策略中调用load_tick函数,可以在策略初始化时去数据库加载录制好的价差Tick盘口数据。
\ No newline at end of file
diff --git a/docs/community/app/web_trader.md b/docs/community/app/web_trader.md
deleted file mode 100644
index d3ecc2a..0000000
--- a/docs/community/app/web_trader.md
+++ /dev/null
@@ -1,186 +0,0 @@
-# WebTrader - Web服务器模块
-
-## 功能简介
-
-WebTrader是用于**Web应用后端服务**的功能模块,用户可以通过浏览器(而非PyQt桌面端)来运行管理VeighNa量化策略交易。
-
-## 架构设计
-
-WebTrader采用了FastAPI作为后端服务器,支持REST主动请求调用和WebSocket被动数据推送,运行时整体框架图如下:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_1.png)
-
-后端服务包括两个独立的进程:
-- 策略交易进程
- - 运行VeighNa Trader的进程,负责所有策略交易功能的运行;
- - 启动了RpcServer用于对Web服务进程功能调用;
-- Web服务进程
- - 运行了FastAPI的进程,负责对外提供Web访问的服务;
- - 启动了RpcClient用于调用策略交易进程的相关功能。
-
-从网页端到策略交易进程的双向通讯模式包括:
-- 主动请求调用(订阅行情、挂撤单、查询数据)
- - 浏览器发起REST API调用(访问某个URL地址提交数据)到Web服务进程;
- - Web服务进程收到后,转换为RPC请求(Req-Rep通讯模式)发送给策略交易进程;
- - 策略交易进程执行请求处理后,返回结果给Web服务进程;
- - Web服务进程返回数据给浏览器。
-- 被动数据推送(行情推送、委托推送)
- - 浏览器发起Websocket连接到Web服务进程;
- - 策略交易进程通过RPC推送(Pub-Sub通讯),将数据推送给Web服务进程;
- - Web服务进程收到后,将数据通过Websocket API实时推送给浏览器(JSON格式)。
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【应用模块】栏勾选【WebTrader】。
-
-### 脚本加载
-
-在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_webtrader import WebTraderApp
-
-# 写在创建main_engine对象后
-main_engine.add_app(WebTraderApp)
-```
-
-### 启动模块
-
-在启动模块之前,请先连接登录交易接口(连接方法详见基本使用篇的连接接口部分)。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/market_radar/1.png)
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【Web服务】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_0.png)
-
-即可进入RPC服务模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_3.png)
-
-此时系统中运行的只包括策略交易进程,左上角区域的服务器配置选项包括:
-- 用户名和密码:从网页端登录Web应用时所用的用户名和密码,使用时请修改为自己想用的用户名和密码(通过启动目录.vntrader下的web_trader_setting.json修改),请注意这里的用户名和密码与底层交易接口无关;
-- 请求和订阅地址:架构图中Web服务进程和策略交易进程之间,进行RPC通讯的地址,注意端口不要和其他程序冲突即可。
-
-点击启动按钮后,会根据用户输入的配置信息在系统后台启动Web服务进程,同时在右侧区域输出Fast API运行过程中的相关日志信息。
-
-
-## 接口演示
-在启动Web服务后,在浏览器打开网址,即可看到如下图所示的接口文档网页:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_2.png)
-
-这里包含了目前WebTrader支持的相关接口信息,下面结合vnpy_webtrader项目下提供的[Jupyter Notebook](https://github.com/vnpy/vnpy_webtrader/blob/main/script/test.ipynb)进行相关的接口演示。
-
-### 获得令牌(token)
-```python 3
-import requests
-import json
-
-url = "http://127.0.0.1:8000/"
-username = "vnpy"
-password = "vnpy"
-
-r = requests.post(
- url + "token",
- data={"username": username, "password": password},
- headers={"accept": "application/json"}
-)
-token = r.json()["access_token"]
-```
-首先导入相应的模块requests和json,接着定义url和用户名和密码,通过requests的post方法传入相应参数就能够获得令牌(token),后续访问使用各种接口直接传入token即可。
-
-### 行情订阅
-```
-r = requests.post(url + "tick/" + "cu2112.SHFE", headers={"Authorization":"Bearer " + token})
-```
-通过上述命令可实现对合约cu2112.SHFE的订阅,同时可以在图形界面收到该合约的行情数据推送,入下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_4.png)
-
-### 批量查询
-```python 3
-# 查询函数
-def query_test(name):
- """查询对应类型的数据"""
- r = requests.get(
- url + name,
- headers={"Authorization": "Bearer " + token}
- )
- return r.json()
-
-# 批量查询
-for name in ["tick", "contract", "account", "position", "order", "trade"]:
- data = query_test(name)
- print(name + "-" * 20)
- if data:
- print(data[0])
-```
-如有需要,同样可以通过发出主动请求查询相关的数据,比如tick数据、合约数据、账户数据、 持仓数据、委托数据以及成交数据。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_5.png)
-
-### 委托测试
-```python 3
-# 委托测试
-req = {
- "symbol": "cu2112",
- "exchange": "SHFE",
- "direction": "多",
- "type": "限价",
- "volume": 1,
- "price": 71030,
- "offset": "开",
- "reference": "WebTrader"
-}
-
-r = requests.post(
- url + "order",
- json=req,
- headers={"Authorization": "Bearer " + token}
-)
-vt_orderid = r.json()
-
-print(vt_orderid)
-```
-下单后同样能在图形化界面看到委托信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_6.png)
-
-### 撤单测试
-```python 3
-# 撤单测试
-r = requests.delete(
- url + "order/" + vt_orderid,
- headers={"Authorization": "Bearer " + token}
-)
-```
-如果想将之前下的委托撤销,可以发送主动请求,结果同样会在图形化界面更新,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_7.png)
-
-### Websocket测试
-
-```python 3
-# Weboscket测试
-from websocket import create_connection
-
-ws = create_connection("ws://127.0.0.1:8000/ws/?token=" + token)
-
-while True:
- result = ws.recv()
- print("Received '%s'" % result)
-
-ws.close()
-```
-通过Websocket可以被动接收策略交易进程推送过来的行情数据和委托数据等,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/web_trader/web_trader_8.png)
-
-## 后续计划
-WebTrader仅实现了Web应用的后端(提供了浏览器访问数据的接口),而前端页面(也就是浏览器中看到的网页)则按照之前的计划交给社区用户来实现,欢迎大家贡献代码。
-
-同时WebTrader目前只支持基础的手动交易功能,后续将会逐渐加上策略交易应用相关的管理功能(比如CtaStrategy的相关调用)。
diff --git a/docs/community/index.rst b/docs/community/index.rst
deleted file mode 100644
index a9ba1b7..0000000
--- a/docs/community/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-社区版
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- info/index
- install/index
- app/index
diff --git a/docs/community/info/contribution.md b/docs/community/info/contribution.md
deleted file mode 100644
index 9dcdbe6..0000000
--- a/docs/community/info/contribution.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# 贡献代码
-
----
-## 创建PR
-我们欢迎任何人贡献代码到VeighNa。
-
-如果希望贡献代码请使用Github的PR(Pull Request)的流程。
-
-PR流程大致如下:
-
----
-1. [创建 Issue][CreateIssue] - 对于较大的改动(如新功能,大型重构等)建议先开issue讨论一下, 较小的improvement(如文档改进,bugfix等)直接发PR即可
-
-2. Fork [VeighNa][#GithubVnpy] - 点击右上角**Fork**按钮
-
-3. Clone你自己的fork: ```git clone https://github.com/$userid/vnpy.git```
-
- > 如果你的fork已经过时,需要手动[sync][GithubDocForSync]
-
-4. 从**dev**创建你自己的branch: ```git checkout -b $my_feature_branch dev```
-
-5. 在$my_feature_branch上修改并将修改push到你Fork之后的仓库上
-
-6. 创建从你的fork的$my_feature_branch分支到主项目的**dev**分支的[Pull Request]:
- [点开这里][CreatePR] ,再点击**compare across forks**,选择需要的fork和branch创建PR
-
----
-
-创建完PR之后请耐心等待:我们一旦有空就会检查PR,一旦你的代码有用且[符合要求](#代码风格),就会被合并!
-
-
----
-## 代码风格
-在为VeighNa写代码的时候,需要遵循一些基本的规则,否则你的代码可能无法被merge。
-这些规则包括:
-- [贡献代码](#贡献代码)
- - [创建PR](#创建pr)
- - [代码风格](#代码风格)
- - [命名规则](#命名规则)
- - [代码格式](#代码格式)
- - [代码质量检查](#代码质量检查)
-
-
-### 命名规则
-我们的代码的命名规则如下:
-
-* 类属性、类方法、参数和变量使用小写加下划线的形式
-* 类名使用驼峰式命名
-* 常量使用大写加下划线的形式
-
-例如:
-```python 3
-DEFAULT_PATH = "/tmp/VeighNa/"
-class ClassA:
- def __init__(self, arg_one: int, arg_two: str):
- if arg_two is None:
- arg_two = DEFAULT_PATH
- self.property_one = arg_one
- variable_one = "some string"
-```
-
-
-### 代码格式
-我们对代码格式没有特别严格的要求,但是至少要符合pep8标准,并且额外要在类和函数下面带上docstring(就是一段"""""")。
-
-要让代码符合pep8标准,写完代码之后使用[autopep8](https://github.com/hhatto/autopep8)格式化你的代码就可以了:
-```bash
-autopep8 --in-place --recursive .
-```
-
-### 代码质量检查
-使用[flake8](https://pypi.org/project/flake8/)检查你的代码,确保没有error和warning。
-在项目根目录下运行```flake8```就可以检查出代码中书写不严谨的地方了。如果检查出error或者warning,说明你的代码需要进行一些修改以提升质量。
-
-[GithubVnpy]:https://github.com/vnpy/vnpy
-[GithubDocForSync]:https://help.github.com/articles/syncing-a-fork/
-[CreateIssue]:https://github.com/vnpy/vnpy/issues/new
-[CreatePR]:https://github.com/vnpy/vnpy/compare?expand=1
-
diff --git a/docs/community/info/database.md b/docs/community/info/database.md
deleted file mode 100644
index e4d49b6..0000000
--- a/docs/community/info/database.md
+++ /dev/null
@@ -1,409 +0,0 @@
-# 数据库
-
-VeighNa Trader目前支持以下八种数据库:
-
-## SQL类数据库简介
-
-### SQLite(默认)
-
-SQLite是一个轻量的嵌入式数据库,无需安装和配置数据服务程序,是VeighNa的**默认数据库**。适合入门新手用户,其特点如下:
- - 存储在一个单一的跨平台的磁盘文件上;
- - 不需要在系统中配置、安装和管理;
- - 不需要一个单独的服务器进程。
-
-#### SQLite配置字段
-
-SQLite在VeighNa Trader中配置时,需填写以下字段信息:
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | --- |
-|database.name | sqlite | 可选(不填默认使用sqlite)
-|database.database | 数据库文件(相对于trader目录) | 必填 |
-
-SQLite配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | sqlite |
-|database.database | database.db |
-
-### MySQL
-
-MySQL是目前主流的开源关系型数据库,其特点如下:
- - 文档材料丰富,社区及用户活跃;
- - 支持多种操作系统,多种开发语言;
- - 可替换其他高性能NewSQL数据库兼容实现(如TiDB)。
-
-#### MySQL配置字段
-
-MySQL在VeighNa Trader中配置时,需要填写以下字段信息:
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "mysql"| 必填 |
-|database.host | 地址 | 必填 |
-|database.port | 端口 | 必填 |
-|database.database | 数据库名 | 必填 |
-|database.user | 用户名 | 可选 |
-|database.password | 密码 | 可选 |
-
-MySQL配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | mysql |
-|database.host | localhost |
-|database.port | 3306 |
-|database.database | vnpy |
-|database.user | root |
-|database.password | |
-
-### PostgreSQL
-
-PostgreSQL是特性更为丰富的开源关系型数据库,只推荐熟手使用。相比于MySQL,其特点如下:
- - 采用多进程结构;
- - 支持通过扩展插件来新增功能。
-
-#### PostgreSQL配置字段
-
-PostgreSQL在VeighNa Trader中配置时,需要填写以下字段信息:
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "postgresql" | 必填 |
-|database.host | 地址 | 必填 |
-|database.port | 端口 | 必填 |
-|database.database | 数据库名 | 必填 |
-|database.user | 用户名 | 必填 |
-|database.password | 密码 | 必填 |
-
-PostgreSQL配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | postgresql |
-|database.host | localhost |
-|database.port | 5432 |
-|database.database | vnpy |
-|database.user | postgres |
-|database.password | 123456 |
-
-请注意,VeighNa不会主动为关系型数据库创建数据库,所以请确保所填写的database.database字段对应的数据库已经创建好了。若未创建数据库,请手动连接数据库并运行该命令:
-```sql
- create database <填写的database.database>;
-```
-
-
-## 非SQL类数据库简介
-
-### MongoDB
-
-MongoDB是一个基于分布式文件储存(bson格式)的非关系型数据库,其特点如下:
- - 面向文档存储,操作比较简单;
- - 支持丰富的存储类型和数据操作;
- - 内置的热数据内存缓存实现更快的读写速度。
-
-#### MongoDB配置字段
-
-MongoDB在VeighNa Trader中配置时,需要填写以下字段信息:
-
-| 字段名 | 值 | 是否必填|
-|--------- |---- | ---|
-|database.name | "mongodb" | 必填 |
-|database.host | 地址| 必填 |
-|database.port | 端口| 必填 |
-|database.database | 数据库名| 必填 |
-|database.user | 用户名| 可选 |
-|database.password | 密码| 可选 |
-|database.authentication_source | [创建用户所用的数据库][AuthSource]| 可选 |
-
-MongoDB的带认证配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | mongodb |
-|database.host | localhost |
-|database.port | 27017 |
-|database.database | vnpy |
-|database.user | root |
-|database.password | |
-|database.authentication_source | vnpy |
-
-[AuthSource]: https://docs.mongodb.com/manual/core/security-users/#user-authentication-database
-
-### InfluxDB
-
-InfluxDB是专门针对时间序列数据存储设计的非关系型数据库,其特点如下:
-- 列式数据存储提供极高的读写效率;
-- 采用独立服务进程的模式运行,也能支持多进程的并发访问需求。
-
-在安装时需要选择2.0版本的InfluxDB。
-
-请注意,运行influxd.exe的cmd需要保持运行,如果关闭则会导致InfluxDB退出,或者也可以使用一些辅助工具将其注册为后台运行的Windows服务。
-
-#### InfluxDB配置字段
-InfluxDB在VeighNa Trader中配置时,需要填写以下字段信息:
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "influxdb" | 必填 |
-|database.host | 地址| 必填 |
-|database.port | 端口| 必填 |
-|database.database | 数据库名| 必填 |
-|database.user | 用户名| 必填 |
-|database.password | 密码| 必填 |
-
-InfluxDB配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | influxdb |
-|database.host | localhost |
-|database.port | 8086 |
-|database.database | vnpy |
-|database.user | root |
-|database.password | 12345678 |
-
-### DolphinDB
-
-DolphinDB是浙江智臾科技有限公司研发的一款高性能分布式时序数据库,特别适用于对速度要求极高的低延时或实时性任务,其特点如下:
-- 列式分析型(OLAP)数据库,采用混合引擎(基于内存和硬盘),充分利用缓存来加速;
-- 原生分区表存储,合理的分区方案可以让CPU多线程并行加载每个分区内的数据;
-- 支持高效的数据压缩,显著减小硬盘存储空间的同时,还能大幅降低IO通讯的开销。
-
-尽管DolphinDB是商业软件,但是也提供了免费的社区版,在安装时需要选择[2.0 Beta](https://github.com/dolphindb/release/blob/master/2.00/README.md)版本。
-
-请注意:
- - 运行dolphindb.exe的cmd需要保持运行,如果关闭则会导致DolphinDB退出,或者也可以使用一些辅助工具将其注册为后台运行的Windows服务;
- - 因为DolphinDB目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供DolphinDB支持。
-
-#### DolphinDB配置字段
-
-需要填写以下字段:
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "dolphindb"| 必填 |
-|database.host | 地址 | 必填 |
-|database.port | 端口 | 必填 |
-|database.database | 数据库名 | 必填 |
-|database.user | 用户名 | 必填 |
-|database.password | 密码 | 必填 |
-
-DolphinDB配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | dolphindb |
-|database.host | localhost |
-|database.port | 8848 |
-|database.database | vnpy |
-|database.user | admin |
-|database.password | 123456|
-
-### Arctic
-
-Arctic是由英国量化对冲基金Man AHL基于MongoDB开发的高性能金融时序数据库,其特点如下:
-- 支持直接存储pandas的DataFrame和numpy的ndaaray对象;
-- 允许对数据进行版本化管理(类似于数据库中的git),便于因子挖掘过程中的数据迭代管理;
-- 基于分块化存储和LZ4压缩,在网络和磁盘IO方面节省大量资源,实现超高性能的数据查询。
-
-请注意,因为Arctic目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供Arctic支持。
-
-#### Artic配置字段
-
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "arctic"| 必填 |
-|database.host | 地址 | 必填 |
-|database.port | 端口 | 必填 |
-
-Arctic配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- |---- |
-|database.name | arctic |
-|database.host | localhost |
-|database.database | vnpy |
-
-### Level DB
-LevelDB是由Google推出的高性能Key/Value数据库,其特点如下:
-- 定位为通用型数据存储方案;
-- 基于LSM算法实现进程内存储引擎;
-- 支持数十亿级别的海量数据。
-
-请注意,因为LevelDB目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供LevelDB支持。
-
-#### LevelDB配置字段
-| 字段名 | 值 | 是否必填 |
-|--------- |---- | ---- |
-|database.name | "leveldb"| 必填 |
-|database.database | 数据库名 | 必填 |
-|database.port | 端口 | 必填 |
-
-LevelDB配置示例如下所示:
-
-| 字段名 | 值 |
-|--------- | ---- |
-|database.name | leveldb |
-|database.database | vnpy_data |
-
-
-## 数据库配置(以MySQL为例)
-
-本文档以MySQL为例,介绍数据库的配置过程。
-
-首先在[MySQL官网](https://dev.mysql.com/downloads/)下载Windows版本安装包【MySQL Installer for Windows】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/1.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/2.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/3.png)
-
-下载完成后得到msi格式的安装包,双击打开后选择【Full】模式安装MySQL,一路点击【Next】按钮即可完成安装。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/4.png)
-
-安装过程中将会自动从网站下载相关组件,先点击【Execute】按钮来补全,再点击【Next】按钮。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/5.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/6.png)
-
-安装过程中将会要求输入3次密码,这里为了方便演示,我们将密码设置为1001,请在自己安装的过程中使用更加复杂安全的密码。
-安装完毕后会自动打开MySQL的图形管理工具MySQL WorkBench,点击菜单栏【Database】->【Connect to Database】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/7.png)
-
-在弹出的对话框中,直接选择默认数据库Local Instance MySQL,然后点击【OK】按钮连接MySQL数据库服务器。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/8.png)
-
-在自动打开的数据库管理界面中,点击下图中菜单栏红色方框的按钮,来创建新的数据库。在【Name】中输入“vnpy”,然后点击下方的【Apply】按钮确认。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/9.png)
-
-在之后弹出的数据库脚本执行确认对话框中,同样点击【Apply】即可,这样就完成了在MySQL WorkBench的所有操作。
-
-随后启动VeighNa Trader,点击菜单栏的【配置】,设置数据库相关字段:
-
-- name要改成mysql(请注意大小写);
-- database改成vnpy;
-- host为本地IP,即localhost或者127.0.0.1;
-- port为MySQL的默认端口3306;
-- user用户名为root
-- password密码则是之前设置的1001。
-
-```json
- database.name: mysql
- database.database: vnpy
- database.host: localhost
- database.port: 3306
- database.user: root
- database.password: 1001
-```
-
-填写完毕后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/database/22.png)
-
-保存完成配置修改后,重启VeighNa Trader来启用新的数据库配置。重启后,在打开VeighNa Trader的过程中若无报错提示,则说明MySQL数据库配置成功。
-
-
-## 脚本使用
-
-脚本使用前,请先按照上文配置好使用的数据库, 使用时调用相应的函数接口。
-
-### 脚本加载
-
-#### 在脚本中加载所需的包和数据结构
-
-```python 3
-from datetime import datetime
-from typing import List
-from vnpy.trader.constant import Exchange, Interval
-from vnpy.trader.database import get_database
-from vnpy.trader.object import BarData, TickData
-
-# 获取数据库实例
-database = get_database()
-```
-
-#### 配置所需合约的具体参数数据
-
-```python 3
-# 合约代码,888为米筐的连续合约,仅用于示范,具体合约代码请根据需求自行更改
-symbol = "cu888"
-
-# 交易所,目标合约的交易所
-exchange = Exchange.SHFE
-
-# 历史数据开始时间,精确到日
-start = datetime(2019, 1, 1)
-
-# 历史数据结束时间,精确到日
-end = datetime(2021, 1, 20)
-
-# 数据的时间粒度,这里示例采用日级别
-interval = Interval.DAILY
-```
-
-#### 数据库的读取操作
-
-如数据库指定时间段没有数据,返回空列表
-
-```python 3
-# 读取数据库中k线数据
-bar1 = database.load_bar_data(
- symbol=symbol,
- exchange=exchange,
- interval=interval,
- start=start,
- end=end
-)
-
-# 读取数据库中tick数据
-tick1 = database.load_tick_data(
- symbol=symbol,
- exchange=exchange,
- start=start,
- end=end
-)
-```
-
-#### 数据库的写入操作
-
-请注意,示例中的**bar_data**和**tick_data**均未在示例中展现获取和转换方法。如需以脚本方式写入,请自行参考源码或其他途径,转换成示例中的数据结构。
-
-```python 3
-# 需要存入的k线数据,请自行获取并转换成所需的形式
-bar_data: List[BarData] = None
-
-database.save_bar_data(bar_data)
-
-# 需要存入的k线数据,请自行获取并转换成所需的形式
-tick_data: List[TickData] = None
-
-# 将tick数据存入数据库
-database.save_tick_data(tick_data)
-```
-
-#### 数据库删除操作
-
-无法恢复,请谨慎操作
-
-```python 3
-# 删除数据库中k线数据
-database.delete_bar_data(
- symbol=symbol,
- exchange=exchange,
- interval=interval
-)
-
-# 删除数据库中tick数据
-database.delete_tick_data(
- symbol=symbol,
- exchange=exchange
-)
-```
diff --git a/docs/community/info/datafeed.md b/docs/community/info/datafeed.md
deleted file mode 100644
index a7151e4..0000000
--- a/docs/community/info/datafeed.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# 数据服务
-
-
-对于数据服务,VeighNa提供了标准化的接口BaseDatafeed(位于vnpy.trader.datafeed中),实现了更加灵活的数据服务支持。在全局配置中,和数据服务相关的字段都以datafeed作为前缀。
-
-具体字段含义如下:
-- datafeed.name:数据服务接口的名称,必须为全称的小写英文字母;
-- datafeed.username:数据服务的用户名;
-- datafeed.password:数据服务的密码。
-
-以上字段对于所有数据服务都是必填的,如果是token方式授权请填写在datafeed.password字段中。目前VeighNa Trader支持以下七种数据服务,**具体每个数据服务的细节可在对应的项目地址中找到**。
-
-## 迅投研
-
-迅投研是由睿智融科公司推出的专业数据服务,对于大部分个人投资者来说应该都是性价比比较高的选择:
-- 项目地址:[vnpy_xt](https://github.com/vnpy/vnpy_xt)
-- 数据分类:股票、期货、期权、基金、合约信息、财务信息
-- 数据周期:日线、小时线、分钟线、TICK(实时更新)
-- 注册申请:[迅投研](https://xuntou.net/#/signup?utm_source=vnpy)
-
-## RQData
-
-米筐RQData是由米筐科技公司推出的云端数据服务,提供了广泛的国内金融市场品种数据支持:
-- 项目地址:[vnpy_rqdata](https://github.com/vnpy/vnpy_rqdata)
-- 数据分类:股票、期货、期权、基金和黄金TD
-- 数据周期:日线、小时线、分钟线、TICK(实时更新)
-- 注册申请:[RICEQUANT](https://www.ricequant.com/welcome/purchase?utm_source=vnpy)
-
-**请注意,配置信息里的username和password不是米筐官网登录用的账号和密码。**
-
-
-## UData
-
-恒有数UData是由恒生电子推出的云端数据服务,提供不限次、不限量的多种金融数据获取:
-- 项目地址:[vnpy_udata](https://github.com/vnpy/vnpy_udata)
-- 数据分类:股票、期货
-- 数据周期:分钟线(盘后更新)
-- 注册申请:[恒有数UData](https://udata.hs.net/home)
-
-
-## TuShare
-
-TuShare是国内知名的开源Python金融数据接口项目,由大神Jimmy团队长期开发维护,除了行情数据外还提供许多另类数据:
-- 项目地址:[vnpy_tushare](https://www.github.com/vnpy/vnpy_tushare)
-- 数据分类:股票、期货
-- 数据周期:日线、分钟线(盘后更新)
-- 注册申请:[Tushare大数据社区](https://tushare.pro/)
-
-
-## TQSDK
-天勤TQSDK是由信易科技推出的Python程序化交易解决方案,提供当前可交易合约上市以来的历史数据获取:
-- 项目地址:[vnpy_tqsdk](https://github.com/vnpy/vnpy_tqsdk)
-- 数据分类:期货
-- 数据周期:分钟线(实时更新)
-- 注册申请:[天勤量化-信易科技(shinnytech.com)](https://www.shinnytech.com/tianqin)
-
-
-## Wind
-万得Wind对于在国内金融机构工作的从业者来说,已经是工作中的标准配置,不管是股票、债券还是商品市场的数据,Wind可以说是应有尽有:
-- 项目地址:[vnpy_wind](https://github.com/vnpy/vnpy_wind)
-- 数据分类:期货
-- 数据周期:分钟线(实时更新)
-- 注册申请:[Wind金融终端](https://www.wind.com.cn/newsite/wft.html)
-
-## iFinD
-同花顺iFinD是同花顺公司推出的面向专业机构用户的金融数据终端,且在过去几年中的市场占有率快速上升:
-- 项目地址:[vnpy_ifind](https://github.com/vnpy/vnpy_ifind)
-- 数据分类:期货
-- 数据周期:分钟线(实时更新)
-- 注册申请:[iFinD金融数据终端](http://www.51ifind.com/)
-
-## Tinysoft
-作为国内老牌金融数据公司的天软,其核心产品【天软.NET金融分析平台】(简称TinySoft),在券商研究所和自营领域积累了大量用户。翻看券商的金融工程研报时,经常会发现图表的备注信息中写有“以上数据来自天软”的数据来源说明:
-- 项目地址:[vnpy_tinysoft](https://github.com/vnpy/vnpy_tinysoft)
-- 数据分类:期货
-- 数据周期:分钟线(实时更新)
-- 注册申请:[天软.NET金融分析平台](http://www.tinysoft.com.cn/TSDN/HomePage.tsl)
-
-请注意,因为Tinysoft目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供Tinysoft支持。
-
-## 脚本使用
-脚本使用前,请先按照上文配置好使用的数据服务, 使用时调用相应的函数接口(具体接口支持请参考上文中支持的数据周期)。
-
-### 脚本加载
-
-#### 在脚本中加载所需的包和数据结构
-
-```python 3
-from datetime import datetime
-from vnpy.trader.constant import Exchange, Interval
-from vnpy.trader.datafeed import get_datafeed
-from vnpy.trader.object import HistoryRequest
-
-# 获取数据服务实例
-datafeed = get_datafeed()
-```
-
-#### 获取k线级别的历史数据
-
-```python 3
-req = HistoryRequest(
- # 合约代码(示例cu888为米筐连续合约代码,仅用于示范,具体合约代码请根据需求查询数据服务提供商)
- symbol="cu888",
- # 合约所在交易所
- exchange=Exchange.SHFE,
- # 历史数据开始时间
- start=datetime(2019, 1, 1),
- # 历史数据结束时间
- end=datetime(2021, 1, 20),
- # 数据时间粒度,默认可选分钟级、小时级和日级,具体选择需要结合该数据服务的权限和需求自行选择
- interval=Interval.DAILY
-)
-
-# 获取k线历史数据
-data = datafeed.query_bar_history(req)
-```
-
-#### 获取tick级别的历史数据
-
-由于tick数据量较大,下载前请先参考上文确认数据服务是否提供tick数据的下载服务
-
-```python 3
-req = HistoryRequest(
- # 合约代码(示例cu888为米筐连续合约代码,仅用于示范,具体合约代码请根据需求查询数据服务提供商)
- symbol="cu888",
- # 合约所在交易所
- exchange=Exchange.SHFE,
- # 历史数据开始时间
- start=datetime(2019, 1, 1),
- # 历史数据结束时间
- end=datetime(2021, 1, 20),
- # 数据时间粒度,为tick级别
- interval=Interval.TICK
-)
-
-# 获取tick历史数据
-data = datafeed.query_tick_history(req)
-```
diff --git a/docs/community/info/gateway.md b/docs/community/info/gateway.md
deleted file mode 100644
index c163dd9..0000000
--- a/docs/community/info/gateway.md
+++ /dev/null
@@ -1,780 +0,0 @@
-# 交易接口
-
-## 加载启动
-
-### VeighNa Station加载
-
-启动登录VeighNa Station后,点击【交易】按钮,在配置对话框中的【交易接口】栏勾选想要交易的接口。
-
-### 脚本加载
-
-以CTP接口为例,在启动脚本中添加如下代码:
-
-```python 3
-# 写在顶部
-from vnpy_ctp import CtpGateway
-
-# 写在创建main_engine对象后
-main_engine.add_gateway(CtpGateway)
-```
-
-
-## 连接接口
-
-在图形化操作界面VeighNa Trader上的菜单栏中点击【系统】->【连接CTP】,会弹出账号配置窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/gateway/1.png)
-
-输入账号、密码等相关信息即可连接接口,并立刻进行查询工作: 如查询账号信息、查询持仓、查询委托信息、查询成交信息等。查询成功后可在主界面的组件中看到输出的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/gateway/5.png)
-
-### 修改json配置文件
-
-接口配置相关信息保存在json文件中,放置在用户目录下的.vntrader文件夹内,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/gateway/3.png)
-
-如果需要修改接口配置文件,用户既可以在图形化界面VeighNa Trader内修改,也可以直接在.vntrader文件夹下修改对应的json文件。
-
-另外将json配置文件分离于vnpy的好处在于:避免每次升级都要重新配置json文件。
-
-### 查看可交易的合约
-
-先登录接口,然后在菜单栏中点击【帮助】->【查询合约】即可弹出空白的【查询合约】窗口,点击【查询】按钮后才会显示查询结果。留空则查询全部合约,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/gateway/4.png)
-
-
-## 接口分类
-
-| 接口 | 类型 |
-| ---------------------| :--------------------------------------------: |
-| CTP | 期货、期货期权(实盘6.5.1) |
-| CTP测试 | 期货、期货期权(测试6.5.1) |
-| CTP Mini | 期货、期货期权(实盘1.4) |
-| 飞马 | 期货 |
-| CTP期权 | ETF期权(实盘20190802) |
-| 顶点飞创 | ETF期权 |
-| 顶点HTS | ETF期权 |
-| 恒生UFT | 期货、ETF期权 |
-| 易盛 | 期货、黄金TD |
-| 中泰XTP | A股、两融、ETF期权 |
-| 国泰君安统一交易网关 | A股 |
-| 华鑫奇点股票 | A股 |
-| 华鑫奇点期权 | ETF期权 |
-| 中亿汇达Comstar | 银行间市场 |
-| 东方证券OST | A股 |
-| 盈透证券 | 海外多品种 |
-| 易盛9.0外盘 | 外盘期货 |
-| 直达期货 | 外盘期货 |
-| 融航 | 期货资管 |
-| TTS | 期货 |
-| 飞鼠 | 黄金TD |
-| 金仕达黄金 | 黄金TD |
-
-
-## 接口详解
-
-### CTP
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - 期货期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-#### 获取账号
-
-- 仿真账号:从SimNow网站上获取。只需输入手机号码和短信验证即可(短信验证有时只能在工作日正常工作时段收到)。SimNow的用户名(InvestorID)为6位纯数字,经纪商编号为9999,并且提供两套环境用于盘中仿真交易以及盘后的测试。需要修改一次密码之后才能使用。请注意每套仿真环境的适用时间段是不同的。
-
-- 实盘账号:在期货公司开户,通过联系客户经理可以开通。用户名为纯数字,经纪商编号也是4位纯数字(每个期货公司的经纪商编号都不同)。另外,实盘账号也可以开通仿真交易功能,同样需要联系客户经理。
-
-### CTPTEST(CTP测试)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - 期货期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理向期货公司申请进行穿透式接入测试。
-
-### MINI(CTP Mini)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - 期货期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理可以开通。用户名为纯数字,经纪商编号也是4位纯数字(每个期货公司的经纪商编号都不同)。另外,实盘账号也可以开通仿真交易功能,同样需要联系客户经理。
-
-### FEMAS(飞马)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - 期货
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理可以开通。用户名为纯数字,经纪商代码也是4位纯数字(每个期货公司的经纪商编号都不同)。另外,实盘账号也可以开通仿真交易功能,同样需要联系客户经理。
-
-### SOPT(CTP期权)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - ETF期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理可以开通。用户名为纯数字,经纪商代码也是4位纯数字(每个期货公司的经纪商代码都不同)。另外,实盘账号也可以开通仿真交易功能,同样需要联系客户经理。
-
-### SEC(顶点飞创)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - ETF期权
-
-- 持仓方向
- - 股票只支持单向持仓
- - 股票期权只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 账号:
-- 密码:
-- 行情地址:
-- 交易地址:
-- 行情协议:TCP、UDP
-- 授权码:
-- 产品号:
-- 采集类型:顶点、恒生、金证、金仕达
-- 行情压缩:N、Y
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理可以开通。
-
-### HTS(顶点HTS)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - ETF期权
-
-- 持仓方向
- - 双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 账号:
-- 密码:
-- 行情地址:
-- 交易地址:
-- 行情协议:TCP、UDP
-- 授权码:
-- 产品号:
-- 采集类型:顶点、恒生、金证、金仕达
-- 行情压缩:N、Y
-
-#### 获取账号
-
-在期货公司开户,通过联系客户经理可以开通。
-
-### UFT(恒生UFT)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - ETF期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 行情服务器:
-- 交易服务器:
-- 服务器类型:期货、ETF期权
-- 产品名称:
-- 授权编码:
-- 委托类型:q
-
-#### 获取账号
-
-测试账号请通过恒生电子申请。
-
-### ESUNNY(易盛)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - 黄金TD
-
-- 持仓方向
- - 支持双向持仓
-
-- 历史数据
- - 不支持
-
-#### 相关字段
-
-- 行情账号:
-- 行情密码:
-- 行情服务器:
-- 行情端口:0
-- 行情授权码:
-- 交易账号:
-- 交易密码:
-- 交易服务器:
-- 交易端口:0
-- 交易产品名称:
-- 交易授权编码:
-- 交易系统:内盘、外盘
-
-#### 获取账号
-
-测试账号请通过易盛官方网站申请。
-
-### XTP(中泰柜台)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - A股
- - 两融
- - ETF期权
-
-- 持仓方向
- - 股票只支持单向持仓
- - 其余标的支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 账号:
-- 密码:
-- 客户号: 1
-- 行情地址:
-- 行情端口: 0
-- 交易地址:
-- 交易端口: 0
-- 行情协议: TCP、UDP
-- 日志级别:FATAL、ERROR、WARNING、INFO、DEBUG、TRACE
-- 授权码:
-
-#### 获取账号
-
-测试账号请通过中泰证券申请。
-
-#### 其他特点
-
-XTP是首家提供融资融券的极速柜台。
-
-### HFT(国泰君安统一交易网关)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - A股
-
-- 持仓方向
- - 只支持单向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 交易用户名:
-- 交易密码:
-- 交易服务器:
-- 交易端口:
-- 机构代号:
-- 营业部代号:
-- 网关:
-- 行情用户名:
-- 行情密码:
-- 行情服务器:
-- 行情端口:
-
-#### 获取账号
-
-测试账号请通过国泰君安申请。
-
-### TORASTOCK(华鑫奇点股票)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - A股
-
-- 持仓方向
- - 只支持单向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 账号:
-- 密码:
-- 行情服务器:
-- 交易服务器:
-- 账号类型:用户代码、资金账号
-- 地址类型:前置地址、FENS地址
-
-#### 获取账号
-
-测试账号请通过华鑫证券申请。
-
-### TORAOPTION(华鑫奇点期权)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - ETF期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 账号:
-- 密码:
-- 行情服务器:
-- 交易服务器:
-- 账号类型:用户代码、资金账号
-- 地址类型:前置地址、FENS地址
-
-#### 获取账号
-
-测试账号请通过华鑫证券申请。
-
-### COMSTAR(中亿汇达)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - 银行间市场
-
-- 持仓方向
- - 无
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 交易服务器:
-- 用户名:
-- 密码:
-- Key:
-- routing_type:5
-- valid_until_time:18:30:00.000
-
-#### 获取账号
-
-只有各类大型金融机构才能用(券商自营交易部、银行金融市场部等),私募或者个人都用不了。需要购买ComStar的交易接口服务之后才能使用。
-
-### OST(东方证券)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - A股
-
-- 持仓方向
- - 单向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 交易服务器:
-- 上交所快照地址:
-- 上交所快照端口: 0
-- 深交所快照地址:
-- 深交所快照端口: 0
-- 本机ip地址:
-
-#### 获取账号
-
-在证券公司开户,通过联系客户经理可以开通。
-
-### IB(盈透证券)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
- - Mac
-
-- 交易品种
- - 海外多品种
-
-- 持仓方向
- - 只支持单向持仓
-
-- 历史数据
- - 提供
-
-#### 相关字段
-
-- TWS地址:127.0.0.1
-- TWS端口:7497
-- 客户号:1
-- 交易账户:
-
-#### 获取账号
-
-在盈透证券开户并且入金后可以获得API接入权限。
-
-#### 其他特点
-
-可交易品种覆盖诸多海外市场的股票、期权、期权;手续费相对较低。
-
-请注意,IB接口的合约代码较为特殊,请前往官网的产品查询板块查询。VeighNa Trader中使用的是盈透证券对于每个合约在某一交易所的唯一标识符ConId来作为合约代码,而非Symbol或者LocalName。
-
-### TAP(易盛9.0外盘)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - 外盘期货
-
-- 持仓方向
- - 只支持单向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 行情账号:
-- 行情密码:
-- 行情服务器:
-- 行情端口:0
-- 交易账号:
-- 交易密码:
-- 交易服务器:
-- 交易端口:0
-- 授权码:
-
-#### 获取账号
-
-测试账号请通过易盛官方网站申请。
-
-### DA(直达期货)
-
-#### 接口支持
-
-- 操作系统
- - Windows
-
-- 交易品种
- - 外盘期货
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 交易服务器:
-- 行情服务器:
-- 授权码:
-
-#### 获取账号
-
-在直达期货开户并且入金后可以获得API接入权限。
-
-### ROHON(融航)
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货资管
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-测试账号请通过融航申请。
-
-请注意,融航接口的【经纪商代码】不再是纯数字形态,而是可以包含英文和数字的字符串;VeighNa连接融航进行交易在穿透式认证中属于【中继】模式,而不再是连接柜台(CTP、恒生等)进行交易时的【直连】模式,所以在申请穿透式认证测试填表时不要选错。
-
-### TTS
-
-#### 接口支持
-
-- 操作系统
- - Windows
- - Ubuntu
-
-- 交易品种
- - 期货
- - 期货期权
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 经纪商代码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-请通过OpenCTP平台获取。
-
-### SGIT(飞鼠)
-
-#### 接口支持
-
-- 操作系统
- - Ubuntu
-
-- 交易品种
- - 黄金TD
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 交易服务器:
-- 行情服务器:
-- 产品名称:
-- 授权编码:
-
-#### 获取账号
-
-请通过黄金现货经纪商获取。
-
-### KSGOLD(金仕达黄金)
-
-#### 接口支持
-
-- 操作系统
- - Ubuntu
-
-- 交易品种
- - 黄金TD
-
-- 持仓方向
- - 只支持双向持仓
-
-- 历史数据
- - 不提供
-
-#### 相关字段
-
-- 用户名:
-- 密码:
-- 交易服务器:
-- 行情服务器:
-- 账号类型:银行账号、黄金账号
-
-#### 获取账号
-
-请通过黄金现货经纪商获取。
diff --git a/docs/community/info/index.rst b/docs/community/info/index.rst
deleted file mode 100644
index 43637f0..0000000
--- a/docs/community/info/index.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-交易功能
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
- :caption: Elite版
-
- introduction.md
- veighna_station.md
- veighna_trader.md
- gateway.md
- database.md
- datafeed.md
- pycharm.md
- contribution.md
\ No newline at end of file
diff --git a/docs/community/info/introduction.md b/docs/community/info/introduction.md
deleted file mode 100644
index 30b5949..0000000
--- a/docs/community/info/introduction.md
+++ /dev/null
@@ -1,128 +0,0 @@
-# 功能介绍
-
-作为一套基于Python的量化交易程序开发框架,VeighNa致力于提供从交易API对接到策略自动交易的量化解决方案。
-
-## 目标用户
-
-如果有以下需求,不妨试试看VeighNa:
-
-* 基于Python语言来开发自己的量化交易程序,充分利用Python社区强大的数据研究和机器学习生态
-* 通过一套标准化的交易平台体系,对接国内外诸多不同类型的金融市场:证券、期货、期权、外盘等
-* 使用经过充分实盘检验的量化策略引擎,来完成从数据维护、策略开发、回测研究到实盘自动交易的整个业务流程
-* 对平台进行各种定制扩展,满足个性化的交易需求:增加交易接口,修改GUI图形界面,基于事件驱动引擎开发复杂策略应用
-* 掌控交易程序的源代码细节,杜绝各种程序后门,避免被窃取策略、截获交易信号、偷盗账号密码等风险
-* 节约为量化交易平台付出的资金成本,不必再支出上万每年的软件授权费或者每笔成交的额外加点
-
-
-## 应用场景
-
-从专业个人投资者、创业型私募,到券商资管部门,都能找到VeighNa的应用场景。
-
-* 专业个人投资者:使用VeighNa Trader直连期货公司的CTP期货柜台,实现从策略开发到实盘自动交易的CTA业务流程
-* 创业型私募:基于RpcService构建服务器端的统一报盘通道,允许交易员在自己的本地电脑自行开发各类交易策略应用
-* 券商资管部门:对接证券公司统一部署的O32资管系统,基于事件驱动引擎定制开发多策略复杂系统
-
-
-## 支持的接口
-
-**vnpy.gateway**,覆盖国内外所有交易品种的交易接口:
-
-* 国内市场
-
- * CTP(ctp):期货、期货期权
-
- * CTP测试(ctptest):期货、期货期权
-
- * CTP Mini(mini):期货、期货期权
-
- * 飞马(femas):期货
-
- * CTP期权(sopt):ETF期权
-
- * 顶点飞创(sec):ETF期权
-
- * 顶点HTS(hts):ETF期权
-
- * 恒生UFT(uft):期货、ETF期权
-
- * 易盛(esunny):期货、黄金TD
-
- * 中泰XTP(xtp):A股、两融、ETF期权
-
- * 国泰君安统一交易网关(hft):A股、两融
-
- * 华鑫奇点股票(torastock):A股
-
- * 华鑫奇点期权(toraoption):ETF期权
-
- * 中亿汇达Comstar(comstar):银行间市场
-
- * 东方证券OST(ost):A股
-
- * 融航(rohon):期货资管
-
- * TTS(tts):期货
-
- * 飞鼠(sgit):黄金TD
-
- * 金仕达黄金(ksgold):黄金TD
-
-* 海外市场
-
- * 盈透证券(ib):海外多品种
-
- * 易盛9.0外盘(tap):外盘期货
-
- * 直达期货(da):外盘期货
-
-* 特殊应用
-
- * RPC服务(rpc):跨进程通讯接口,用于分布式架构
-
-
-## 支持的应用
-
-**vnpy.app**,开箱即用的各类量化策略交易应用:
-
-* cta_strategy:CTA策略引擎模块,在保持易用性的同时,允许用户针对CTA类策略运行过程中委托的报撤行为进行细粒度控制(降低交易滑点、实现高频策略)
-
-* cta_backtester:CTA策略回测模块,无需使用Jupyter Notebook,直接使用图形界面直接进行策略回测分析、参数优化等相关工作
-
-* spread_trading:多合约价差套利模块,除了允许用户通过手动的方式来启动算法买卖价差外,也同样支持用户使用策略模板SpreadStrategyTemplate来开发各种价差类的量化交易策略
-
-* algo_trading:算法交易模块,提供多种常用的智能交易算法:TWAP、Sniper、Iceberg、BestLimit等等。支持常用算法配置保存
-
-* option_master:期权波动率交易模块,提供波动率曲线图表,允许用户作出相应的判断分析,进而使用波动率管理组件设置定价参考波动率,然后就可以通过期权电子眼算法自动扫描市场上的交易机会并瞬时完成交易
-
-* portfolio_strategy:多合约组合策略模块,专门针对需要同时交易多合约的量化策略设计,满足其历史数据回测和实盘自动交易的需求
-
-* script_trader:脚本策略模块,针对多标的组合类交易策略设计,同时也可以直接在命令行中实现REPL指令形式的交易,不支持回测功能
-
-* chart_wizard:实时K线图表模块,可以实现简单的实时K线行情显示,直接在本地合约代码的编辑框中输入vt_symbol,点击【新建图表】的按钮就会打开对应合约的图表
-
-* rpc_service:RPC服务模块,允许将某一VeighNa Trader进程启动为服务端,作为统一的行情和交易路由通道,允许多客户端同时连接,实现多进程分布式系统
-
-* excel_rtd:EXCEL RTD模块,RTD全称是RealTimeData,是微软主要为金融行业的实时数据需求设计的Excel数据对接方案。该模块用于实现在Excel中访问VeighNa程序内任意数据信息的功能
-
-* data_manager:历史数据管理模块,是VeighNa Trader内部针对历史数据的多功能管理工具。可以支持数据导入、数据查看以及数据导出等功能,支持自定义数据表头格式
-
-* data_recorder:行情记录模块,基于图形界面进行配置,根据需求实时录制Tick或者K线行情到数据库中,用于策略回测或者实盘初始化
-
-* risk_manager:风险管理模块,提供包括交易流控、下单数量、活动委托、撤单总数等规则的统计和限制,有效实现前端风控功能
-
-* web_trader:Web服务模块,针对B-S架构需求设计,实现了提供主动函数调用(REST)和被动数据推送(Websocket)的Web服务器
-
-* portfolio_manager:投资组合管理模块,该模块主要面向各种采用基本面策略的投资者,针对每个投资策略,创建一个独立的投资组合策略对象
-
-* paper_account:模拟交易账户模块,是为了解决目前各类需要依赖服务端功能的仿真交易账户的问题,直接在交易客户端内部提供一套本地化的模拟交易环境,同时基于实盘行情的盘口数据进行委托撮合
-
-
-## 通用类组件
-
-**vnpy.event**,简洁易用的事件驱动引擎,作为事件驱动型交易程序的核心。
-
-**vnpy.chart**,Python高性能K线图表,支持大数据量图表显示以及实时数据更新功能。
-
-**vnpy.trader.database**,集成了几大数据库管理端模块,以支持数据库读写性能和未来的新数据库扩展。
-
-**vnpy.trader.datafeed**,提供标准化接口BaseDataFeed,带来了更加灵活的数据服务支持。
diff --git a/docs/community/info/pycharm.md b/docs/community/info/pycharm.md
deleted file mode 100644
index b72beed..0000000
--- a/docs/community/info/pycharm.md
+++ /dev/null
@@ -1,232 +0,0 @@
-# PyCharm开发指南
-
-PyCharm是由JetBrains公司推出针对Python语言的IDE,其内置一整套可以帮助用户在使用Python语言开发时提高其效率的工具。本文档意在为用户提供通过PyCharm开发使用VeighNa的方案以供参考。
-
-本文档中的内容基于Windows系统编写,但对于Linux/Mac系统大部分也都适用。
-
-VeighNa适用的Windows系统包括:
-
-- Windows 10/11
-- Windows Server 2019/2022
-
-> 其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。
-
-在Windows系统上使用VeighNa,推荐安装官方推出的【VeighNa Studio】Python发行版,**尤其是初次接触Python开发的新手用户**。
-
-
-## PyCharm安装
-
-首先从[PyCharm官网](https://www.jetbrains.com/pycharm/download/?section=windows#section=windows)下载PyCharm Community安装包:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/1.png)
-
-下载完成后,双击安装包则可进入PyCharm安装向导:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/2.png)
-
-如果想对安装选项进行设置,可以在PyCharm Community Edition Setup页面对相关选项进行勾选:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/3.png)
-
-安装完成后,会跳转到安装成功页面:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/4.png)
-
-如果前面勾选了Create Desktop Shortcut选项来创建桌面快捷方式的话,此时桌面上会出现PyCharm的图标,双击图标即可运行PyCharm。
-
-
-## VeighNa开发
-
-### 创建项目
-
-启动PyCharm之后,在弹出的欢迎界面中点击【New Project】创建新项目,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/6.png)
-
-在弹出的新项目窗口中,首先需要选择存放项目的文件夹路径【Location】,然后勾选Python解释器选项中的【Previously configured interpreter】选项(即当前系统中已经安装的Python环境):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/7.png)
-
-点击右侧Add Interpreter下拉框中的【Add Local Interpreter】,在弹出的对话框中点击左侧的【System Interpreter】标签,并在右侧出现的下拉框中选择VeighNa Studio自带Python解释器所在的路径:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/8.png)
-
-点击底部的【OK】按钮保存解释器配置,回到新项目窗口中,点击右下方的【Create】按钮来完成新项目的创建:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/9.png)
-
-创建成功的项目窗口如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/10.png)
-
-此时点击左上方的【External Libraries】,即可看到项目中可以调用的外部库:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/11.png)
-
-点击site_packages文件夹,往下滚动就能扎到VeighNa Studio中vnpy核心框架包以及vnpy_前缀的插件模块包。此时可以通过点击对应图标来查看每个包中的文件源码,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/13.png)
-
-把鼠标光标移到代码上方,会自动弹出对应代码的文档信息:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/14.png)
-
-若按住Ctrl键的同时用鼠标左键点击代码,则会跳转到代码的声明部分:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/15.png)
-
-点击窗口右下角的【Python 3.10】按钮,会弹出【Settings】项目配置窗口,可以看到当前解释器环境下安装的包名称、本地版本号、最新版本号。带有升级符号(向上箭头)的包,说明当前版本不是最新版,点击升级符号即可自动升级。
-
-> 请注意:由于VeighNa对于部分依赖库有严格的版本要求,不建议用户手动升级安装的包到最新版,可能会出现版本冲突。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/49.png)
-
-### 运行程序
-
-从Github代码仓库下载[VeighNa Trader启动脚本文件run.py](https://github.com/vnpy/vnpy/blob/master/examples/veighna_trader/run.py),并将其放置于trader文件夹下,即可在窗口左侧的项目导航栏中看见run.py文件:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/16.png)
-
-若部分代码下方可以看见绿色波浪线显示(变量名称英文词语检查),可以点击项目名称左方的主菜单按钮 -【File】-【Settings】-【Editor】-【Inspections】-【Proofreading】,取消【Typo】的勾选后点击【OK】确认。再回到主窗口,可以发现绿色波浪线已经消失:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/17.png)
-
-点击鼠标右键,选择【Run 'run'】,即可开始运行run.py脚本:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/21.png)
-
-此时在界面底部的终端内容输出区域中,可以看到程序运行时的打印信息:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/19.png)
-
-
-
-与此同时,VeighNa Trader的主窗口也会自动弹出显示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/20.png)
-
-
-
-回到PyCharm,可以看到项目界面右上角已经有run脚本的运行记录了,后续直接点击三角形运行按钮也可运行脚本,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/18.png)
-
-
-### 断点调试
-
-PyCharm的断点调试功能十分强大,这里使用一个VeighNa的策略历史回测脚本来演示。
-
-在左侧项目导航栏中点击鼠标右键,选择【New】-【File】, 在弹出的对话框中创建backtest.py:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/25.png)
-
-然后在文件中编写一段策略回测代码(具体可参考Github仓库中的[回测示例](https://github.com/vnpy/vnpy/blob/master/examples/cta_backtesting/backtesting_demo.ipynb)),在想要调试的地方打上断点,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/26.png)
-
-点击鼠标右键选择【Debug 'backtest'】, 即可开始调试脚本:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/27.png)
-
-此时项目界面右上角已经可以看到backtest.py的运行记录,后续也可以通过点击这里的按钮直接启动调试任务:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/28.png)
-
-启动调试后,可以看到主界面底部的Debug窗口开始输出程序运行信息,并且程序会暂停运行在第一个断点处。左侧显示的是线程信息,右侧则是当前上下文中的变量信息:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/29.png)
-
-点击类似播放键的【Resume Program】即可继续运行调试,直到下一个断点处再次暂停:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/30.png)
-
-此时可以看到底部右侧监控窗口中,当前上下文中的变量发生了变化:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/31.png)
-
-后续重复上述步骤,点击【Resume Program】直到调试结束,可以看到Debug窗口的相应输出:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/32.png)
-
-调试完之后,点击【Rerun 'backtest'】即可重新调试:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/33.png)
-
-在调试过程中,点击【Step Into】可以进入函数的内部查看运行时的细节状态:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/34.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/35.png)
-
-点击【Step Out】则可跳出当前函数,查看外层调用栈的状态:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/37.png)
-
-点击【Step Over】可越过子函数(子函数会执行):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/36.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/38.png)
-
-点击【Stop 'backtest'】则会直接停止当前程序的运行:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/39.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/40.png)
-
-#### 指定程序的运行目录
-
-在PyCharm新建项目时,默认是在当前目录下运行程序。若需要指定程序运行的目录,可以点击项目界面右上角的【Edit】进入【Run/Debug Configurations】界面:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/43.png)
-
-修改程序启动时的目录【Working directory】:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/44.png)
-
-#### C++回调断点调试
-
-通常情况下,PyCharm只能在Python解释器中启动的线程里进行代码断点调试。之前有部分用户反馈过尝试在C++回调函数(如CTP API接口、PySide图形库等)中打断点但无法起效的问题。针对这种情况,可以通过在代码中设置断点的方式,来实现对非Python线程(即C++)的断点调试。
-
-在项目左侧导航栏中点击鼠标右键,选择【New】-【File】, 创建geteway_test.py。
-
-在创建成功的geteway_test.py中添加一段脚本策略的代码(可参考[该文件](https://github.com/vnpy/vnpy/blob/master/examples/veighna_trader/demo_script.py)),然后按住Ctrl同时用鼠标左键点击代码中的CtpGateway,跳转至ctp_gateway.py的源码中,在想要调试的回调函数内打上断点(注意不要打在函数定义的def那一行),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/50.png)
-
-回到gateway_test.py,点击鼠标右键选择【Debug 'gateway_test'】, 即可开始调试:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/51.png)
-
-> 请注意,如果用load_json函数读取connect_ctp.json,请确保读取对应.vntrader文件夹的json文件中配置了CTP账户登录信息。
-
-此时可观察到并没有进入之前设定的断点,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/52.png)
-
-终止调试后,找到之前在ctp_gateway.py中设定的断点处,在回调函数内的断点之前添加以下代码:
-
-```Python 3
-import pydevd
-pydevd.settrace(suspend=False, trace_only_current_thread=True)
-```
-
-请注意:
- - pydevd是PyCharm自带的调试插件,没有安装在Python解释器所在的Python环境里;
- - suspend参数设置为True之后,调试会在这一句代码运行完之后暂停,而不是停在断点处。trace_only_current_thread参数设置为True之后,调试过程中只会监控当前线程;
- - 调试结束之后不要忘记删掉这段代码。
-
-然后再次运行调试gateway_test.py脚本:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/53.png)
-
-此时可以看到底部的调试窗口中开始输出相关信息,同时程序暂停在了之前设置的断点处。左侧显示的是线程信息(可以看到多了一个Dummy线程显示),右侧显示的是变量信息(可以看到回调函数的入参):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/pycharm/54.png)
-
-
-## 对比VS Code
-
-1. 在PyCharm中,每个项目都需要对Python环境进行配置。在VS Code中,默认通过窗口右下角的Python解释器来选择全局的Python环境(针对所有打开的文件);
-
-2. PyCharm的Community版仅对Jupyter提供了只读支持,需要Professional版才能编辑和运行。VS Code仅需安装功能插件,就可以使用和Jupyter相关全部功能(包括读取、编辑、运行)。
diff --git a/docs/community/info/veighna_station.md b/docs/community/info/veighna_station.md
deleted file mode 100644
index 50e1de0..0000000
--- a/docs/community/info/veighna_station.md
+++ /dev/null
@@ -1,163 +0,0 @@
-# VeighNa Station
-
-## 启动程序
-
-### 点击图标启动
-
-安装成功后,双击桌面上VeighNa Station快捷方式:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/1.png)
-
-即可运行VeighNa Station。
-
-### 命令行启动
-
-打开命令行工具,输入veighna回车运行,即可启动VeighNa Station。
-
-## 用户登录
-
-首次使用VeighNa Station时会弹出VeighNa Studio的免责声明,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/2.png)
-
-仔细阅读并点击【确认】之后,会弹出包含用户名输入框、密码输入框、登录按钮和注册按钮的用户登录界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/3.png)
-
-用户按照要求在用户名输入框中输入用户名,在密码输入框中输入密码后,点击【登录】按钮,即可完成登录进入VeighNa Station主运行程序。
-
-新用户可以点击【注册】按钮注册账户,注册完成后即可登录。注册时请注意:
-
-- 个人邮箱请如实填写(后续用于找回密码等论坛功能);
-- 用户名自动使用注册时的微信【昵称】(不支持修改);
-- 密码请牢记,该密码也同样用于登录VeighNa社区论坛。
-
-**登录界面只在首次运行VeighNa Station时弹出**,之后运行VeighNa Station时会自动登录。
-
-## 界面窗口
-
-登录完成后,VeighNa Station界面会自动弹出,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/4.png)
-
-界面主要分为菜单栏、标题栏、功能栏、主显示区域、学习与使用区域、官方频道区域几个部分。
-
-### 菜单栏
-
-菜单栏位于顶部,包含【系统】和【帮助】两个按钮。
-
-#### 配置
-
-点击【系统】-【配置】,会弹出系统配置窗口,可以对PyPI索引和pip代理进行修改,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/5.png)
-
-PyPI索引用于更换VeighNa Station使用的pypiserver地址,当留空时默认使用的是https://pypi.org的PyPI服务器。
-
-pip代理默认为空,用户可自行设置。修改后可点击【保存】按钮,对配置进行保存并退出窗口。
-
-#### 登出
-
-点击【系统】-【登出】,会弹出登出窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/6.png)
-
-点击【Yes】会登出用户,并立即关闭程序。用户登出后,在下次启动时,需要重新进行用户登录。
-
-#### 关闭
-
-点击【系统】-【关闭】,会弹出退出窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/7.png)
-
-点击【Yes】立即关闭程序。
-
-
-### 主窗口
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/9.png)
-
-如上图所示,图中左侧区域为功能栏,右侧区域为主显示区域。功能栏包括社区、交易、投研、加密、更新等内容。随着左侧功能栏的不同选择,右侧主显示区域会显示对应的相关内容。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/10.png)
-
-如上图所示,VeighNa Station界面左下角为学习与使用区域。
-
-点击【使用文档】后会打开浏览器,并跳转到官方文档https://www.vnpy.com/docs/cn/index.html ,用户可以查询详细的使用说明。
-
-点击【社区求助】后会打开浏览器,并跳转到官方论坛https://www.vnpy.com/forum/ ,用户可以在论坛查询技术贴,并发帖交流。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/11.png)
-
-如上图所示,学习与使用区域下方为官方频道区域。
-
-从左到右分别为官方的Github仓库,官方微信公众号和官方知乎账号。点击即可打开浏览器直接跳转到相关页面。
-
-
-## 功能使用
-
-### 社区
-
-点击VeighNa Station左侧的【社区】按钮,右侧主显示区域显示内容为官方论坛,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/4.png)
-
-用户可以在该区域浏览官方论坛内容。
-
-### 交易
-
-点击VeighNa Station左侧的【交易】按钮,右侧主显示区域显示内容为交易接口、应用模块选择区域和信息输出区域,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/12.png)
-
-点击需要加载的交易接口或应用模块后的白色复选框,进行选择。然后点击主显示区域左下角【启动】按钮,即可启动VeighNa Trader。此时,右侧输出区域将输出程序运行中的信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/13.png)
-
-点击主显示区域右下角【修改】按钮,可修改运行目录。
-
-### 投研
-
-点击VeighNa Station左侧的【投研】按钮,右侧主显示区域为jupyterlab应用操作目录,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/14.png)
-
-点击主显示区域左下角的【启动】按钮后,将会在右下角指定的运行目录运行jupyterlab应用,可以在jupyterlab应用中进行投研操作,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/15.png)
-
-### 加密
-
-点击VeighNa Station左侧的【加密】按钮,右侧主显示区域显示加密相关内容,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/16.png)
-
-用户可在此界面下将选定的.py文件编译成.pyd文件,对策略进行加密操作。
-
-点击【选择】按钮,在弹出的窗口里选择需要加密的策略文件路径,点击【打开】按钮。此时主显示区域左下角的输入栏将变更为所需要加密文件的绝对路径,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/17.png)
-
-点击【加密】按钮,对文件进行编译。此时中央的显示区域将输出加密过程中的相关信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/18.png)
-
-等到输出文件加密进程终止后,将会在加密文件所在位置生成一个加密后的pyd文件。
-
-请注意,加密后需要先**把pyd文件名中的.cp310-win_amd64部分移除**,然后再放进自建strategies文件夹中。
-
-### 更新
-
-点击VeighNa Station左侧的【更新】按钮,右侧主显示区域显示组件更新相关内容,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/19.png)
-
-点击主显示区域左下角的【检查】按钮,将会显示本地已安装模块和版本,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/20.png)
-
-点击主显示区域右下角的【更新】按钮,后台将启动更新进程并输出相关信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/veighna_station/21.png)
-
-更新完成后,会弹出通知窗口,点击【OK】并重启VeighNa Station即可。
diff --git a/docs/community/info/veighna_trader.md b/docs/community/info/veighna_trader.md
deleted file mode 100644
index e4512c3..0000000
--- a/docs/community/info/veighna_trader.md
+++ /dev/null
@@ -1,242 +0,0 @@
-# VeighNa Trader
-
-## 启动程序
-
-### 图形模式
-
-启动登录VeighNa Station后,用户可通过点击【交易】按钮,勾选所需的交易接口和应用模块,点击【启动】按钮进入VeighNa Trader,如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/22.png)
-
-### 脚本模式
-
-在文件夹examples/veighna_trader中找到run.py文件(不是veighna_studio下的,需要在github上下载源码)。运行run.py即可进入VeighNa Trader。
-
-- 以Win10系统为例,用户可在run.py所在文件夹内按住【Shift】,同时点击鼠标右键,选择【在此处打开 powershell 窗口】,在弹出窗口中,输入如下命令,即可启动VeighNa Trader。
- ```bash
- python run.py
- ```
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/3.png)
-
-启动成功的VeighNa Trader如下图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/23.png)
-
-## 连接接口
-
-### SimNow仿真
-
-以使用SimNow仿真交易账号登陆**CTP**接口为例,在VeighNa Trader上的菜单栏中点击【系统】->【连接CTP】,会弹出账号配置窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/gateway/1.png)
-
-其中,各字段填写要求如下:
-- 用户名:xxxxxx (6位纯数字账号)
-- 密码:xxxxxx (需要修改一次密码用于盘后测试)
-- 经纪商代码:9999 (SimNow默认经纪商编号)
-- 交易服务器:180.168.146.187:10202 (盘中测试)
-- 行情服务器:180.168.146.187:10212 (盘中测试)
-- 产品名称:simnow_client_test
-- 授权编码:0000000000000000 (16个0)
-
-请注意,用户名需填写InvestorID(6位纯数字),而不是Simnow网站注册时的账号(手机号)。此外,Simnow注册的账号需要修改一次密码后才能登录。
-
-连接成功以后,VeighNa Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到账号信息,持仓信息,合约查询等相关信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-
-## 合约查询
-
-成功连接交易接口后,用户可以通过合约查询功能查询合约信息:
-点击菜单栏的【帮助】->【合约查询】,在弹出的对话框中直接点击右上角的【查询】按钮,即可查询合约信息(留空则查询所有合约的价格信息),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/spread_trading/3.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,才能查到合约信息。
-
-
-## 订阅行情
-
-在交易组件输入交易所和合约代码,按回车键即可订阅行情。如订阅股指期货时,交易所填写CFFEX,代码填写对应合约代码IF2206。
-
-订阅成功后,交易组件会显示合约名称,并且在下方显示深度行情报价,如最新价、买一价和卖一价,行情组件会显示最新行情信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/24.png)
-
-请注意,**输入的合约代码需与在菜单栏的【帮助】->【查询合约】功能中查到的一致**。
-
-
-## 委托交易
-
-交易组件用于手动发起委托交易,除了填写交易所和合约代码外,还需填写下图中的五个字段(方向、开平、类型、价格和数量):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/5.png)
-
-请注意,若委托类型为市价单,委托价格可不填;若交易接口只支持单向持仓(接口持仓方向支持详见交易接口篇),可不填写开平方向。
-
-发出委托后,本地会缓存委托相关信息,并显示到【委托】组件和【活动】组件,此时委托状态为【提交中】。
-
-交易所收到用户发送的委托后,会将其插入中央订单簿来进行撮合成交,并推送委托回报给用户:
-- 若委托还未成交,【委托】组件和【活动】组件只会更新时间和委托状态这两个字段,委托状态变成【未成交】;
-- 若委托立刻成交,委托相关信息会从【活动】组件移除,新增至【成交】组件,委托状态变成【全部成交】。
-
-
-## 数据监控
-
-数据监控由以下组件构成,并附带两个辅助功能:
-
-选定以下任一组件,鼠标右键可以选择【调整列宽】(特别适用于屏幕分辨率较低的情况)或者选择【保存数据】(CSV格式),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/12.png)
-
-### 行情组件
-
-行情组件用于对订阅的行情进行实时监控,如下图所示:
-
-![](https://vnpy-community.oss-cn-shanghai.aliyuncs.com/forum_experience/yazhang/quick_start/subcribe_contract_module.png)
-
-行情组件监控内容包括以下部分:
-
-- 合约信息:合约代码、交易所、合约名称;
-- 行情信息:最新价、成交量、开盘价、最高价、最低价、收盘价、买1价、买1量、卖1价、卖1量;
-- 其他信息:数据推送时间、接口。
-
-### 活动组件
-
-活动组件用于存放还未成交的委托,如有限价单或者没有立刻成交的市价单,在该组件中鼠标双击任一委托可以完成撤单操作,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/15.png)
-
-### 成交组件
-
-成交组件用于存放已成交的委托,在该组件中,价格、数量和时间都是交易所推送过来的成交信息,而不是委托信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/14.png)
-
-### 委托组件
-
-委托组件用于存放用户发出的所有委托信息,其委托状态可以是提交中、已撤销、部分成交、全部成交、拒单等,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/13.png)
-
-### 持仓组件
-
-持仓组件用于记录历史持仓,需要注意以下字段信息。
-
-- 方向:期货品种具有多空方向,而股票品种方向为【净】持仓;
-- 数量:总持仓,即今仓 + 昨仓;
-- 昨仓:其出现衍生于上期所特有的平今、平昨模式的需要;
-- 均价:历史成交的平均价格(某些巨型委托,会发生多次部分成交,需要计算平均价格);
-- 盈亏:持仓盈亏。多仓情况下,盈利 = 当前价格 - 均价,空仓则反之。
-
-若平仓离场,持仓数量清零,浮动盈亏变成实际盈亏从而影响账号余额变化。故以下字段:数量、昨仓、冻结、均价、盈亏均为0,如下图所示:
-
-![](https://vnpy-community.oss-cn-shanghai.aliyuncs.com/forum_experience/yazhang/quick_start/query_position.png)
-
-
-### 资金组件
-
-资金组件显示了账号的基础信息,如下图所示:
-
-![](https://vnpy-community.oss-cn-shanghai.aliyuncs.com/forum_experience/yazhang/quick_start/query_account.png)
-
-需要注意以下三个字段信息:
-
-- 可用资金:可以用于委托的现金
-- 冻结:委托操作冻结的金额(与保证金不是一个概念)
-- 余额:总资金,即可用资金 + 保证金 + 浮动盈亏
-
-若全部平仓,浮动盈亏变成实际盈亏,保证金和浮动盈亏清零,总资金等于可用资金。
-
-### 日志组件
-
-日志组件用于显示接口登陆信息以及委托报错信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/cta_strategy/1.png)
-
-
-## 应用模块
-
-VeighNa官方提供了开箱即用的量化交易应用模块,在启动VeighNa Trader时勾选所需的功能模块,启动成功后在菜单栏中点击【功能】按钮,即可显示所勾选的功能模块,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/25.png)
-
-
-## 全局配置
-
-点击VeighNa Trader菜单栏上的【配置】按钮弹出【全局配置】窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/20.png)
-
-### GUI界面
-
-font.family和font.size参数用于配置GUI界面,各参数含义如下所示:
-
-- font.family:设置VeighNa Trader图形界面的字体类型,除了默认的Arial字体,也支持Courier New和System字体;
-
-- font.size:设置VeighNa Trader图形界面的字体大小,用户可以根据自己显示器的实际分辨率对字体大小进行修改。
-
-### 日志输出
-
-log.active, log.level, log.console和log.file用于对日志输出进行配置,各参数含义如下所示:
-
-- log.active:控制是否启动LogEngine,默认为True。如果该项修改为False,则后续几项参数都将失效,同时VeighNa Trader运行时不再输出日志或生成日志文件(可以降低部分系统延时);
-
-- log.level:控制日志输出的级别,日志可以从轻到严重分成DEBUG、INFO、WARNING、ERROR、CRITICAL五个级别,分别对应10、20、30、40、50的整数值。如果日志等级低于该项设置值,将会被忽略。如果想要记录更详细的系统运行信息,建议将该项整数值调低;
-
-- log.console:console指的是终端,如Windows系统上的cmd和Powershell,以及Linux上的Terminal。当设置为True时,通过终端运行脚本(需要注册日志事件监听)来启动VeighNa Trader,日志信息会输出在终端中;如果通过VeighNa Station来直接启动VeighNa Trader,则无console输出;
-
-- log.file:该参数用于控制是否要将日志输出到文件中,建议设置为True,否则无法记录生成的日志。
-
-VeighNa Trader的日志文件,默认位于运行时目录的.vntrader\log目录下,完整路径为:
-```
-C:\users\administrator\.vntrader\log
-```
-
-其中,administrator为当前Windows系统的登录用户名。
-
-### 邮件通知
-
-以email为前缀的参数用于对邮箱进行配置,可以在特定事件发生时(如委托成交,数据异常时)发送邮件实时通知,各参数含义如下:
-
-- email.server: SMTP邮件服务器地址,默认填写好了QQ邮箱服务器地址,可以直接用,如果需要使用其他邮箱,需要自行查找一下其他的服务器地址;
-- email.port: SMTP邮件服务器端口号,默认填写好了QQ邮箱服务器端口,可以直接用;
-- email.username: 填写邮箱地址即可,如xxxx@qq.com;
-- email.password: 对于QQ邮箱,此处不是邮箱密码,而是开通SMTP后系统生成的一个授权码;
-- email.sender: 发送邮箱名,与email.username一致;
-- email.receiver: 接受邮件的邮箱地址。
-
-
-### datafeed数据服务
-
-与数据库适配器类似,对于数据服务有一个标准化的接口BaseDatafeed(位于vnpy.trader.datafeed),实现了更加灵活的数据服务支持,具体字段含义如下:
-
-- datafeed.name: 数据服务接口的名称,全称的小写英文字母;
-- datafeed.username: 数据服务的用户名;
-- datafeed.password: 数据服务的密码。
-
-字段如图所示:
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/quick_start/17.png)
-
-目前支持七种datafeed:
-- [XT]
-- [RQData]
-- [Udata]
-- [TuShare]
-- [TQSDK]
-- [Wind]
-- [iFinD]
-- [Tinysoft]
-
-[XT]:https://github.com/vnpy/vnpy_xt
-[RQData]:https://github.com/vnpy/vnpy_rqdata
-[Udata]: https://github.com/vnpy/vnpy_udata
-[TuShare]: https://github.com/vnpy/vnpy_tushare
-[TQSDK]: https://github.com/vnpy/vnpy_tqsdk
-[Wind]:https://github.com/vnpy/vnpy_wind
-[iFinD]: https://github.com/vnpy/vnpy_ifind
-[Tinysoft]: https://github.com/vnpy/vnpy_tinysoft
-
-
-### 数据库
-
-以database为前缀的参数用于配置数据库服务。目前,VeighNa支持SQLite、MySQL、PostgreSQL、MongoDB、InfluxDB、DolphinDB、Arctic和LevelDB八种数据库。具体配置方法详见项目文档的数据库配置部分。
diff --git a/docs/community/install/index.rst b/docs/community/install/index.rst
deleted file mode 100644
index 0e6561c..0000000
--- a/docs/community/install/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-安装指南
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- windows_install.md
- ubuntu_install.md
- mac_install.md
\ No newline at end of file
diff --git a/docs/community/install/mac_install.md b/docs/community/install/mac_install.md
deleted file mode 100644
index 359ec44..0000000
--- a/docs/community/install/mac_install.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Mac安装指南
-
-## Mac系统的CTP接口支持
-
-得益于Python语言本身的跨平台优势(Windows、Linux、Mac三大系统),VeighNa量化交易平台的核心框架部分很早就可以在Mac系统上运行。
-
-但由于C++类交易API对于Mac系统支持的普遍不足,导致之前只有vnpy_ib等少数【纯Python实现】的交易接口可以在Mac系统上运行,对于大部分用户来说没什么实际价值。
-
-从6.6.7版本的CTP API开始,上期技术官方推出了对Mac系统支持,包括Intel(x86_64)和苹果M系(arm64)芯片。终于,VeighNa平台可以在Mac系统上为期货量化用户提供从投研回测到实盘交易的一体化解决方案。
-
-
-## Mac系统的VeighNa安装流程
-
-目前Mac系统上还没有类似VeighNa Studio的开箱即用发行版,需要手动完成安装流程:
-
-1. 前往Python官网下载3.10版本的安装包(或者使用brew安装),安装完成后在终端(Terminal)中运行命令:
-
-```python 3
-python3
-```
-检查确认打开的Python解释器为3.10版本。
-
-2. 使用brew安装TA-Lib的C++开发包:
-
-```python 3
-brew install ta-lib
-```
-
-3. 安装NumPy和TA-Lib(Python),这里推荐使用豆瓣PyPI镜像解决官方源访问困难的问题:
-
-```python 3
-python3 -m pip install numpy --index=https://pypi.doubanio.com/simple
-python3 -m pip install ta-lib==0.4.24 --index=https://pypi.doubanio.com/simple
-```
-
-4. 安装米筐RQData客户端,注意这里使用的是米筐PyPI源:
-
-```python 3
-python3 -m pip install rqdatac --index=https://pypi2.ricequant.com/simple
-```
-
-5. 安装VeighNa核心框架,以及需要使用的功能插件模块:
-
-
-```python 3
-python3 -m pip install vnpy --index=https://pypi.doubanio.com/simple
-python3 -m pip install vnpy_ctastrategy vnpy_ctabacktester vnpy_datamanager vnpy_sqlite vnpy_rqdata --index=https://pypi.doubanio.com/simple
-```
-这里的例子中包括(具体可以根据自己的需求调整):
-
- - CTA策略实盘和回测模块:vnpy_ctastrategy、vnpy_ctabacktester
- - 历史数据管理模块:vnpy_datamanager
- - SQLite数据库驱动:vnpy_sqlite
- - RQData数据服务适配器:vnpy_rqdata
-
-pip安装过程中如果出现报错某些依赖库的缺失,可以尝试先pip install该依赖库,然后再次执行上述安装命令。
-
-6. 安装CTP交易接口模块:
-
-```python 3
-python3 -m pip install vnpy_ctp --index=https://pypi.doubanio.com/simple
-```
-
-如果Intel芯片的机器上安装失败,请在App Store中安装XCode编译器后再次尝试。
-
-完成后即可使用run.py脚本启动VeighNa Trader:
-
-```python 3
-from vnpy.event import EventEngine
-from vnpy.trader.engine import MainEngine
-from vnpy.trader.ui import MainWindow, create_qapp
-from vnpy_ctp import CtpGateway
-from vnpy_ctastrategy import CtaStrategyApp
-from vnpy_ctabacktester import CtaBacktesterApp
-from vnpy_datamanager import DataManagerApp
-
-def main():
- """Start VeighNa Trader"""
- qapp = create_qapp()
-
- event_engine = EventEngine()
- main_engine = MainEngine(event_engine)
-
- main_engine.add_gateway(CtpGateway)
- main_engine.add_app(CtaStrategyApp)
- main_engine.add_app(CtaBacktesterApp)
- main_engine.add_app(DataManagerApp)
-
- main_window = MainWindow(main_engine, event_engine)
- main_window.showMaximized()
-
- qapp.exec()
-
-if __name__ == "__main__":
- main()
-```
diff --git a/docs/community/install/ubuntu_install.md b/docs/community/install/ubuntu_install.md
deleted file mode 100644
index f1cefa8..0000000
--- a/docs/community/install/ubuntu_install.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Ubuntu安装指南
-
-## 检查Python
-
-检查本地Python版本,需要需要3.7版本以上的版本,可在命令行运行python命令查看。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/40.png)
-
-
-## 安装VeighNa
-
-### 下载源代码
-
-下载VeighNa源代码(Ubuntu系统请选择tar.gz格式):
-
-- [VeighNa Github下载地址](https://github.com/vnpy/vnpy/releases)
-- [VeighNa Gitee下载地址](https://gitee.com/mirrors/vn-py/releases)
-
-下载完成后用tar命令解压文件,如下图所示。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/41.png)
-
-### 执行一键安装
-
-安装VeighNa前需要先安装gcc编译器,用于编译C++类接口文件。在终端中运行以下命令:
-
-```
-sudo apt-get update
-sudo apt-get install build-essential
-```
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/39.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/43.png)
-
-然后进入之前解压出来的VeighNa源代码目录(包含install.sh文件)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/42.png)
-
-打开终端运行如下命令执行一键安装:
-
-```
-sudo bash install.sh
-```
-
-请注意,如果python软连接名不为python,比如python3或python3.10,请执行如下命令:
-
-```
-sudo bash install.sh 你的python软连接
-```
-
-一键安装过程整体分为3步:
-
-1. 下载安装ta-lib库和numpy;
-2. 安装requirements.txt文件内的相关依赖库;
-3. 安装VeighNa本身。
-
-> 若是在虚拟机上运行,请把内存调至4G以上,否则会报错内存不足。
-
-
-## 启动VeighNa Trader
-
-进入解压VeighNa源代码的目录下,在文件夹examples/veighna_trader中找到run.py文件。
-
-点击鼠标右键打开终端,输入如下命令即可启动VeighNa Trader:
-
-```
-python run.py
-```
-
-请注意run.py中包含了较多的启动加载项(交易接口和应用模块),请根据自己所用的操作系统以及实际的交易需求修改调整使用(若需加载接口,取消接口前注释符号即可)。
-
-请注意部分接口不支持Ubuntu系统,请不要加载。连接接口介绍详见交易接口篇(可查看接口支持的操作系统)。
-
-> 如果启动时出现一些库版本不兼容的情况,可根据提示对这些库重新pip安装。
-
-
-## 常见问题
-
-### Python开发环境问题处理
-
-如果安装时出现由于找不到头文件导致的报错“command ‘gcc’ failed with exit status 1”,可能是没有正确安装Python开发环境造成的。可以在终端中运行下述命令尝试解决:
-
-```
-sudo apt-get install 你的python软连接-dev
-```
-
-### 图形驱动问题处理
-
-在有图形界面的Ubuntu系统上启动,如果出现qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found的报错,可以在终端中运行下述命令来安装libxcb-xinerama0,尝试解决图形驱动的依赖问题:
-
-```
-sudo apt-get install libxcb-xinerama0
-```
-
-### 中文编码问题处理
-
-如果Ubuntu系统语言是英文,在连接CTP接口这类使用中文语言的接口时,可能会出现下述报错:
-
-terminate called after throwing an instance of 'std::runtime_error'
-what(): locale::facet::_S_create_c_locale name not valid
-
-可以使用local-gen安装中文编码尝试解决:
-
-```
-sudo locale-gen zh_CN.GB18030
-```
diff --git a/docs/community/install/windows_install.md b/docs/community/install/windows_install.md
deleted file mode 100644
index 8c0a3d7..0000000
--- a/docs/community/install/windows_install.md
+++ /dev/null
@@ -1,167 +0,0 @@
-# Windows安装指南
-
-本文档中安装步骤适用的Windows系统包括:
-
-- Windows 10/11
-- Windows Server 2019
-
-> 其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。
-
-在Windows系统上安装VeighNa,推荐使用官方推出的【VeighNa Studio Python发行版】,**尤其是初次接触Python的编程新手**。
-
-作为一站式的量化投研交易Python环境,VeighNa Studio整合了:
-
-- Python 3.10 64位(Python官网版本)
-- VeighNa和其他相关依赖库
-- VeighNa Station(VeighNa框架的图形化管理工具)
-
-对于已经有比较丰富的编程经验或者需要用到特定Python发行版(如Anaconda)的用户,也可以采用手动安装的方案。
-
-
-## VeighNa Studio方案
-
-### 下载安装
-
-在[VeighNa官网](https://www.vnpy.com/)可以下载VeighNa Studio安装包。
-
-下载完成后,双击安装包进入VeighNa Studio安装向导(推荐点击右键,选择【使用管理员身份运行】进行安装),使用默认设置点击【快速安装】按钮即可进行VeighNa Studio安装,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/21.png)
-
-> 推荐将VeighNa Studio安装在默认路径的C:\veighna_studio,其他VeighNa文档和教程中均使用该目录作为VeighNa安装目录进行讲解。
-
-如果想进行个性化安装,可点击【自定义安装】进入高级选项页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/24.png)
-
-安装完成后,会转换到安装成功页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/26.png)
-
-此时桌面会出现VeighNa Station的图标,双击图标即可运行VeighNa Station。
-
-### 使用
-
-安装成功后,启动命令行工具即可直接使用VeighNa Studio Python发行版。
-
-输入python即可进入python的交互式环境,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/29.png)
-
-此时在命令行中输入python代码就会立即执行。如果想运行pyqtgraph的自带的例子,可以依次输入以下代码:
-
-```python 3
-from pyqtgraph import examples
-examples.run()
-```
-
-此时则会弹出Examples的运行窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/30.png)
-
-点击左侧的Basic Plotting则会弹出示例的图形界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/31.png)
-
-如果想打开jupyter lab进行投资研究工作,可以打开cmd,输入jupyter lab,即可成功启动,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/32.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/38.png)
-
-### 修改
-
-如果安装之后,想要添加或者移除某项功能,可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/33.png)
-
-点击【修改】,进入修改页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/35.png)
-
-选择完可选功能后,点击【下一步】,进入高级选项页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/37.png)
-
-选择完毕,即可重新安装。
-
-### 修复
-
-如果安装之后,出现安装不完整或者其他需要修复的情况,可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/33.png)
-
-点击【修复】,进入修复界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/34.png)
-
-修复完成后,会转换到修复成功页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/15.png)
-
-### 卸载
-
-如果想卸载VeighNa Studio, 可以双击VeighNa Studio的安装包,进入VeighNa Studio安装界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/33.png)
-
-点击【卸载】,进入卸载界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/27.png)
-
-卸载完成后,会转换到卸载成功页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/28.png)
-
-
-## 手动安装方案
-
-### 准备Python环境
-
-首先请在电脑上准备好Python 3.10 64位环境(**注意必须是64位版本**),推荐使用Python官网的发行版,也可以使用Anaconda、Miniconda、Canopy等发行版。
-
-这里我们以Python官网的发行版为例,首先在[Python官网](https://www.python.org/downloads/windows/)下载安装文件,选择【Windows installer (64-bit)】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/22.png)
-
-下载完毕后,双击文件进入Python安装向导,勾选【Add Python3.10 to PATH】选项后,点击【Install Now】进行安装,推荐使用默认设置一路点击【下一步】直到安装完成即可:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/install/23.png)
-
-
-### 下载安装VeighNa
-
-下载VeighNa源代码(Windows系统请选择zip格式):
-
-- [VeighNa Github下载地址](https://github.com/vnpy/vnpy/releases)
-- [VeighNa Gitee下载地址](https://gitee.com/mirrors/vn-py/releases)
-
-下载完成后解压,然后启动命令行工具(CMD或者PowerShell),进入源代码所在的目录后(即install.bat文件所在的目录),输入下列命令运行脚本执行一键安装:
-
-```
-install.bat
-```
-
-一键安装过程整体分为3步:
-
-1. 下载安装ta-lib库;
-2. 安装requirements.txt文件内的相关依赖库;
-3. 安装VeighNa本身。
-
-如果某一步安装过程中发生错误,请截取保存命令行中的报错信息(**注意优先保存底部的报错内容**),前往VeighNa社区论坛发帖提问寻求帮助。
-
-### 启动VeighNa Trader
-
-启动命令行工具,进入解压VeighNa源代码的目录下,在文件夹examples/veighna_trader中找到run.py文件。
-
-输入如下命令即可启动VeighNa Trader:
-
-```
-python run.py
-```
-
-请注意run.py中包含了较多的启动加载项(交易接口和应用模块),请根据自己所用的操作系统以及实际的交易需求修改调整使用(若需加载接口,取消接口前注释符号即可)。
-
-连接接口介绍详见交易接口篇。
-
-> 如果启动时出现一些库版本不兼容的情况,可根据提示对这些库重新pip安装。
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index 85c2e57..0000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,214 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Configuration file for the Sphinx documentation builder.
-#
-# This file does only contain a selection of the most common options. For a
-# full list see the documentation:
-# http://www.sphinx-doc.org/en/master/config
-
-# -- Path setup --------------------------------------------------------------
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-# import os
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
-
-
-# -- Project information -----------------------------------------------------
-
-project = 'VeighNa'
-copyright = '2015 - 2023, 上海韦纳软件科技有限公司'
-author = '上海韦纳软件科技有限公司'
-
-# The short X.Y version
-version = '2023.9.29'
-# The full version, including alpha/beta/rc tags
-release = '2023.9.29'
-
-# -- General configuration ---------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.intersphinx',
- 'recommonmark',
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-# source_suffix = ['.rst', '.md']
-# source_suffix = '.rst'
-source_suffix = {
- '.rst': 'restructuredtext',
- '.txt': 'markdown',
- '.md': 'markdown',
-}
-
-# The master toctree document.
-master_doc = 'index'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-locale_dirs = ["locale/"]
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# -- Options for HTML output -------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = 'alabaster'
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-html_theme_options = {
- 'logo': 'vnpy.ico',
- "base_bg": "inherit",
- "narrow_sidebar_bg": "inherit",
- 'github_banner': True,
- 'github_user': 'vnpy',
- 'github_repo': 'vnpy',
- 'github_type': 'star',
- 'description': (r""
- r"VeighNa"
- r"
"
- r"
"
- r"By Traders, For Traders"),
- 'fixed_sidebar': True,
- 'show_related': True
-}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Custom sidebar templates, must be a dictionary that maps document names
-# to template names.
-#
-# The default sidebars (for documents that don't match any pattern) are
-# defined by theme itself. Builtin themes are using these templates by
-# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
-# 'searchbox.html']``.
-#
-html_sidebars = {
- 'index': [
- 'about.html',
- 'sidebarintro.html',
- 'sourcelink.html',
- 'searchbox.html'
- ],
- '**': [
- 'about.html',
- 'localtoc.html',
- 'relations.html',
- 'sourcelink.html',
- 'searchbox.html'
- ]
-}
-
-
-# -- Options for HTMLHelp output ---------------------------------------------
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'vnpydoc'
-
-# -- Options for LaTeX output ------------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- # 'papersize': 'letterpaper',
-
- # The font size ('10pt', '11pt' or '12pt').
- #
- # 'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- #
- # 'preamble': '',
-
- # Latex figure (float) alignment
- #
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (master_doc, 'vnpy.tex', 'vnpy Documentation',
- 'VeighNa Team', 'manual'),
-]
-
-# -- Options for manual page output ------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (master_doc, 'vnpy', 'vnpy Documentation',
- [author], 1)
-]
-
-# -- Options for Texinfo output ----------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (master_doc, 'vnpy', 'vnpy Documentation',
- author, 'vnpy', 'One line description of project.',
- 'Miscellaneous'),
-]
-
-# -- Options for intersphinx output ----------------------------------------------
-intersphinx_mapping = {
- # 'python': ('https://docs.python.org/3/', None),
-}
-
-# -- Options for Epub output -------------------------------------------------
-
-# Bibliographic Dublin Core info.
-epub_title = project
-
-# The unique identifier of the text. This can be a ISBN number
-# or the project homepage.
-#
-# epub_identifier = ''
-
-# A unique identification for the text.
-#
-# epub_uid = ''
-# A list of files that should not be packed into the epub file.
-epub_exclude_files = ['search.html']
-
-# -- Options for Autodoc -------------------------------------------------
-autodoc_default_options = {
- 'member-order': 'bysource',
- 'undoc-members': True,
-}
diff --git a/docs/elite/extension/elite_algotrading.md b/docs/elite/extension/elite_algotrading.md
deleted file mode 100644
index fce7718..0000000
--- a/docs/elite/extension/elite_algotrading.md
+++ /dev/null
@@ -1,141 +0,0 @@
-# 算法交易执行
-
-Veighna Elite Trader提供了算法委托执行交易支持。
-
-
-## 功能简介
-
-用户可以通过Veighna Elite Trader主界面的【算法交易】组件来便捷完成启动算法、停止算法等任务。
-
-【算法交易】组件采用独立进程的算法引擎负责委托订单的具体执行过程。目前提供了五种示例算法,用户可以通过把大笔订单自动拆分成合适的小单分批委托的操作,有效降低交易成本和冲击成本,也可以在设定的阈值内进行高抛低吸操作。
-
-
-## 启动执行
-
-启动Veighna Elite Trader并连接接口之后,点击主界面左侧中部的【算法交易】标签页,就可以看见算法执行组件的操作界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/1.png)
-
-在单元格【算法】对应的下拉框中选择要启动的算法,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/2.png)
-
-选择好算法之后,对算法的参数进行配置,点击【启动算法】即可进行算法委托。此时Veighna Elite Trader主界面右侧中上部分的【算法】标签页会显示该算法的执行情况,右侧中上部分的【委托】标签页以及右侧中下部分的【成交】标签页则会显示相关的委托成交情况,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/5.png)
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/6.png)
-
-若需停止所有启动的算法,点击【全部停止】按钮即可停止所有算法。
-
-
-## 算法状态监控
-
-启动Veighna Elite Trader之后,点击主界面右侧中上部分的【算法】标签页,就可以看见算法状态监控组件。
-
-算法状态监控组件用于记录已启动算法的名称、本地代码、方向、开平、价格、总数量、成交量、剩余量、成交均价、状态、参数以及变量。除此之外,组件每行最左侧还嵌入了两个控制单个算法状态的按钮,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/7.png)
-
-### 算法状态
-
-一个算法具有运行、暂停、停止和结束四种状态。当算法启动时,算法处于“运行”状态(RUNNING)。当算法因为完成任务主动结束(计时到了或成交量满足条件等)时,算法处于“结束”状态(FINISHED)。当算法被暂停,算法处于“暂停”状态(PAUSED)。当算法被动结束,算法处于“停止”状态(STOPPED)。
-
-### 算法控制按钮
-
-当算法启动后,【算法】组件上会显示算法的状态信息。此时该算法信息最左侧的【停止】和【暂停】按钮皆处于可点击状态。若该算法主动结束了,此时该算法最左侧的两个按钮区域皆会变灰(不可点击)。
-
-#### 暂停算法
-
-若想暂停算法的执行,可点击【暂停】按钮,此时原来【暂停】按钮上的文字会变为“恢复”。
-
-#### 恢复算法
-
-如果想恢复已暂停算法的执行,则可点击【恢复】按钮进行恢复,此时原来【恢复】按钮上的文字会变为“暂停”。
-
-#### 停止算法
-
-若想停止该运行中的算法,可以点击【停止】按钮停止算法,此时该算法最左侧的两个按钮区域皆会变灰(不可点击)。
-
-
-## 算法介绍
-
-目前,【算法交易】组件提供了以下五种内置算法:
-
-### TWAP - 时间加权平均算法
-
-时间加权平均算法(TWAP)具体执行步骤如下:
-
-- 将委托数量平均分布在某个时间区域内,每隔一段时间用指定的价格挂出买单(或者卖单)。
-
-- 买入情况:卖一价低于目标价格时,发出委托,委托数量在剩余委托量与委托分割量中取最小值。
-
-- 卖出情况:买一价高于目标价格时,发出委托,委托数量在剩余委托量与委托分割量中取最小值。
-
-### Iceberg - 冰山算法
-
-冰山算法(Iceberg)具体执行步骤如下:
-
-- 在某个价位挂单,但是只挂一部分,直到全部成交。
-
-- 买入情况:先检查撤单,最新Tick卖一价低于目标价格,执行撤单;若无活动委托,发出委托,委托数量在剩余委托量与挂出委托量中取最小值。
-
-- 卖出情况:先检查撤单,最新Tick买一价高于目标价格,执行撤单;若无活动委托,发出委托,委托数量在剩余委托量与挂出委托量中取最小值。
-
-### Sniper - 狙击手算法
-
-狙击手算法(Sniper)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现好的价格立刻报价成交。
-
-- 买入情况:最新Tick卖一价低于目标价格时,发出委托,委托数量在剩余委托量与卖一量中取最小值。
-
-- 卖出情况:最新Tick买一价高于目标价格时,发出委托,委托数量在剩余委托量与买一量中取最小值。
-
-### Stop - 条件委托算法
-
-条件委托算法(Stop)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现行情突破立刻报价成交。
-
-- 买入情况:Tick最新价高于目标价格时,发出委托,委托价为目标价格加上超价。
-
-- 卖出情况:Tick最新价低于目标价格时,发出委托,委托价为目标价格减去超价。
-
-### BestLimit - 最优限价算法
-
-最优限价算法(BestLimit)具体执行步骤如下:
-
-- 监控最新Tick推送的行情,发现好的价格立刻报价成交。
-
-- 买入情况:先检查撤单:最新Tick买一价不等于目标价格时,执行撤单;若无活动委托,发出委托,委托价格为最新Tick买一价,委托数量为剩余委托量。
-
-- 卖出情况:先检查撤单:最新Tick买一价不等于目标价格时,执行撤单;若无活动委托,发出委托,委托价格为最新Tick卖一价,委托数量为剩余委托量。
-
-
-## 多账户支持
-
-### 加载
-
-市场深度交易模块提供了多账户批量下单交易支持(手动)。
-
-以登陆**CTP**接口为例,在登录界面下方的【交易接口】标签页的下拉框中先选中CTP接口。在“自定义接口”处填写自定义的接口名(例如“CTP1”、“CTP2”)之后点击【添加】按钮,填写子账户的配置信息,点击【确定】按钮,则可依次加载对应账户的接口。
-
-添加完毕后,点击登录界面的【登录】按钮登录VeighNa Elite Trader。在菜单栏中依次点击【系统】->【连接xxx】(xxx是自定义的接口名,若加载时填写的“CTP1”,则菜单栏中显示的就是【连接CTP1】),即可连接子账户接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到对应的账号信息,持仓信息等相关信息。
-
-此时已经可以在【市场深度交易】界面通过指定的账户进行委托了。
-
-### 算法下单
-
-#### 账户下单
-
-若需通过【算法交易】组件进行多账户委托,可在创建的图表左上角选择账户对应的【接口】启动算法。
-
-发出委托后,可以在VeighNa Elite Trader主界面【算法】、【委托】和【成交】组件上跟踪到根据对应接口下单的委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/algo/4.png)
-
-**请注意**:
- - 目前支持同时登录最多登录5个交易账户
diff --git a/docs/elite/extension/elite_dingtalk.md b/docs/elite/extension/elite_dingtalk.md
deleted file mode 100644
index e8d489d..0000000
--- a/docs/elite/extension/elite_dingtalk.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# 钉钉实时通知
-
-VeighNa Elite Trader主界面的全局配置的窗口提供了钉钉消息通知功能支持。用户可以通过简单的配置,在钉钉会话中收到程序运行过程中的核心系统日志以及CTA策略模块日志。
-
-## 钉钉配置
-
-启动钉钉,创建一个群聊,点击群聊右上角的设置图标,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/1.png)
-
-在弹出的群设置界面下滑,点击【机器人】设置,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/2.png)
-
-在弹出的界面中点击【添加机器人】,然后在机器人选项中选择【自定义】(通过Webhook接入自定义服务)机器人,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/3.png)
-
-在弹出的添加机器人窗口中输入自己定义的机器人名字并选择要发送消息的群,勾选【加签】选项(此时可点击【复制】按钮复制出密钥),点击【完成】按钮即可成功添加机器人配置,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/4.png)
-
-添加完机器人之后,复制处弹出的设置webhook窗口里Webhook地址中access token=后的Token内容,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/5.png)
-
-请注意,若配置时忘记了复制出密钥和Token,可以在添加完及机器人之后,点击群聊右上角的设置图标,选择【机器人】,在跳出窗口中“本群的机器人”部分下选择之前添加的机器人。可在弹出的【配置】窗口中找到密钥和Token信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/7.png)
-
-
-## VeighNa Elite Trader配置
-
-在VeighNa Elite Trader的全局配置窗口中的【钉钉】部分进行配置:
-
-- 启动:选择【是】选项;
-- Token:填入钉钉设置webhook窗口时复制出的Token内容;
-- 密钥:填入钉钉添加机器人勾选【加签】选项时复制出的密钥。
-
-
-## 钉钉接收信息样式
-
-VeighNa Elite Trader和钉钉都配置完毕后,VeighNa Elite Trader运行过程中的核心系统日志、CTA策略模块日志就会发送到配置Token对应的钉钉群聊会话中了。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ding/6.png)
diff --git a/docs/elite/extension/elite_ladder.md b/docs/elite/extension/elite_ladder.md
deleted file mode 100644
index 1a38db0..0000000
--- a/docs/elite/extension/elite_ladder.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# 市场深度交易
-
-Veighna Elite Trader提供了市场深度交易支持(实时)。
-
-
-## 应用场景
-
-市场深度交易组件应用于单合约实时日内交易。支持显示买方和卖方订单的实时挂单数据,按目前价格进行更新以反映实时市场活动。
-
-
-## 启动模块
-
-市场深度交易模块是Veighna Elite Trader自带的模块,无需启动之前通过【策略应用】标签页加载。
-
-启动登录VeighNa Elite Trader后,启动模块之前,请先连接交易接口。看到VeighNa Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块。
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【市场深度交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/1.png)
-
-即可进入市场深度交易模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/2.png)
-
-
-## 创建图表
-
-打开市场深度交易模块的UI界面后,在【本地代码】编辑框中输入合约代码(注意本地代码由代码前缀和交易所后缀两部分组成,如rb2305.SHFE)。
-
-点击【打开】按钮,即可创建对应合约的市场深度图表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/3.png)
-
-
-### 多个图表
-
-市场深度交易模块支持同时创建多个图表,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/7.png)
-
-### 关闭图表
-
-若想关闭已创建的市场深度图表图表,点击对应图表左下角的【关闭】按钮即可顺利关闭该图表。
-
-
-## 数据监控
-
-图表的顶部显示的是合约代码,左上方显示的是合约的委托路由(可选)、涨跌幅、开盘价、最高价、最低价以及成交量的信息,左侧中部显示的是该合约的持仓情况,左下方显示的是委托相关的按钮以及关闭图表的按钮。
-
-图表的右侧显示的是该合约的市场实时深度信息。【价格】列显示的是合约的价格,价格由高到低排序。【买入】与【卖出】列分别显示的是合约的买方挂单量和卖方挂单量,与【价格】一一对应。
-
-【价格】列上深蓝色单元格显示的是实时买一价,左侧【买入】列同一高度单元深蓝色单元格上显示的是对应的买一量。【价格】列上深红色单元格显示的是实时卖一价,右侧【卖出】列同一高度单元深红色单元格上显示的是对应的卖一量。
-
-【成交】列显示的是最新一个tick的成交量,【委托】列显示的是用户当前在该合约上对应价格的挂单数量。
-
-
-## 深度下单
-
-市场深度图表创建成功后,用户可基于图表上更新的买方深度挂单和卖方深度挂单进行手动委托。
-
-在界面左侧中部设置好预计委托的手数与开平方向之后,双击【买入】或【卖出】列上与中间【价格】列价格对应的蓝色/红色单元格,会弹出【操作确认】窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/4.png)
-
-点击【确认】,即可发出委托。此时【委托】列上与委托价格平齐的单元格上则会显示活跃委托的数量,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/5.png)
-
-
-## 深度撤单
-
-若想对撤销还未成交的挂单,可双击【委托】列上显示委托价格的单元格,会弹出【操作确认】窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/6.png)
-
-点击【确认】,即可撤销所有该对应价格的活动委托。
-
-若想对该合约的活动委托进行批量撤单,也可点击图表左下角的【撤卖】/【全撤】/【撤买】按钮撤销委托。
-
-
-## 多账户支持
-
-### 加载
-
-市场深度交易模块提供了多账户批量下单交易支持(手动)。
-
-以登陆**CTP**接口为例,在登录界面下方的【交易接口】标签页的下拉框中先选中CTP接口。在“自定义接口”处填写自定义的接口名(例如“CTP1”、“CTP2”)之后点击【添加】按钮,填写子账户的配置信息,点击【确定】按钮,则可依次加载对应账户的接口。
-
-添加完毕后,点击登录界面的【登录】按钮登录VeighNa Elite Trader。在菜单栏中依次点击【系统】->【连接xxx】(xxx是自定义的接口名,若加载时填写的“CTP1”,则菜单栏中显示的就是【连接CTP1】),即可连接子账户接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到对应的账号信息,持仓信息等相关信息。
-
-此时已经可以在【市场深度交易】界面通过指定的账户进行委托了。
-
-### 创建账户下单组合
-
-如果需要构建账户组合,并为组合内的每个账户分配不同的比例乘数,可以在菜单栏中点击【功能】->【多账户批量下单】,进入多账户批量下单模块的UI界面创建下单组合。
-
-### 深度下单
-
-#### 账户下单
-
-若需通过市场深度交易模块进行多账户委托,可在创建的图表左上角选择账户对应的【路由】进行委托。
-
-#### 组合下单
-
-若需通过市场深度交易模块进行组合下单,可在创建的图表左上角选择下单组合对应的【路由】进行委托(根据下单组合指定的比例发出委托)。
-
-发出委托后,除了可在图表的【委托】列观察到委托数量之外,还可在VeighNa Elite Trader主界面【委托】组件和【成交】组件上跟踪到根据对应接口下单的委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ladder/8.png)
-
-**请注意**:
- - 目前支持同时登录最多登录5个交易账户
- - 市场深度交易图表上显示的是连接的所有路由上该合约的总持仓
diff --git a/docs/elite/extension/index.rst b/docs/elite/extension/index.rst
deleted file mode 100644
index db5b75a..0000000
--- a/docs/elite/extension/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-智能交易
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- elite_ladder.md
- elite_algotrading.md
- elite_dingtalk.md
diff --git a/docs/elite/index.rst b/docs/elite/index.rst
deleted file mode 100644
index 53d60d9..0000000
--- a/docs/elite/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Elite版
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- info/index
- strategy/index
- extension/index
\ No newline at end of file
diff --git a/docs/elite/info/elite_install.md b/docs/elite/info/elite_install.md
deleted file mode 100644
index 1474554..0000000
--- a/docs/elite/info/elite_install.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Elite安装配置
-
-本文档中安装步骤适用的操作系统包括:
-
-- Windows 10/11
-- Windows Server 2019/2022
-
-> 其他版本的Windows系统安装时可能遇到各种依赖库问题,不推荐使用。
-
-
-## 安装流程
-
-### 安装
-
-下载VeighNa Elite安装包后,双击安装包进入VeighNa Elite安装向导(推荐点击右键,选择【使用管理员身份运行】进行安装),点击【下一步】按钮即可进行安装目录选择,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/install/1.png)
-
-> 推荐将VeighNa Elite安装在默认路径的C:\veighna_elite,其他VeighNa Elite文档和教程中均使用该目录作为VeighNa Elite安装目录进行讲解。
-
-选择完安装目录之后,点击【安装】即可进行VeighNa Elite安装,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/install/2.png)
-
-安装完成后,会转换到安装成功页面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/install/3.png)
-
-此时桌面会出现VeighNa Elite Trader和VeighNa Elite Lab的图标,双击图标即可运行对应程序。
-
-### 卸载
-
-如果想卸载VeighNa Elite, 可以在Windows系统中打开【设置】-【应用】-【应用和功能】,找到VeighNa Elite进行卸载。
-
-
-## 注意事项
-
-### 独立环境
-
-VeighNa Elite不会与VeighNa Studio等其他Python环境冲突,如需使用其他模块,可以通过PYTHONPATH环境变量加载。
-
-### 用户信息
-
-用户信息缓存在用户目录下的.vntrader文件夹中。如果卸载时需要清除用户数据及配置信息,需要将.vntrader文件夹删除。如果只是重新安装,只卸载程序即可,重装之后配置信息无需重新填写。
diff --git a/docs/elite/info/elite_lab.md b/docs/elite/info/elite_lab.md
deleted file mode 100644
index cf8e283..0000000
--- a/docs/elite/info/elite_lab.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# 投研开发环境
-
-
-## 启动运行
-
-### 点击图标启动
-
-安装成功后,双击桌面上VeighNa Elite Lab快捷方式:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/1.png)
-
-即可运行VeighNa Elite Lab。
-
-### 用户登录
-
-每次使用VeighNa Elite Lab都会弹出包含用户名输入框以及密码输入框的登录界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/2.png)
-
-用户按照要求在用户名输入框中输入用户名,在密码输入框中输入密码后,点击【登录】按钮,即可完成登录进入VeighNa Elite Lab主运行程序,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/3.png)
-
-请注意,若VeighNa Elite Lab启动时检测到已有更新版本发布,则会弹出【更新提示】窗口。若点击【Yes】则立即更新,若点击【No】则跳过更新正常登录。
-
-## 选择目录
-
-成功登录后,可在VeighNa Elite Lab启动界面的右下角看见运行目录(默认显示用户目录),若需切换到至指定目录运行可点击【修改】按钮在弹出的【选择Jupyter Lab运行目录】窗口中进行选择。指定完运行目录之后,则可点击界面左下角的【启动】按钮打开VeighNa Elite Lab,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/4.png)
-
-
-## 笔记本模式
-
-点击VeighNa Elite Lab右侧启动器中【Notebook】选项下的图标即可新建一个空白的jupyter笔记本,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/5.png)
-
-### 笔记本运行示例
-
-在VeighNa Elite Lab中,用户可加载VeighNa Elite内置的模块进行研究。
-
-以CTA策略模块的回测笔记本为例,首先需要加载需要用到的组件和策略对象,然后创建回测引擎并设置回测过程中引擎用到的参数。设置完之后再添加策略对象和策略参数设置到回测引擎中,此时就可以加载数据开始跑回测了。结果跑出来之后就可以计算每日盈亏和统计指标并通过图表把结果显示出来了。
-
-
-## 交互式模式
-
-点击VeighNa Elite Lab右侧启动器中【Console】选项下的图标即可打开一个Python交互式环境,可以直接输入代码,然后执行,并立刻得到结果。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/6.png)
-
-
-## 其他模式
-
-VeighNa Elite Lab不仅支持一个页面打开编辑多个Notebook,Ipython console和terminal终端,还支持预览和编辑更多种类的文件,如代码文件,Markdown文档,json和csv等,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/7.png)
-
-### 命令行
-
-点击VeighNa Elite Lab右侧启动器中【Other】选项下的Terminal图标即可打开命令行。
-
-### 编辑文本
-
-点击VeighNa Elite Lab右侧启动器中【Other】选项下的Text File图标即可新建一个空白的txt文件。VeighNa Elite Lab同时也支持编辑查看已存在的txt文件。
-
-### 编辑Markdown
-
-点击VeighNa Elite Lab右侧启动器中【Other】选项下的Markdown File图标即可新建一个空白的md文件。VeighNa Elite Lab同时也支持编辑查看已存在的md文件。编辑Markdown File时也可点击右键选择【Show Markdown Preview】进行预览。
-
-### 编辑Python文件
-
-点击VeighNa Elite Lab右侧启动器中【Other】选项下的Python File图标即可新建一个空白的py文件。VeighNa Elite Lab同时也支持编辑查看已存在的py文件。
-
-### 显示帮助文档
-
-点击VeighNa Elite Lab右侧启动器中【Other】选项下的Show Contextual Help图标即可新建一个帮助窗口,当鼠标点击任意函数时该窗口会显示对应的帮助文档,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/lab/8.png)
diff --git a/docs/elite/info/elite_trader.md b/docs/elite/info/elite_trader.md
deleted file mode 100644
index 4e1930e..0000000
--- a/docs/elite/info/elite_trader.md
+++ /dev/null
@@ -1,291 +0,0 @@
-# 基础交易功能
-
-
-## 启动交易程序
-
-### 点击图标启动
-
-安装成功后,双击桌面上VeighNa Elite Trader快捷方式:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/install/4.png)
-
-即可运行VeighNa Elite Trader。
-
-### 用户登录
-
-每次使用VeighNa Elite Trader都会弹出包含用户名输入框以及密码输入框的登录界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/1.png)
-
-用户按照要求在用户名输入框中输入用户名,在密码输入框中输入密码后,点击【登录】按钮,即可完成登录进入VeighNa Elite Trader主运行程序,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/8.png)
-
-请注意,若VeighNa Elite Trader启动时检测到已有更新版本发布,则会弹出【更新提示】窗口。若点击【Yes】则立即更新,若点击【No】则跳过更新正常登录。
-
-### 加载接口
-
-在登录界面的下方,有两个标签页。分别为【交易接口】和【策略应用】。
-
-点开【交易接口】标签下的接口下拉框,可以看到可供加载的接口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/2.png)
-
-在下拉框选择完需要加载的接口后,点击【添加】按钮,会弹出对应接口的配置窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/3.png)
-
-接口连接信息配置完毕之后,点击【确认】按钮则可看见选择的接口名字已经显示在标签页内容框中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/4.png)
-
-添加成功后,配置信息会被保存到本地,下次启动时无需重复填写。
-
-若需更新接口配置信息,选中指定的接口名,点击【修改】按钮,对应的配置窗口会弹出以供更新。
-
-若有无需再加载的接口,可选中指定的接口名,点击【移除】按钮,则可成功移除记录的接口名(没有删除记录的配置信息)。
-
-请注意:
-
- - 如果需要连接融航接口,需要自行安装vcredist 2010才可成功加载
-
- - 如果需要连接GT接口,第一次连接需要使用管理员身份启动程序
-
- - 如果需要使用多账户功能,可参考[多账户支持](#jump)部分的介绍
-
-### 加载应用
-
-在登录界面的下方,点击【策略应用】标签,则可切换到加载策略应用的标签页,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/5.png)
-
-点开【策略应用】标签下的接口下拉框,可以看到可供加载的应用,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/6.png)
-
-在下拉框选择完需要加载的接口后,点击【添加】按钮则可成功加载该应用。与此同时,该策略应用的名字会显示在标签页内容框中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/7.png)
-
-应用加载成功后,下次启动时无需重复操作。
-
-若有无需再加载的应用,可选中指定的应用名,点击【移除】按钮,即可移除已经加载的应用。
-
-## 登录资金账号
-
-以登陆**CTP**接口为例,在VeighNa Elite Trader上的菜单栏中点击【系统】->【连接CTP】,即可连接CTP接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到账号信息,持仓信息,合约查询等相关信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/9.png)
-
-## 查看合约信息
-
-成功连接交易接口后,用户可以通过合约查询功能查询合约信息。
-点击菜单栏的【帮助】->【合约查询】,在弹出的对话框中直接点击右上角的【查询】按钮,即可查询合约信息(留空则查询所有合约的价格信息),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/10.png)
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,才能查到合约信息。
-
-## 订阅行情数据
-
-在交易组件输入交易所和合约代码,按回车键即可订阅行情。如订阅股指期货时,交易所填写CFFEX,代码填写对应合约代码IF2306。
-
-订阅成功后,交易组件会显示合约名称,并且在下方显示深度行情报价,如最新价、买一价和卖一价,行情组件会显示最新行情信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/11.png)
-
-请注意,**输入的合约代码需与在菜单栏的【帮助】->【查询合约】功能中查到的一致**。
-
-## 委托下单撤单
-
-【快捷交易】组件用于手动发起委托交易,除了填写交易所和合约代码外,还需填写下图中的五个字段(方向、开平、类型、价格和数量):
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/12.png)
-
-若已成功订阅行情,可以勾选【价格】栏右侧的方框,设置价格随行情更新。勾选之后,【价格】栏上的委托价格会随行情推送自动更新为设定合约的最新价,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/13.png)
-
-请注意,若委托类型为市价单,委托价格可不填;若交易接口只支持单向持仓,可不填写开平方向。
-
-发出委托后,本地会缓存委托相关信息,并显示到【委托】组件和【活动】组件,此时委托状态为【提交中】。
-
-交易所收到用户发送的委托后,会将其插入中央订单簿来进行撮合成交,并推送委托回报给用户:
-- 若委托还未成交,【委托】组件和【活动】组件只会更新时间和委托状态这两个字段,委托状态变成【未成交】;
-- 若委托立刻成交,委托相关信息会从【活动】组件移除,新增至【成交】组件,委托状态变成【全部成交】。
-
-
-## 交易数据监控
-
-数据监控由以下组件构成,并附带两个辅助功能:
-
-选定以下任一组件,鼠标右键可以选择【调整列宽】(特别适用于屏幕分辨率较低的情况)或者选择【保存数据】(CSV格式),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/18.png)
-
-### 委托
-
-委托组件用于存放用户发出的所有委托信息,其委托状态可以是提交中、已撤销、部分成交、全部成交、拒单等,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/19.png)
-
-### 成交
-
-成交组件用于存放已成交的委托,在该组件中,价格、数量和时间都是交易所推送过来的成交信息,而不是委托信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/20.png)
-
-### 资金
-
-资金组件显示了账号的基础信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/21.png)
-
-需要注意以下三个字段信息:
-
-- 可用:可以用于委托的现金
-- 冻结:委托操作冻结的金额(与保证金不是一个概念)
-- 余额:总资金,即可用资金 + 保证金 + 浮动盈亏
-
-若全部平仓,浮动盈亏变成实际盈亏,保证金和浮动盈亏清零,总资金等于可用资金。
-
-### 持仓
-
-持仓组件用于记录历史持仓,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/22.png)
-
-需要注意以下字段信息:
-
-- 方向:期货品种具有多空方向,而股票品种方向为【净】持仓;
-- 数量:总持仓,即今仓 + 昨仓;
-- 昨仓:其出现衍生于上期所特有的平今、平昨模式的需要;
-- 均价:历史成交的平均价格(某些巨型委托,会发生多次部分成交,需要计算平均价格);
-- 盈亏:持仓盈亏。多仓情况下,盈利 = 当前价格 - 均价,空仓则反之。
-
-若平仓离场,持仓数量清零,浮动盈亏变成实际盈亏从而影响账号余额变化。
-
-
-## 应用模块
-
-VeighNa Elite提供了开箱即用的量化交易应用模块,在启动VeighNa Elite Trader时加载所需的应用模块,启动成功后在菜单栏中点击【功能】,即可在弹出的菜单中看到应用模块的对应按钮,同时在窗口最左侧区域也会有带图标的模块按钮用于快速打开应用,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/28.png)
-
-
-## 全局配置
-
-点击VeighNa Elite Trader菜单栏上的【配置】按钮弹出【全局配置】窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/29.png)
-
-
-### 数据服务
-
-- 服务名: 数据服务接口的名称,全称的小写英文字母;
-- 用户名: 数据服务的用户名;
-- 密码: 数据服务的密码。
-
-目前支持:
-- 迅投研数据服务:用户名填写“token”字符串,密码填写在迅投研用户中心后台页面查询到的令牌token内容
-- RQData数据服务:注意用户名username和密码password不是米筐官网登录用的账号和密码,用户名填写“license”这个字符,密码填写邮件收到的license的内容
-
-### 显示
-
-- 字体:设置VeighNa Elite Trader图形界面的字体类型,除了默认的Arial字体,也支持Courier New和System字体;
-- 大小:设置VeighNa Elite Trader图形界面的字体大小,用户可以根据自己显示器的实际分辨率对字体大小进行修改。
-
-### 日志
-
-- 启动:控制是否启动LogEngine,默认为True。如果该项修改为False,则后续几项参数都将失效,同时VeighNa Elite Trader运行时不再输出日志或生成日志文件(可以降低部分系统延时);
-- 级别:控制日志输出的级别,日志可以从轻到严重分成DEBUG、INFO、WARNING、ERROR、CRITICAL五个级别,分别对应10、20、30、40、50的整数值。如果日志等级低于该项设置值,将会被忽略。如果想要记录更详细的系统运行信息,建议将该项整数值调低;
-- 终端输出:控制是否终端输出;
-- 文件输出:该参数用于控制是否要将日志输出到文件中,建议设置为True,否则无法记录生成的日志。
-
-VeighNa Elite Trader的日志文件,默认位于运行时目录的.vntrader\log目录下,完整路径为:
-```
-C:\users\administrator\.vntrader\log
-```
-
-其中,administrator为当前Windows系统的登录用户名。
-
-### 钉钉
-
-- 启动:控制是否运行钉钉消息通知功能,如设为True,则在程序运行过程中的核心系统日志、CTA策略模块日志等,均会发送到下文Token对应的钉钉会话中;
-- Token:对应钉钉软件中,某一具体聊天会话的令牌,需要在钉钉会话中添加【自定义机器人】(基于Webhook接入自定义服务)后,在弹出的对话框中获取;
-- 密钥:用于对发送到钉钉的消息进行加密处理,同样需要在添加机器人时弹出的对话框中获取;
-
-### 邮件
-
-- 服务器地址: SMTP邮件服务器地址,默认填写了QQ邮箱服务器地址。如果需要使用其他邮箱,需要自行查找一下其他的服务器地址;
-- 服务器端口: SMTP邮件服务器端口号,默认填写了QQ邮箱服务器端口;
-- 用户名: 填写邮箱地址即可,如xxxx@qq.com;
-- 密码: 对于QQ邮箱,此处不是邮箱密码,而是开通SMTP后系统生成的一个授权码;
-- 发送邮箱: 与用户名一致;
-- 接收邮箱: 接受邮件的邮箱地址。
-
-
-## 多账户支持
-
-
-
-### 加载
-
-VeighNa Elite Trader提供了多账户批量下单交易支持(手动)。
-
-以登陆**CTP**接口为例,在登录界面下方的【交易接口】标签页的下拉框中先选中CTP接口。在“自定义接口”处填写自定义的接口名(例如“CTP1”、“CTP2”)之后点击【添加】按钮,填写子账户的配置信息,点击【确定】按钮,则可依次加载对应账户的接口。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/14.png)
-
-添加完毕后,点击登录界面的【登录】按钮登录VeighNa Elite Trader。在菜单栏中依次点击【系统】->【连接xxx】(xxx是自定义的接口名,若加载时填写的“CTP1”,则菜单栏中显示的就是【连接CTP1】),即可连接子账户接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到对应的账号信息,持仓信息等相关信息。
-
-日志组件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/15.png)
-
-资金组件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/25.png)
-
-持仓组件如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/26.png)
-
-此时已经可以在【快速交易】界面通过指定的账户进行委托了。
-
-### 创建账户下单组合
-
-如果需要构建账户组合,并为组合内的每个账户分配不同的比例乘数,可以在菜单栏中点击【功能】->【多账户批量下单】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/16.png)
-
-即可进入多账户批量下单模块的UI界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/17.png)
-
-在“输入下单组合名称”处输出自建组合的名称,点击【添加】按钮,可看见界面左侧已经输出该组合名称,右侧对应接口的下单单元可已经变为可编辑状态。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/23.png)
-
-设定完下单组合之后,点击【修改】按钮保存数据,此时该账户组合就创建成功了。
-
-之后若需修改下单比例,可点击【修改】按钮进行编辑。若需删除指定的下单组合,在左侧界面选中组合,点击【移除】按钮即可完成组合的移除。
-
-### 账户下单组合批量下单
-
-若需通过账户下单组合进行委托,可在【快速交易】接口点击【路由】的下拉框选中指定的下单组合进行委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/24.png)
-
-委托完成后,可在【委托】组件和【成交】组件上跟踪到比例下单的委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/trader/27.png)
-
-**请注意**:
- - 目前支持同时登录最多登录5个交易账户
-
-
diff --git a/docs/elite/info/index.rst b/docs/elite/info/index.rst
deleted file mode 100644
index 91e33f8..0000000
--- a/docs/elite/info/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-安装使用
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- elite_install.md
- elite_trader.md
- elite_lab.md
\ No newline at end of file
diff --git a/docs/elite/strategy/elite_ctastrategy.md b/docs/elite/strategy/elite_ctastrategy.md
deleted file mode 100644
index 2aa2341..0000000
--- a/docs/elite/strategy/elite_ctastrategy.md
+++ /dev/null
@@ -1,780 +0,0 @@
-# CTA趋势策略
-
-CtaStrategy是用于**CTA自动交易**的功能模块,用户可以通过其UI界面操作来便捷完成策略初始化、策略启动、策略停止、策略参数编辑以及策略移除等任务。
-
-
-## 主要优势
-
-CtaStrategy模块充分利用了多核CPU,支持多进程CTA策略交易。并提供了专业CTA策略模板EliteCtaTemplate,以实现更加强大的CTA策略开发。
-
-针对回测和实盘不一致的问题,EliteCtaTemplate内置了一套[基于策略的理论目标维护策略运行](#jump1)的方案。另外,EliteCtaTemplate还提供了对非交易时段垃圾数据的过滤配置支持(具体可参考过滤配置篇)。
-
-
-## 启动模块
-
-CtaStrategy模块需要启动之前通过【策略应用】标签页加载。
-
-启动登录VeighNa Elite Trader后,启动模块之前,请先连接交易接口。看到VeighNa Elite Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块。
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【多进程CTA交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/1.png)
-
-即可进入多进程CTA交易模块的UI界面。
-
-如果配置了数据服务,打开CTA策略模块时会自动执行数据服务登录初始化。若成功登录,则会输出“数据服务初始化成功”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/2.png)
-
-
-## 策略文件目录
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Elite Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Elite Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
-C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-
-## 创建策略实例
-
-用户可以基于编写好的CTA策略模板(类)来创建不同的策略实例(对象)。策略实例的好处在于,同一个策略可以同时去交易多个品种合约,并且每个实例的参数可以是不同的。
-
-在左上角的下拉框中选择要交易的策略名称,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/3.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/4.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 实例名称不能重名;
-- 合约品种
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 一定要是实盘交易系统中可以查到的合约名称;
- - 一般选择该期货品种当前流动性最好的月份;
-- 接口名称
- - 选择需要交易的接口名称;
-- 参数设置
- - 显示的参数名称是策略中使用Parameter辅助类定义的参数;
- - 默认数值为策略中的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在左侧的策略监控组件中看到该策略实例。因为每个策略都是独立进程,所以添加成功后图形界面会输出“策略进程启动”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/5.png)
-
-策略监控组件顶部显示的是策略实例名、接口名、合约品种名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的cta_strategy_setting.json文件中。
-
-
-## 初始化策略
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/6.png)
-
-初始化过程中,主要按顺序完成了以下三步任务:
-
-1. 获取历史数据
-
- 为了确保策略内指标数值的准确性,每个策略实例都需要一定的历史数据来进行策略初始化。
-
- 因此,在策略初始化时,策略实例内部的load_bar函数会先去接口获取最新历史数据。如果接口不提供历史数据,则通过配置的数据服务获取([RQData](https://www.ricequant.com/welcome/purchase?utm_source=vnpy)提供国内期货、股票以及期权的历史数据。RQData的数据服务提供盘中K线更新,即使在9点45分才启动策略,也能获取到之前从9点30开盘到9点45分之间的K线数据,提供给策略进行初始化计算,而不用担心数据缺失的问题)。
-
- 具体载入数据的长度,取决于load_bar函数的参数控制(策略模板默认是10天)。数据载入后会以逐根K线(或者Tick)的方式推送给策略,实现内部变量的初始化计算,比如缓存K线序列、计算技术指标等。
-
-2. 载入缓存变量
-
- 在每天实盘运行的过程中,量化策略中的有些变量只和历史行情数据相关,这类变量通过加载历史数据回放就能得到正确的数值。另一类变量则可能和交易状态相关,如策略的持仓,这类变量需要缓存在硬盘上(退出程序时),第二天回放完历史数据后再读取还原,才能保证和之前交易状态的一致性。
-
- 每次停止策略时,会自动将策略的variables列表对应的变量以及策略持仓缓存进.vntrader目录下的cta_strategy_data.json文件中,以便在下一次策略初始化时自动载入。
-
- 请注意,在某些情况下(比如手动平仓了),缓存的数据可能会出现偏差(因为策略持仓维护的是运行策略实例的逻辑持仓,不是特定品种的持仓),那么可以通过手动修改json文件来调整。
-
-3. 订阅行情推送
-
- 最后基于vt_symbol参数获取该策略所交易合约的信息,并订阅该合约的实时行情推送。如果实盘交易系统找不到该合约的信息,比如没有连接登录接口或者vt_symbol填写错误,则会在日志模块中输出相应的报错信息。
-
-以上三个步骤完成后,可观察到此时该策略实例的【inited】状态已经为【True】,且变量也都显示对应的数值(不再为0)。说明该策略实例已经调用过load_bar函数加载历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-## 启动策略
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动自动交易功能。点击策略实例下的【启动】按钮,即可启动该策略实例。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/7.png)
-
-可观察到此时该策略实例的【inited】和【trading】状态都为【True】。说明此时该策略实例已经调用过load_bar函数,完成了历史数据回放,而且此时策略内部的交易请求类函数(buy/sell/short/cover/cancel_order等),以及信息输出类函数(send_email/put_event等),才会真正执行并发出对应的请求指令到底层接口中(真正执行交易)。
-
-在上一步策略初始化的过程中,尽管策略同样在接收(历史)数据,并调用对应的功能函数,但因为【trading】状态为【False】,所以并不会有任何真正的委托下单操作或者交易相关的日志信息输出。
-
-如果启动之后,策略发出了限价单,可以去VeighNa Elite Trader主界面【委托】栏查看委托订单细节。如果策略发出了本地停止单,可以在CTA策略UI界面右上方区域的停止单监控组件查看委托订单细节。
-
-
-## 停止策略
-
-如果启动策略之后,由于某些情况(如到了市场收盘时间,或盘中遇到紧急情况)想要停止、编辑或者移除策略,可以点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/8.png)
-
-CTA策略引擎会自动将该策略之前发出的所有活动委托全部撤销,以保证在策略停止后不会有失去控制的委托存在。同时该策略实例最新的变量信息会被保存到.vntrader文件夹下的cta_strategy_data.json文件中。
-
-此时可观察到该策略实例的【trading】状态已变为【False】,说明此时该策略实例已经停止自动交易了。
-
-在CTA策略的实盘交易过程中,正常情况应该让策略在整个交易时段中都自动运行,尽量不要有额外的暂停重启类操作。对于国内期货市场来说,应该在交易时段开始前,启动策略的自动交易,然后直到收盘后,再关闭自动交易。因为现在CTP夜盘收盘后也会关闭系统,早上开盘前重启,所以夜盘收盘后也需要停止策略,关闭VeighNa Elite Trader了。
-
-
-## 编辑策略
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/9.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/10.png)
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下cta_strategy_setting.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/11.png)
-
-
-## 移除策略
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面左侧的策略监控组件中将不会再显示该策略实例的信息。因为每个策略都是独立进程,所以移除成功后图形界面会输出“策略进程退出”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/12.png)
-
-此时.vntrader文件夹下的cta_strategy_setting.json文件也移除了该策略实例的配置信息。
-
-
-## 状态跟踪
-
-如果想要通过图形界面跟踪策略的状态,有两种方式:
-
-1. 调用put_event函数
-
- 策略实例中所有的的变量信息,都需要把变量名写在策略的variables列表中,才能在图形界面显示。如果想跟踪变量的状态变化,则需要在策略中调用put_event函数,界面上才会进行数据刷新。
-
- 有时用户会发现自己写的策略无论跑多久,变量信息都不发生变化,这种情况请检查策略中是否漏掉了对put_event函数的调用。
-
-2. 调用write_log函数
-
- 如果不仅想观察到变量信息的状态变化,还想根据策略的状态输出基于自己需求的个性化的日志,可以在策略中调用write_log函数,进行日志输出。
-
-
-## 运行日志
-
-### 日志内容
-
-CTA策略模块UI界面上输出的日志有两个来源,分别是CTA策略引擎和策略实例。
-
-**引擎日志**
-
-CTA策略引擎一般输出的是全局信息。下图中除了以带中括号的策略实例名开头的内容之外,都是CTA策略引擎输出的日志。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/13.png)
-
-**策略日志**
-
-如果在策略中调用了write_log函数,那么日志内容就会通过策略日志输出。下图红框里的内容分别是两个不同的策略实例输出的策略日志。中括号里是策略实例的名称,中括号后是write_log函数输出的内容。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/14.png)
-
-### 清空操作
-
-如果想要清空CTA策略UI界面上的日志输出,可以点击右上角的【清空日志】按钮,则可一键清空该界面上已输出的日志。
-
-点击【清空日志】前,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/12.png)
-
-点击【清空日志】后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/15.png)
-
-
-## 停止单
-
-图形界面右上方区域的停止单监控组件,是用来跟踪所有CTA引擎内本地停止单的状态变化的。
-
-因为不是所有接口都支持停止单,所以VeighNa提供了本地停止单的功能。在交易接口不支持交易所停止单的前提下,用户依然可以通过策略的下单函数(buy/sell/short/cover),把stop参数设置为True,启用本地停止单功能。
-
-VeighNa的本地停止单有三个特点:
-
-1. 保存在本地电脑上,关机后则失效;
-2. 只有交易员本人能够看到,不必担心泄露底牌;
-3. 停止单触发有延时,导致一定的滑点。
-
-**停止单信息**
-
-在发出本地停止单后,图形界面右上方的监控组件就会显示停止单的委托细节。
-
-本地停止单一共有【等待中】、【已触发】和【已撤销】三个状态,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/19.png)
-
-停止单刚发出时是处于【等待中】的状态。因为停止单的信息记录在本地,没有发往交易所,所以此时主界面上【委托】栏不会有变化。
-
-一旦该停止单的委托价格被触发,为了实现立即成交的目的,CTA策略引擎会立即以**涨跌停价**或者**盘口五档**的价格,去发出**限价**委托(所以建议本地停止单只用于流动性较好的合约)。限价委托发出后,VeighNa Elite Trader主界面上【委托】栏将更新该订单的状态,此时停止单状态会变为【已触发】,【限价委托号】栏下也会填入该订单的限价委托号。
-
-请注意,**停止单界面显示的价格是本地停止单的触发价格,而不是发出限价单的价格**。
-
-如果停止单在被触发前就被策略取消了,那么该订单的状态就会变为【已撤销】。
-
-
-## 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的CTA策略实例,可以使用界面右上角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-
-## 手动换月移仓
-
-如需使用自动移仓助手,请在策略初始化之前,点击CTA策略UI界面右上角的【移仓助手】按钮,则会弹出移仓助手界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/20.png)
-
-若策略已经初始化,则打开界面时,移仓助手界面左下角会输出“策略已经初始化,无法执行移仓”的信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/21.png)
-
-成功打开移仓助手界面之后,点击【刷新】按钮即可看到当前CTA策略模块下所有策略实例所交易的合约信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/22.png)
-
-此时就可以配置要执行的移仓任务了,其中:
-
-- 移仓合约:填入需要将老的仓位和策略,移仓过去的新合约的本地代码(vt_symbol);
-- 多头移仓:合约多头需要移仓的数量(不能大于显示的账户总多持仓);
-- 空头移仓:合约空头需要移仓的数量(不能大于显示的账户总空持仓);
-- 单笔上限:算法移仓时单笔委托的手数上限;
-- 委托超价:算法移仓时委托价格相对于当时盘口对价超出的pricetick。
-
-完成配置确认无误后,点右上角击【执行移仓】按钮,会弹出【执行移仓确认】窗口,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/23.png)
-
-点击【OK】开始执行,移仓过程中,界面左下角会有移仓相关信息输出,右下角会有移仓算法的显示,完成后移仓助手的上半部分会被设为锁死(变灰无法再点击),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/24.png)
-
-可以看到几乎1秒内就完成了移仓合约对应的全部仓位和策略的移仓操作。
-
-因为执行完移仓之后界面的上半部分被锁死了,如果需要查看新的可移仓合约的信息或者想进行新一轮移仓(可以分合约执行移仓,也可以先配置好所有的移仓合约,再点击【执行持仓】一次性进行所有策略的移仓),可以点击【刷新】按钮对界面进行刷新。刷新之后会发现“平仓合约”已经变成了刚刚移仓成功的合约的名字。
-
-
-请注意:
- 1. - 如果将移仓合约填成了平仓合约一致的合约,点击【执行移仓】按钮之后会弹出【执行移仓失败】窗口,并输出“移仓合约和平仓合约不能一样”的信息,如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/25.png)
-
- - 如果将移仓合约填成了其他品种的合约或者填错了交易所,点击【执行移仓】按钮之后也会弹出【执行移仓失败】窗口,并输出“移仓合约和平仓合约品种不一致”的信息,如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/26.png)
-
- 2. 在执行移仓算法的过程中(还未完成),可以点击界面右下角算法监控部分的【停止】按钮来终止某个移仓算法的执行。但是算法停止后会有瘸腿风险(平仓合约与移仓合约移仓结果不一致);
-
- 3. 即使平仓合约的可移仓持仓为0,也需要填写移仓合约的名字进行移仓。
-
-### 移仓过程
-
-移仓助手组件根据配置的移仓信息订阅移仓合约的行情,并启动对应的移仓算法进行委托。移仓的价格为当时的盘口对价加上或减去超价pricetick, 数量为配置的移仓数量(不超过配置的单笔上限)。算法结束之后再更新策略交易代码并移除之前的策略实例。
-
-### 移仓效果
-
-回到CTA策略模块的UI界面,可以发现对应策略的交易合约名字已经变了。
-
-移仓前如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/27.png)
-
-移仓成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/28.png)
-
-回到VeighNa Elite Trader主界面,也可以查看到详细的移仓委托和成交记录。
-
-
-## 多账户支持
-
-### 加载
-
-CTA策略模块提供了多账户批量下单交易支持。
-
-以登陆**CTP**接口为例,在登录界面下方的【交易接口】标签页的下拉框中先选中CTP接口。在“自定义接口”处填写自定义的接口名(例如“CTP1”、“CTP2”)之后点击【添加】按钮,填写子账户的配置信息,点击【确定】按钮,则可依次加载对应账户的接口。
-
-添加完毕后,点击登录界面的【登录】按钮登录VeighNa Elite Trader。在菜单栏中依次点击【系统】->【连接xxx】(xxx是自定义的接口名,若加载时填写的“CTP1”,则菜单栏中显示的就是【连接CTP1】),即可连接子账户接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到对应的账号信息,持仓信息等相关信息。
-
-### CTA策略模块批量下单
-
-若需通过CTA策略模块进行批量委托,可在CTA策略模块图形界面【添加策略】时点击【gateway_name】的下拉框选中接口进行指定,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/16.png)
-
-策略添加成功后,可以在左侧的策略监控组件中看到策略实例的信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/17.png)
-
-策略实例发出委托后,可在VeighNa Elite Trader主界面【委托】组件和【成交】组件上跟踪到根据对应接口下单的委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/ctastrategy/18.png)
-
-**请注意**:
- - 目前支持同时登录最多登录5个交易账户
-
-
-## CTA策略模板
-
-CTA策略模板提供了信号生成和委托管理功能,用户可以基于模板自行开发CTA策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
- - 策略文件命名采用下划线模式,如rumi_strategy.py,而策略类命名采用驼峰式,如RumiStrategy;
-
- - 自建策略的类名不要与示例策略的类名重合。如果重合了,图形界面上只会显示一个策略类名。
-
-### CtaTemplate
-
-VeighNa Elite Trader对vnpy_ctastrategy自带的CtaTemplate提供兼容支持,通过CtaTemplate开发的策略也可在VeighNa Elite Trader的CTA策略模块上成功运行。
-
-### EliteCtaTemplate
-
-VeighNa Elite Trader的CTA策略模块提供了EliteCtaTemplate专业CTA策略模板,实现更加强大的CTA策略开发。
-
-下面通过RumiStrategy策略示例,来展示策略开发的具体步骤:
-
-在基于EliteCtaTemplate编写策略逻辑之前,需要在策略文件的顶部载入需要用到的内部组件,如下方代码所示:
-
-```python 3
-from numpy import ndarray
-
-from elite_ctastrategy import (
- EliteCtaTemplate,
- HistoryManager,
- Parameter,
- Variable,
- sma,
- wma,
- cross_over,
- cross_below,
-)
-```
-
-其中:
-* EliteCtaTemplate是Veighna Elite Trader提供的CTA策略模板
-* HistoryManager是Veighna Elite Trader提供的储存历史数据的容器
-* Parameter是储存策略参数的数据容
-* Variable是储存策略变量的数据容器
-* sma,wms,cross_over和cross_below都是内置的计算函数(完整计算函数列表可参考内置指标计算函数篇)
-* ndarray是给on_history函数中计算出来的结果做类型声明的类。
-
-### 策略参数与变量
-
-在策略类的下方,可以设置策略的作者(author),参数(parameters)以及变量(variables),如下方代码所示:
-
-```python 3
-
- author = "VeighNa菁英版"
-
- # 基础参数(必填)
- bar_window: int = Parameter(30) # K线窗口
- bar_interval: int = Parameter("1m") # K线级别
- bar_buffer: int = Parameter(100) # K线缓存
-
- # 策略参数(可选)
- fast_window: int = Parameter(3) # 快速均线窗口
- slow_window: int = Parameter(50) # 慢速均线窗口
- rumi_window: int = Parameter(30) # 均线偏差窗口
- max_holding: int = Parameter(100) # 最长持仓周期
- stop_percent: float = Parameter(0.03) # 保守止损比例
- risk_window: int = Parameter(10) # 风险计算窗口
- risk_capital: int = Parameter(1_000_000) # 交易风险投入
- price_add: int = Parameter(5) # 委托下单超价
-
- # 策略变量
- trading_size: int = Variable(1) # 当前委托数量
- rumi_0: float = Variable(0.0) # RUMI当前数值
- rumi_1: float = Variable(0.0) # RUMI上期数值
-
-```
-
-虽然策略的参数和变量都从属于策略类,但策略参数是固定的(由交易员从外部指定),而策略变量则在交易的过程中随着策略的状态而变化,所以策略变量一开始只需要初始化为对应的基础类型。例如:整数设为0,浮点数设为0.0。
-
-如果需要CTA引擎在运行过程中,将策略参数和变量显示在UI界面上,并在数据刷新、停止策略时保存其数值,则需在创建策略类的时候创建对应的参数和变量实例。
-
-请注意:
- - Parameter容器和Variable容器只能接受参数或变量以str、int、float和bool四种数据类型传入;
-
- - 每个通过EliteCtaTemplate开发的策略,都需要创建bar_window(K线窗口)、bar_interval(K线级别 - 目前只支持"1m"和"1h")以及bar_buffer(历史数据容器HistoryManager的K线缓存长度)这三个基础参数;
-
- - 当bar_interval为"1m"时,bar_window必须设为能被60整除的数(60除外)。当bar_interval为"1h"时则没有这个限制。
-
-### 策略的回调函数
-
-CtaTemplate中以on开头的函数称为回调函数,在编写策略的过程中能够用来接收数据或者接收状态更新。回调函数的作用是当某一个事件发生的时候,策略里的这类函数会被CTA策略引擎自动调用(无需在策略中主动操作)。回调函数按其功能可分为以下三类:
-
-#### 策略实例状态控制(所有策略都需要)
-
-**on_init**
-
-* 入参:无
-
-* 出参:无
-
-初始化策略时on_init函数会被调用,默认写法是先调用write_log函数输出“策略初始化”日志,再调用load_bar函数加载历史数据,如下方代码所示:
-
-```python 3
- def on_init(self) -> None:
- """初始化"""
- self.write_log("策略初始化")
- self.load_bar(10)
-```
-
-策略初始化时,策略的inited和trading状态都为【False】,此时只是调用历史数据管理器计算并缓存相关的计算指标,不能发出交易信号。调用完on_init函数之后,策略的inited状态才变为【True】,策略初始化才完成。
-
-**on_start**
-
-* 入参:无
-
-* 出参:无
-
-启动策略时on_start函数会被调用,默认写法是调用write_log函数输出“策略启动”日志,如下方代码所示:
-
-```python 3
- def on_start(self):
- """
- Callback when strategy is started.
- """
- self.write_log("策略启动")
-```
-
-调用策略的on_start函数启动策略后,策略的trading状态变为【True】,此时策略才能够发出交易信号。
-
-**on_stop**
-
-* 入参:无
-
-* 出参:无
-
-停止策略时on_stop函数会被调用,默认写法是调用write_log函数输出“策略停止”日志,如下方代码所示:
-
-```python 3
- def on_stop(self):
- """
- Callback when strategy is stopped.
- """
- self.write_log("策略停止")
-```
-
-调用策略的on_stop函数停止策略后,策略的trading状态变为【False】,此时策略就不会发出交易信号了。
-
-#### 接收数据、计算指标、发出交易信号
-
-**on_history**
-
-* 入参:hm: HistoryManager
-
-* 出参:无
-
-一旦策略的[历史数据管理器HistoryManager](#jump2)初始化完成之后,当策略收到最新的K线数据时,on_history函数就会被调用。
-
-示例策略类RumiStrategy是通过30分钟K线数据回报来生成CTA信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_history(self, hm: HistoryManager) -> None:
- """K线推送"""
- # 计算均线数组
- fast_array: ndarray = sma(hm.close, self.fast_window)
- slow_array: ndarray = wma(hm.close, self.slow_window)
-
- # 计算均线差值
- diff_array: ndarray = fast_array - slow_array
- rumi_array: ndarray = sma(diff_array, self.rumi_window)
-
- self.rumi_0 = rumi_array[-1]
- self.rumi_1 = rumi_array[-2]
-
- # 判断上下穿
- long_signal: bool = cross_over(rumi_array, 0)
- short_signal: bool = cross_below(rumi_array, 0)
-
- # 计算交易数量
- self.trading_size = self.calculate_volume(self.risk_capital, self.risk_window, 1000, 1)
-
- # 获取当前目标
- last_target: int = self.get_target()
-
- # 初始化新一轮目标(默认不变)
- new_target: int = last_target
-
- # 执行开仓信号
- if long_signal:
- new_target = self.trading_size
- elif short_signal:
- new_target = -self.trading_size
-
- # 持仓时间平仓
- if self.bar_since_entry() >= self.max_holding:
- new_target = 0
-
- # 保护止损平仓
- close_price = hm.close[-1]
-
- if last_target > 0:
- stop_price: float = self.long_average_price() * (1 - self.stop_percent)
- if close_price <= stop_price:
- new_target = 0
- elif last_target < 0:
- stop_price: float = self.short_average_price() * (1 + self.stop_percent)
- if close_price >= stop_price:
- new_target = 0
-
- # 设置新一轮目标
- self.set_target(new_target)
-
- # 执行目标交易
- self.execute_trading(self.price_add)
-
- # 推送UI更新
- self.put_event()
-```
-
-- 信号计算:通过收到的最新HistoryManager实例获取的K线数据来计算相应的技术指标。如均线数组和均线差值等。首先获取需要的数组,然后通过内置的指标计算函数进行计算;
-
- 请注意,示例策略中的cross_over和cross_below函数是计算传入指标是否上穿(指标上一个值小于等于指定数值以及指标最新值大于指定数值)和下穿(指标上一个值大于等于指定数值以及指标最新值小于指定数值)的布尔函数。
-
-- 设置目标:计算完技术指标后,调用calculate_volume函数计算委托数量。然后基于get_target函数获取的当前目标对新一轮目标进行初始化。之后可以基于指标的数值和策略的状态设置新一轮目标;
-
- 以RumiStrategy为例,通过long_signal/short_signal设置开仓信号,平仓则通过持仓时间和保护止损两方面设置。
-
- 当策略的当前目标last_target为0时,策略的开仓后经历过的K线周期数也为0,所以都不会触发平仓条件,条件满足时只会发出开仓信号。当策略的当前目标last_target不为0时,若新的信号与之前开仓的信号是一个方向,则新一轮目标与当前目标保持一致,执行交易时不会委托下单。若触发了平仓条件,则会将新一轮目标设为0,执行交易时进行平仓。若新的信号与之前开仓的信号不是一个方向,则会设置该信号为新一轮目标,执行时进行委托。
-
- 请注意,在所有设置新一轮目标的逻辑之后,执行目标交易之前,通过set_target函数设置策略目标是为了避免在同一根K线里进行多次设置操作。
-
-- 执行目标交易:设置好新一轮目标之后,直接执行目标交易并推送UI更新。
-
- 请注意,如果需要在图形界面刷新指标数值,请不要忘记调用put_event()函数。
-
-#### 委托状态更新
-
-以下函数在策略中可以直接pass,其具体逻辑应用交给回测/实盘引擎负责。请注意,**不要在这类函数中下达委托指令**。
-
-**on_trade**
-
-* 入参:bar: TradeData
-
-* 出参:无
-
-收到策略成交回报时on_trade函数会被调用。
-
-**on_order**
-
-* 入参:bar: OrderData
-
-* 出参:无
-
-收到策略委托回报时on_order函数会被调用。
-
-### 主动函数
-
-
-
-EliteCtaTemplate内置了一套缓存策略理论成交记录的方案。在主动函数中,除了execute_trading函数中计算仓差时是基于策略目标和策略仓位差别来计算之外,其他部分都是由策略的理论目标来控制的。
-
-**set_target**
-
-* 入参:target: int
-
-* 出参:无
-
-set_target是用来设置策略目标净仓位的函数(可以理解为想要指定的策略持仓量)。正数代表做多、负数代表做空。
-
-请注意,目标仓位是一种持续性的状态,因此设置后在后续时间会持续保持下去,直到被再次设置修改。
-
-**get_target**
-
-* 入参:无
-
-* 出参:int
-
-get_target是用来查询策略目标仓位的函数。
-
-**execute_trading**
-
-* 入参:price_add: float
-
-* 出参:无
-
-execute_trading是基于设定的目标仓位用来执行交易的函数。委托下单和撤单已经被该函数接管,无需再在策略内进行下单和撤单操作。
-
-execute_trading被调用之后,在函数内部会先撤销策略所有活动委托,然后根据策略目标和策略持仓的仓差(没有则不委托)进行委托。
-
-**calculate_volume**
-
-* 入参:risk_capital: float, risk_window: int, max_volume = 0, min_volume: int = 0
-
-* 出参:trading_size: int
-
-calculate_volume是用来计算风险调整后的委托数量的函数。
-
-risk_capital是用来计算风险调整后的委托数量的资金,risk_window是用来计算风险水平的K线周期窗口,max_volume和min_volume是限制委托数量的最大值和最小值。
-
-请注意,**risk_window的长度不能超过HistoryManager容器的长度bar_buffer**。
-
-**bar_since_entry**
-
-* 入参:无
-
-* 出参:int
-
-bar_since_entry函数是用来获取内置交易管理器里维护的开仓后经历过的K线周期数(理论值)的函数。
-
-**long_average_price**
-
-* 入参:无
-
-* 出参:int
-
-long_average_price函数是用来获取内置交易管理器里维护的多头持仓均价(理论值)的函数。
-
-**short_average_price**
-
-* 入参:无
-
-* 出参:int
-
-short_average_price函数是用来获取内置交易管理器里维护的空头持仓均价(理论值)的函数。
-
-**get_account_pos**
-
-* 入参:无
-
-* 出参:int
-
-get_account_pos函数用于获取该策略(合约代码、交易接口)对应的底仓账户持仓,返回值为净仓数据(即多仓减去空仓的数值)。
-
-
-
-### 功能函数
-
-以下为策略以外的功能函数:
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**load_bar**
-
-* 入参:days: int, interval: Interval = Interval.MINUTE, callback: Callable = None, use_database: bool = False
-
-* 出参:无
-
-在策略中调用load_bar函数,可以在策略初始化时加载K线数据。
-
-如下方代码所示,调用load_bar函数时,默认加载的天数是10,频率是一分钟,对应也就是加载10天的1分钟K线数据,建议加载的天数宁可多一些也不要太少。use_database参数默认为False,会先依次尝试通过交易接口、数据服务获取历史数据,直到获取历史数据或返回空。
-
-**put_event**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用put_event函数,可以通知图形界面刷新策略状态相关显示。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能刷新界面。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后,在策略中调用send_email函数,可以发送指定内容的邮件到自己的邮箱。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能发送邮件。
-
-**sync_data**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用sync_data函数,可以在实盘交易的时候,每次停止时都同步策略变量到对应json文件中进行本地缓存,方便第二天初始化时再进行读取还原(CTA策略引擎会去调用,在策略里无需主动调用)。
-
-请注意:
- - 要在策略启动之后,也就是策略的trading状态变为【True】之后,才能同步策略信息;
-
- - 基于EliteCtaTemplate开发的策略,只有策略的持仓pos会被同步到本地,其他策略变量由理论值维护。
-
-
-## 历史数据管理器
-
-
-
-HistoryManager是CTA策略模块自带的定长的历史数据管理器。所有基于EliteCtaTemplate开发的策略,都可通过on_history函数推送HistoryManager的实例hm获取K线数据进而进行指标计算和委托。
-
-每个策略实例的HistoryManager都取决于策略类里定义的bar_window、bar_interval和bar_buffer三个参数。bar_window和bar_interval决定了HistoryManager内储存K线的时间频率,bar_buffer决定了HistoryManager容器的长度(HistoryManager内缓存的K线数不低于bar_buffer根时才算初始化成功)。
-
-**datetime**:K线的开始时间
-
-**open**:K线的开始价格
-
-**high**:K线内的最高价
-
-**low**:K线内的最低价
-
-**close**:K线的结束价格
-
-**volume**:K线内的成交量
-
-**turnover**:K线内的成交额
-
-**open_interest**:K线内的持仓量(股票没有该字段)
-
-HistoryManager里对合成K线的datetime、open、high、low、close、volume、turnover和open_interest都进行了缓存,便于用户取用。以open_price为例,通过策略on_history里收到的hm实例可直接获取open_price的数组(hm.open)。如果想获取最新一根合成K线的开始价格,直接取出该数组的最后一个元素(hm.open[-1])即可。
-
-**bar_count**
-
-* 入参:无
-
-* 出参:int
-
-如果策略启动之后策略指标的值都是0,可以调用HistoryManager的bar_count函数(hm.bar_count())看看HistoryManager缓存过的K线长度是否小于策略类设置的bar_buffer,如果小于的话说明历史数据太短了不够HistoryManager容器初始化。此时可以选择加载更多历史数据进行策略初始化或者适当调小bar_buffer解决。
-
-**to_dataframe**
-
-* 入参:无
-
-* 出参:df: pd.DataFrame
-
-如果想把on_history推送的hm实例缓存的合成K线的信息转换成DataFrame,可以调用HistoryManager的to_dataframe函数(hm.to_dataframe())进行转换。转换之后可以得到一个长度为策略类设置的bar_buffer、以K线开始时间作为索引,open、high、low、close、volume、turnover和open_interest作为列名的DataFrame。
-
-
diff --git a/docs/elite/strategy/elite_filter.md b/docs/elite/strategy/elite_filter.md
deleted file mode 100644
index 89c0e09..0000000
--- a/docs/elite/strategy/elite_filter.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# 行情数据过滤
-
-VeighNa Elite Trader的CTA策略模块内置的EliteCtaTemplate提供了对垃圾数据的过滤配置支持。根据示例的格式进行配置之后,EliteCtaTemplate会对非交易时段收到的合成K线进行过滤,避免垃圾数据对策略指标计算结果产生影响。
-
-
-## 配置过滤信息
-
-### 手动编辑文件
-
-如果交易的品种较少,可以自己手动创建一个filter_setting.json文件并填入相应合约交易时间配置信息(允许推送进策略的K线时间段),如下图所示:
-
-```
-{
- "IF": [
- ["9:30:00", "11:29:00"],
- ["13:00:00", "14:59:00"]
- ],
- "rb": [
- ["9:00:00", "10:14:00"],
- ["10:30:00", "11:29:00"],
- ["13:30:00", "14:59:00"],
- ["21:00:00", "22:59:00"]
- ],
- "au": [
- ["9:00:00", "10:14:00"],
- ["10:30:00", "11:29:00"],
- ["13:30:00", "14:59:00"],
- ["21:00:00", "23:59:59"],
- ["00:00:00", "2:29:00"]
- ]
-}
-```
-
-请注意:
- - VeighNa的K线的datetime是K线的开始时间不是结束时间;
-
- - 若交易商品期货,请不要忘记10:15到10:30的休盘时间;
-
- - 若交易合约的交易时间涉及到跨日,请把夜盘的交易时间拆分成开始时间至23:59:59和00:00:00至结束时间两段。
-
-### 使用官方提供文件
-
-如果交易的品种较多,不想手动输入,可以直接使用官方提供的filter_setting.json(不定时更新)。
-
-请注意,**该filter_setting.json文件仅供参考,若与实际交易时段有出入(交易所对合约交易时段进行调整),VeighNa官方概不负责**。
-
-
-## 配置放置目录
-
-配置好filter_setting.json文件后,将其放置在用户目录下的.vntrader文件夹中即可。
-
-
-## 过滤效果测试
-
-若想要测试数据过滤功能的效果,可以在策略的on_history函数中添加打印语句看看策略内部是否收到了非交易时段的K线,如下所示:
-
-```python 3
-# 判断实盘trading状态,只有策略启动之后才进行输出
-if self.trading:
- self.write_log(f"{self.strategy_name}_{self.vt_symbol}:{hm.datetime[-1]}")
-```
diff --git a/docs/elite/strategy/elite_function.md b/docs/elite/strategy/elite_function.md
deleted file mode 100644
index ac4e9ef..0000000
--- a/docs/elite/strategy/elite_function.md
+++ /dev/null
@@ -1,475 +0,0 @@
-# 指标计算函数
-
-VeighNa Elite Trader的CTA策略模块内置了以下计算函数供策略调用:
-
-**sma** :简单移动平均
-
-* 入参
- * close: np.ndarray
- * time_period: int=30
-
-* 出参
- * sma_array: np.ndarray
-
-**ema** :指数滑动平均
-
-* 入参
- * close: np.ndarray
- * time_period: int=30
-
-* 出参
- * ema_array: np.ndarray
-
-**kama** :适应性移动平均
-
-* 入参
- * close: np.ndarray
- * time_period: int=30
-
-* 出参
- * atr_array: np.ndarray
-
-**wma** :加权移动平均
-
-* 入参
- * close: np.ndarray
- * time_period: int=30
-
-* 出参
- * wma_array: np.ndarray
-
-**apo**:绝对价格振荡器
-
-* 入参
- * close: np.ndarray
- * fast_period: int=12
- * slow_period: int=26
- * matype: int=0
-
-* 出参
- * apo_array: np.ndarray
-
-请注意,matype分别对应:0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3
-
-**cmo**:钱德动量摆动指标
-
-* 入参
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * cmo_array: np.ndarray
-
-**mom**:上升动向值
-
-* 入参
- * close: np.ndarray
- * time_period: int=10
-
-* 出参
- * mom_array: np.ndarray
-
-**ppo**:价格震荡百分比指数
-
-* 入参
- * close: np.ndarray
- * fast_period: int=12
- * slow_period: int=26
- * matype: int=0
-
-* 出参
- * ppo_array: np.ndarray
-
-**roc**:变动率指标
-
-* 入参
- * close: np.ndarray
- * time_period: int=10
-
-* 出参
- * roc_array: np.ndarray
-
-**rocr**:变动率比率
-
-* 入参
- * close: np.ndarray
- * time_period: int=10
-
-* 出参
- * rocr_array: np.ndarray
-
-**rocp**:变动率百分比
-
-* 入参
- * close: np.ndarray
- * time_period: int=10
-
-* 出参
- * rocp_array: np.ndarray
-
-**trix**:三次平滑EMA的一天变化率
-
-* 入参
- * close: np.ndarray
- * time_period: int=30
-
-* 出参
- * trix_array: np.ndarray
-
-**stddev**:标准偏差
-
-* 入参
- * close: np.ndarray
- * time_period: int=5
- * nbdev: float=1
-
-* 出参
- * stddev_array: np.ndarray
-
-**std**:标准偏差
-
-* 入参
- * close: np.ndarray
- * time_period: int=5
- * nbdev: float=1
-
-* 出参
- * std_array: np.ndarray
-
-**obv**:能量潮
-
-* 入参
- * close: np.ndarray
- * volume: np.ndarray
-
-* 出参
- * obv_array: np.ndarray
-
-**cci**:顺势指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * cci_array: np.ndarray
-
-**atr**:真实波动幅度均值
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * atr_array: np.ndarray
-
-**natr**:归一化波动幅度均值
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * natr_array: np.ndarray
-
-**rsi**:相对强弱指数
-
-* 入参
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * rsi_array: np.ndarray
-
-**macd**:平均异同移动平均线
-
-* 入参
- * close: np.ndarray
- * fast_period: int=12
- * slow_period: int=26
- * signal_period: int=9
-
-* 出参
- * macd_array: np.ndarray
- * macdsignal_array: np.ndarray
- * macdhist_array: np.ndarray
-
-**adx**:平均趋向指数
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * adx_array: np.ndarray
-
-**adxr**:平均趋向指数的趋向指数
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * adxr_array: np.ndarray
-
-**minus_di**:负趋向指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * minusdi_array: np.ndarray
-
-**plus_di**:正趋向指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * plusdi_array: np.ndarray
-
-**willr**:威廉指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=14
-
-* 出参
- * willr_array: np.ndarray
-
-**ultosc**:终极波动指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * time_period: int=7
- * time_period2: int=14
- * time_period3: int=28
-
-* 出参
- * ultosc_array: np.ndarray
-
-**trange**:真实波幅
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
-
-* 出参
- * trange_array: np.ndarray
-
-**aroon**:阿隆指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * time_period: int=14
-
-* 出参
- * aroonup_array: np.ndarray
- * aroondown_array: np.ndarray
-
-**aroonosc**:阿隆震荡
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * time_period: int=14
-
-* 出参
- * aroonosc_array: np.ndarray
-
-**minus_dm**:负趋向变动值
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * time_period: int=14
-
-* 出参
- * minusdm_array: np.ndarray
-
-**plus_dm**:正趋向变动值
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * time_period: int=14
-
-* 出参
- * plusdm_array: np.ndarray
-
-**mfi**:资金流量指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * volume: np.ndarray
- * time_period: int=14
-
-* 出参
- * mfi_array: np.ndarray
-
-**ad**:平衡交易量指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * volume: np.ndarray
-
-* 出参
- * ad_array: np.ndarray
-
-**adosc**:震荡指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * volume: np.ndarray
- * fast_period: int=3
- * slow_period: int=10
-
-* 出参
- * adosc_array: np.ndarray
-
-**bop**:均势指标
-
-* 入参
- * open: np.ndarray
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
-
-* 出参
- * bop_array: np.ndarray
-
-**stoch**:随机指标
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * fastk_period: int=5
- * slowk_period: int=3
- * slowk_matype: int=0
- * slowd_period: int=3
- * slowd_matype: int=0
-
-* 出参
- * slowk_array: np.ndarray
- * slowd_array: np.ndarray
-
-**boll**:布林通道
-
-* 入参
- * data: np.ndarray
- * window: int
- * dev: float
-
-* 出参
- * bollup_array: np.ndarray
- * bolldown_array: np.ndarray
-
-**keltner**:肯特纳通道
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * close: np.ndarray
- * window: int
- * dev: float
-
-* 出参
- * kkup_array: np.ndarray
- * kkdown_array: np.ndarray
-
-**donchian**:唐奇安通道
-
-* 入参
- * high: np.ndarray
- * low: np.ndarray
- * window: int
-
-* 出参
- * donchianup_array: np.ndarray
- * donchiandown_array: np.ndarray
-
-**cross_over**:上穿
-
-* 入参
- * data: np.ndarray
- * level: float
-
-若data上一个值小于等于level以及data最新值大于level,则返回True。
-
-* 出参
- * cross_over: bool
-
-**cross_below**:下穿
-
-* 入参
- * data: np.ndarray
- * level: float
-
-* 出参
- * cross_below: bool
-
-若data上一个值大于等于level以及data最新值小于level,则返回True。
-
-**check_increasing**:检查序列单调上升
-
-* 入参
- * data: np.ndarray
-
-* 出参
- * increasing: bool
-
-**check_decreasing**:检查序列单调下降
-
-* 入参
- * data: np.ndarray
-
-* 出参
- * decreasing: bool
-
-**resample_data**:对K线数据重新取样
-
-* 入参
- * df: pd.DataFrame
- * rule: str
-
-* 出参
- * resampled_df: pd.DataFrame
-
-* 示例
-
-若想要测试resample_data函数的效果,可以在策略的on_history函数收到hm推送的时候先获取K线DataFrame,再调用resample_data函数对K线数据重新取样,如下所示:
-
-```python 3
-# 判断实盘trading状态,只有策略启动之后才进行输出
-df: pd.DataFrame = hm.to_dataframe()
-resampled_df: pd.DataFrame = resample_data(df, "5min")
-```
diff --git a/docs/elite/strategy/elite_portfoliostrategy.md b/docs/elite/strategy/elite_portfoliostrategy.md
deleted file mode 100644
index 2e7bd67..0000000
--- a/docs/elite/strategy/elite_portfoliostrategy.md
+++ /dev/null
@@ -1,244 +0,0 @@
-# 投组截面策略
-
-PortfolioStrategy是用于**多进程组合策略实盘**的功能模块,用户可以通过其UI界面操作来便捷完成策略初始化、策略启动、策略停止、策略参数编辑以及策略移除等任务。
-
-
-## 主要优势
-
-PortfolioStrategy模块充分利用了多核CPU,支持多进程组合策略交易。
-
-
-## 启动模块
-
-PortfolioStrategy模块需要启动之前通过【策略应用】标签页加载。
-
-启动登录VeighNa Elite Trader后,启动模块之前,请先连接交易接口。看到VeighNa Elite Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块。
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【多进程组合策略交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/1.png)
-
-即可进入多进程组合策略交易模块的UI界面。
-
-如果配置了数据服务,打开多进程组合策略模块时会自动执行数据服务登录初始化。若成功登录,则会输出“数据服务初始化成功”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/2.png)
-
-
-## 策略文件目录
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Elite Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Elite Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
-C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-
-## 创建策略实例
-
-用户可以基于编写好的组合策略模板(类)来创建不同的策略实例(对象)。
-
-在左上角的下拉框中选择要交易的策略名称,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/3.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/4.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 实例名称不能重名;
-- 合约品种
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 一定要是实盘交易系统中可以查到的合约名称;
- - 合约名用“,”隔开,中间不加空格;
-- 接口名称
- - 选择需要交易的接口名称;
-- 参数设置
- - 显示的参数名是策略里写在parameters列表中的参数名;
- - 默认数值为策略中的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在左侧的策略监控组件中看到该策略实例。因为每个策略都是独立进程,所以添加成功后图形界面会输出“策略进程启动”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/5.png)
-
-策略监控组件顶部显示的是策略实例名、接口名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的portfolio_strategy_setting.json文件中。
-
-
-## 初始化策略
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/6.png)
-
-初始化完成后,可观察到此时该策略实例的【inited】状态已经为【True】。说明该策略实例已经加载过历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-## 启动策略
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动该策略的自动交易功能。点击该策略实例下的【启动】按钮,即可启动该策略实例。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/7.png)
-
-可观察到此时该策略实例的【inited】和【trading】状态都为【True】。说明此时该策略实例已经完成了历史数据回放,而且此时策略内部的交易请求类函数(buy/sell/short/cover/cancel_order等),以及信息输出类函数(send_email/put_event等),才会真正执行并发出对应的请求指令到底层接口中(真正执行交易)。
-
-在上一步策略初始化的过程中,尽管策略同样在接收(历史)数据,并调用对应的功能函数,但因为【trading】状态为【False】,所以并不会有任何真正的委托下单操作或者交易相关的日志信息输出。
-
-如果启动之后,策略发出了委托,可以去VeighNa Trader主界面【委托】栏查看委托订单细节。
-
-请注意,与CTA策略模块不同,多合约组合策略**不提供本地停止单功能**,所以UI界面上不会有停止单的显示区域了。
-
-
-## 停止策略
-
-如果启动策略之后,由于某些情况(如到了市场收盘时间,或盘中遇到紧急情况)想要停止、编辑或者移除策略,可以点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。成功后如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/8.png)
-
-组合策略引擎会自动将该策略之前发出的所有活动委托全部撤销,以保证在策略停止后不会有失去控制的委托存在。同时该策略实例最新的变量信息会被保存到.vntrader文件夹下的portfolio_strategy_data.json文件中。
-
-此时可观察到该策略实例的【trading】状态已变为【False】,说明此时该策略实例已经停止自动交易了。
-
-在多合约组合策略的实盘交易过程中,正常情况应该让策略在整个交易时段中都自动运行,尽量不要有额外的暂停重启类操作。对于国内期货市场来说,应该在交易时段开始前,启动策略的自动交易,然后直到收盘后,再关闭自动交易。因为现在CTP夜盘收盘后也会关闭系统,早上开盘前重启,所以夜盘收盘后也需要停止策略,关闭VeighNa Trader了。
-
-
-## 编辑策略
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/9.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/10.png)
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下porfolio_strategy_setting.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/11.png)
-
-
-## 移除策略
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面左侧的策略监控组件中将不会再显示该策略实例的信息。因为每个策略都是独立进程,所以移除成功后图形界面会输出“策略进程退出”的日志,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/12.png)
-
-此时.vntrader文件夹下的portfolio_strategy_setting.json文件也移除了该策略实例的配置信息。
-
-
-## 状态跟踪
-
-如果想要通过图形界面跟踪策略的状态,有两种方式:
-
-1. 调用put_event函数
-
- 策略实例中所有的的变量信息,都需要把变量名写在策略的variables列表中,才能在图形界面显示。如果想跟踪变量的状态变化,则需要在策略中调用put_event函数,界面上才会进行数据刷新。
-
- 有时用户会发现自己写的策略无论跑多久,变量信息都不发生变化,这种情况请检查策略中是否漏掉了对put_event函数的调用。
-
-2. 调用write_log函数
-
- 如果不仅想观察到变量信息的状态变化,还想根据策略的状态输出基于自己需求的个性化的日志,可以在策略中调用write_log函数,进行日志输出。
-
-
-## 运行日志
-
-### 日志内容
-
-多合约组合策略模块UI界面上输出的日志有两个来源,分别是策略引擎和策略实例。
-
-**引擎日志**
-
-策略引擎一般输出的是全局信息。下图中除了策略实例名后加冒号的内容之外,都是策略引擎输出的日志。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/13.png)
-
-**策略日志**
-
-如果在策略中调用了write_log函数,那么日志内容就会通过策略日志输出。下图红框里的内容是策略实例输出的策略日志。冒号前是策略实例的名称,冒号后是write_log函数输出的内容。
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/14.png)
-
-### 清空操作
-
-如果想要清空多合约组合策略UI界面上的日志输出,可以点击右上角的【清空日志】按钮,则可一键清空该界面上已输出的日志。
-
-点击【清空日志】前,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/12.png)
-
-点击【清空日志】后,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/15.png)
-
-
-## 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的组合策略实例,可以使用界面右上角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-
-## 多账户支持
-
-### 加载
-
-多进程组合策略模块提供了多账户批量下单交易支持。
-
-以登陆**CTP**接口为例,在登录界面下方的【交易接口】标签页的下拉框中先选中CTP接口。在“自定义接口”处填写自定义的接口名(例如“CTP1”、“CTP2”)之后点击【添加】按钮,填写子账户的配置信息,点击【确定】按钮,则可依次加载对应账户的接口。
-
-添加完毕后,点击登录界面的【登录】按钮登录VeighNa Elite Trader。在菜单栏中依次点击【系统】->【连接xxx】(xxx是自定义的接口名,若加载时填写的“CTP1”,则菜单栏中显示的就是【连接CTP1】),即可连接子账户接口。
-
-连接成功以后,VeighNa Elite Trader主界面【日志】组件会立刻输出登陆相关信息,同时用户也可以看到对应的账号信息,持仓信息等相关信息。
-
-### 多进程组合策略模块批量下单
-
-若需通过多进程组合策略模块进行批量委托,可在多进程组合策略模块图形界面【添加策略】时点击【gateway_name】的下拉框选中接口进行指定,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/16.png)
-
-策略添加成功后,可以在左侧的策略监控组件中看到策略实例的信息,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/17.png)
-
-策略实例发出委托后,可在VeighNa Elite Trader主界面【委托】组件和【成交】组件上跟踪到根据对应接口下单的委托,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/portfoliostrategy/18.png)
-
-**请注意**:
- - 目前支持同时登录最多登录5个交易账户
-
-
-## 多合约组合策略模板
-
-多合约组合策略模板提供了信号生成和委托管理功能,用户可以基于该模板自行开发多合约组合策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
- - 策略文件命名采用下划线模式,如portfolio_boll_channel_strategy.py,而策略类命名采用驼峰式,如PortfolioBollChannelStrategy。
-
- - 自建策略的类名不要与示例策略的类名重合。如果重合了,图形界面上只会显示一个策略类名。
-
-### StrategyTemplate
-
-VeighNa Elite Trader对vnpy_portfoliostrategy自带的StrategyTemplate提供支持,通过StrategyTemplate开发的策略可在VeighNa Elite Trader的多合约组合策略模块上成功运行。
diff --git a/docs/elite/strategy/elite_spreadtrading.md b/docs/elite/strategy/elite_spreadtrading.md
deleted file mode 100644
index fa846db..0000000
--- a/docs/elite/strategy/elite_spreadtrading.md
+++ /dev/null
@@ -1,907 +0,0 @@
-# 价差套利策略
-
-SpreadTrading是用于**多合约价差套利**的功能模块,用户可以通过其UI界面操作来便捷创建灵活的价差合约、完成半自动算法交易和全自动策略交易等任务。
-
-
-## 主要优势
-
-SpreadTrading模块不仅提供了Taker、Maker以及Exchange三种价差执行算法支持,并提供了专业价差策略模板EliteSpreadStrategyTemplate,以实现更加强大的价差策略开发。
-
-
-## 启动模块
-
-SpreadTrading模块需要启动之前通过【策略应用】标签页加载。
-
-启动登录VeighNa Elite Trader后,启动模块之前,请先连接交易接口。看到VeighNa Elite Trader主界面【日志】栏输出“合约信息查询成功”之后再启动模块(**如果在合约信息查询成功之前打开模块,可能会导致价差的价格跳动取值为零,进而在委托成交之后引发底层报错**)。
-
-请注意,IB接口因为登录时无法自动获取所有的合约信息,只有在用户手动订阅行情时才能获取。因此需要在主界面上先行手动订阅合约行情,再启动模块。
-
-成功连接交易接口后,在菜单栏中点击【功能】-> 【套利价差交易】,或者点击左侧按钮栏的图标:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/1.png)
-
-即可进入套利价差交易模块的UI界面。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/2.png)
-
-
-## 策略文件目录
-
-
-
-对于用户自行开发的策略,需要放到VeighNa Elite Trader运行时目录下的**strategies**目录中,才能被识别加载。具体的运行时目录路径,可以在VeighNa Elite Trader主界面顶部的标题栏查看。
-
-对于在Windows上默认安装的用户来说,放置策略的strategies目录路径通常为:
-
-```
-C:\Users\Administrator\strategies
-```
-
-其中Administrator为当前登录Windows的系统用户名。
-
-
-
-
-## 创建价差合约
-
-### 查询合约
-
-在创建价差合约前,用户可以通过【查询合约】功能,寻找可以组成价差的合约(**不支持交易所套利合约**):
-
-- 在VeighNa Elite Trader菜单栏中点击【帮助】-> 【查询合约】按钮,弹出合约查询界面,如下图所示:
-
- ![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/3.png)
-
-- 在界面中找到可用于组成价差交易的合约;
-
-- 本文档以豆油期货的跨期套利来展示,即交易y2309.DCE(豆油期货23年9月到期合约)和y2401.DCE(豆油期货24年1月到期合约)。
-
-### 构建价差合约
-
-在价差交易的界面左侧,点击【价差创建】按钮,弹出创建价差界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/4.png)
-
-价差交易模块支持灵活的价差计算公式(例如A/B、A-B*C等),同时允许引入不参与交易的定价腿,满足复杂境内外套利价差需要考虑汇率和税率等因素的需求。在创建价差合约时,需要配置相关参数,各参数要求如下:
-
-- 价差名称
- - 用户定义的价差合约名称;
- - 价差名称不能重名;
-- 主动腿代码
- - 价差盘口价格满足条件时,先发出的那条腿的本地代码。
- - 格式为vt_symbol(合约代码 + 交易所名称);
- - 必须是下面的腿选项中的一项;
-- 最小交易量
- - 最小交易手数;
-- 价格公式
- - 价差合约的计算公式;
- - 支持任何Python内置数学函数;
- - 注意其中的变量只能是A、B、C、D、E(不需要都用);
-- 【A、B、C、D、E】
- - 包含构建价差合约的主动腿与被动腿,也可以引入不参与交易的定价腿,由合约代码、交易方向、交易乘数组成:
- - 合约代码为公式中的变量所对应的合约本地代码(vt_symbol);
- - 一般来说,价差交易原则上是主动腿完成交易后,立刻用被动腿进行对冲,故主动腿一般选择较为不活跃的合约,价格乘数和交易乘数均为正;被动腿一般选择较为活跃的合约,价格乘数和交易乘数均为负(图形界面选择【卖出】,交易乘数填写正数;jupyter回测两者皆传负数);
- - 不用的变量留空即可;
-
-设置好价差合约的参数后,点击下方的【创建价差】按钮,即可成功创建价差合约。
-
-在豆油期货跨期套利示例中,其价格乘数和交易乘数均为1:1,即价差 = y2401 - y2309;买入1手价差等于买入1手y2401,同时卖出1手y2309完成对冲。
-
-请注意,在多条腿并且期货合约规模不等时,构建价差合约会相对困难一些,如构建虚拟钢厂套利所用到的价差合约时,计算公式如下:
-
-- 螺纹钢生产技艺是16吨铁矿石加上5吨焦炭练成10吨螺纹钢。
-- 基于价格乘数的价差spread = 1* RB - 1.6\*I - 0.5\*J。
-- 但是由于螺纹是10吨/手,铁矿石和焦炭都是100吨/手,所以他们交易乘数是1:10:10;
-- 故基于最大公约数规则,其实际交易手数关系是每买入100手螺纹钢(1000吨),需要卖出16手铁矿石(1600吨)和5手焦炭(500吨)完成对冲。
-
-### 监控价差合约
-
-价差合约创建完毕,监控界面中的【日志】栏会输出“价差创建成功”;【价差】栏也会展示价差合约的实时行情,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/5.png)
-
-在豆油期货价差交易示例中,【价差】组件的各字段含义如下所示:
-
-- 买价
- - y2401买一价 - y2309卖一价
-- 买量
- - min(y2401买一量, y2309卖一量)
- - 取最小值用于保证各合约能均能成交
-- 卖价
- - y2401卖一价 - y2309买一价
-- 卖量
- - min(y2401卖一量, y2309买一量)
-
-### 移除价差合约
-
-在价差交易的界面左侧,点击【移除价差】按钮,弹出移除价差界面,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/6.png)
-
-选择好要移除的价差合约之后,点击【移除】按钮,即可成功移除价差合约。【日志】组件输出“价差移除成功”,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/7.png)
-
-
-## 半自动算法交易
-
-用户可以通过模块界面左上角【交易】组件选择算法(目前支持[三种算法](#jump1))进行半自动算法交易,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/10.png)
-
-填写参数时请注意:
-
- - 开平:只有启动Exchange算法在【开仓】和【平仓】中选择,其他大多数用时候选择【净仓】,股指合约用【锁仓】
-
-
-下面通过2个SpreadTakerAlgo(主动对价成交算法)的例子,分别是发出委托立即成交和发出委托等待成交来介绍手动交易的操作情况:
-
-### 启动算法立即成交(超价)
-
-目标价差合约价格为-70,以-60的价位启动做多算法(超价),算法会立即发出委托并成交,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/11.png)
-
-### 启动算法等待成交(限价)
-
-以-80的价位启动做多算法,由于当前买价卖价分别位于-76和-72,所以委托状态显示【未成交】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/12.png)
-
-### 停止运行中的算法
-
- 鼠标双击需要停止算法的单元格,即可结束该算法。此时【日志】组件输出“算法已停止”,【算法】组件显示委托状态由【未成交】变成【已撤销】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/13.png)
-
-
-## 全自动策略交易
-
-### 添加策略
-
-用户可以基于编写好的价差策略模板(类)来创建不同的策略实例(对象)。
-
-在左侧的下拉框中选择要交易的策略名称(如MeanReversionStrategy),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/14.png)
-
-请注意,显示的策略名称是**策略类**(驼峰式命名)的名字,而不是策略文件(下划线模式命名)的名字。
-
-选择好策略类之后,点击【添加策略】,会弹出添加策略对话框,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/15.png)
-
-在创建策略实例时,需要配置相关参数,各参数要求如下:
-
-- 实例名称
- - 用户自定义的策略实例名称;
- - 策略实例名称不能重名;
-- 价差名称
- - 用于交易的价差合约;
- - 一定要是价差组件可以查询到的价差合约;
-- 参数设置
- - 显示的参数名称是在策略中使用Parameter辅助类定义的参数;
- - 默认数值为策略里的参数的默认值;
- - 由上图可观察到,参数名后面<>括号中显示的是该参数的数据类型,在填写参数时应遵循相应的数据类型。其中,是字符串、是整数、是浮点数;
- - 请注意,如果某个参数可能会调整至有小数位的数值,而默认参数值是整数(比如1)。请在编写策略时,把默认参数值设为浮点数(比如1.0)。否则策略会默认该项参数为整数,在后续【编辑】策略实例参数时,会只允许填进整数。
-
- - 以MeanReversionStrategy为例,该策略的参数设置如下:
- - ma_window(均线窗口)
- - entry_range(入场范围)
- - fixed_volume(固定交易数量)
- - payup(各条腿委托时,基于对价盘口的加点)
- - interval(限价单多少秒不成交,则撤销重挂)
-
-参数配置完成后,点击【添加】按钮,则开始创建策略实例。创建成功后可在右下角的策略监控组件中看到该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/16.png)
-
-策略监控组件顶部显示的是策略实例名、价差名、策略类名以及策略作者名(在策略里定义的author)。顶部按钮用于控制和管理策略实例,第一行表格显示了策略内部的参数信息(参数名需要写在策略的parameters列表中图形界面才会显示),第二行表格则显示了策略运行过程中的变量信息(变量名需要写在策略的variables列表中图形界面才会显示)。【inited】字段表示当前策略的初始化状态(是否已经完成了历史数据回放),【trading】字段表示策略当前是否能够开始交易。
-
-从上图可观察到,此时该策略实例的【inited】和【trading】状态都为【False】。说明该策略实例还没有初始化,也还不能发出交易信号。
-
-策略实例创建成功后,该策略实例的配置信息会被保存到.vntrader文件夹下的spread_trading_strategy.json文件中。
-
-### 管理策略
-
-#### 初始化
-
-策略实例创建成功后,就可以对该实例进行初始化了。点击该策略实例下的【初始化】按钮,若初始化成功,则如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/17.png)
-
-可观察到此时该策略实例的【inited】状态已经为【True】。说明该策略实例已经调用过load_bar函数加载历史数据并完成初始化了。【trading】状态还是为【False】,说明此时该策略实例还不能开始自动交易。
-
-#### 启动
-
-策略实例初始化成功,【inited】状态为【True】时,才能启动该策略的自动交易功能。点击该策略实例下的【启动】按钮,即可启动该策略实例。成功启动后,【日志】组件则会输出相应信息(请注意,策略启动并不代表算法启动,算法启动状态取决于策略逻辑),如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/24.png)
-
-【策略】组件中【trading】字段从【False】变为【True】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/18.png)
-
-#### 停止
-
-若要停止策略,点击策略实例下的【停止】按钮,即可停止该策略实例的自动交易。【日志】组件输出“策略停止”,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/25.png)
-
-【策略】组件中【trading】字段从【True】变为【False】,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/19.png)
-
- - 停止策略时,策略引擎会先停止策略启动的所有算法,撤销所有未成交委托,然后再停止策略实例的自动交易。若停止策略时仍有未停止的算法,可以在【日志】组件观察到“算法已停止”的输出,【算法】组件中对应算法状态也会变为【已撤销】。
-
-#### 编辑
-
-如果创建策略实例之后,想要编辑某个策略实例的参数(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【编辑】按钮,会弹出参数编辑对话框,以供修改策略参数,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/20.png)
-
-编辑完策略参数之后,点击下方的【确定】按钮,相应的修改会立即更新在参数表格中,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/21.png)
-
-但是策略实例的交易合约代码无法修改,同时修改完后也不会重新执行初始化操作。也请注意,此时修改的只是.vntrader文件夹下spread_trading_strategy.json文件中该策略实例的参数值,并没有修改原策略文件下的参数。
-
-若盘中编辑后想要再次启动策略,点击策略实例下的【启动】按钮即可再次启动该策略实例,如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/22.png)
-
-#### 移除
-
-如果创建策略实例之后,想要移除某个策略实例(若已启动策略,需要先点击策略实例下的【停止】按钮,停止策略),可以点击该策略实例下的【移除】按钮。移除成功后,图形界面右下角的策略监控组件中将不会再显示该策略实例的信息。如下图所示:
-
-![](https://vnpy-doc.oss-cn-shanghai.aliyuncs.com/elite/spreadtrading/23.png)
-
-此时.vntrader文件夹下的spread_trading_strategy.json文件也移除了该策略实例的配置信息。
-
-### 批量操作
-
-在策略经过充分测试,实盘运行较为稳定,不需要经常进行调整的情况下,如果有多个需要运行的价差策略实例,可以使用界面左下角的【全部初始化】、【全部启动】和【全部停止】功能来执行盘前批量初始化、启动策略实例以及盘后批量停止策略实例的操作。
-
-
-## 价差交易策略模板
-
-价差交易策略模板提供了信号生成和委托管理功能,用户可以基于模板自行开发策略。
-
-用户自行开发的策略可以放在用户运行文件夹下的[strategies](#jump)文件夹内。
-
-请注意:
-
- - 策略文件命名采用下划线模式,如mean_reversion_strategy.py,而策略类命名采用驼峰式,如MeanReversionStrategy。
-
- - 自建策略的类名不要与示例策略的类名重合,否则会出现策略类互相覆盖的错误情况。
-
-### EliteSpreadStrategyTemplate
-
-VeighNa Elite Trader的价差套利模块提供了EliteSpreadStrategyTemplate专业价差套利策略模板,实现更强大的价差策略开发。
-
-下面通过MeanReversionStrategy策略示例,来展示策略开发的具体步骤:
-
-在基于EliteSpreadStrategyTemplate编写策略逻辑之前,需要在策略文件的顶部载入需要用到的内部组件,如下方代码所示:
-
-```python 3
-from vnpy.trader.utility import BarGenerator, ArrayManager
-
-from elite_spreadtrading import (
- SpreadStrategyTemplate,
- SpreadAlgoTemplate,
- AlgoType,
- AlgoOffset,
- Variable,
- Parameter,
- SpreadData,
- OrderData,
- TradeData,
- TickData,
- BarData
-)
-```
-
-其中:
-* SpreadStrategyTemplate是Veighna Elite Trader提供的价差交易策略模板
-* SpreadAlgoTemplate是价差算法模板
-* AlgoType和AlgoOffset是用来配置算法交易模式的算法类型和算法开平选项
-* Parameter是储存策略参数的数据容器
-* Variable是储存策略变量的数据容器
-* SpreadData、OrderData、TickData、TradeData和BarData是储存对应信息的数据容器
-* BarGenerator是K线生成模块
-* ArrayManager是K线时间序列管理模块。
-
-### 策略参数与变量
-
-在策略类的下方,可以设置策略的作者(author),参数(parameters)以及变量(variables),如下方代码所示:
-
-```python 3
- author = "用Python的交易员"
-
- ma_window: int = Parameter(60)
- entry_range: int = Parameter(20)
- fixed_volume: int = Parameter(10)
- payup: int = Parameter(10)
- interval: int = Parameter(5)
-
- spread_pos: float = Variable(0.0)
- ma_value: float = Variable(0.0)
-
-```
-
-虽然策略的参数和变量都从属于策略类,但策略参数是固定的(由交易员从外部指定),而策略变量则在交易的过程中随着策略的状态变化,所以策略变量一开始只需要初始化为对应的基础类型。例如:整数设为0,浮点数设为0.0。
-
-如果需要价差套利交易模块引擎在运行过程中,将策略参数和变量显示在UI界面上,并在数据刷新、停止策略时保存其数值,则需在创建策略类的时候创建对应的参数和变量实例。
-
-请注意:
- - Parameter容器和Variable容器只能接受参数或变量以str、int、float和bool四种数据类型传入。
-
-
-### 策略的回调函数
-
-SpreadStrategyTemplate中以on开头的函数称为回调函数,在编写策略的过程中能够用来接收价差行情或者接收状态更新。回调函数的作用是当某一个事件发生的时候,策略里的这类函数会被价差交易策略引擎自动调用(无需在策略中主动操作)。回调函数按其功能可分为以下三类:
-
-#### 策略实例状态控制(所有策略都需要)
-
-**on_init**
-
-* 入参:无
-
-* 出参:无
-
-初始化策略时on_init函数会被调用,在此处通常会实现的功能逻辑包括:
-
-1. 实例化K线数据合成组件(BarGenerator):通过时间切片将Tick数据合成1分钟K线数据。如有需求,还可合成更长的时间周期数据。
-
-2. 实例化K线时间序列缓存组件(ArrayManager):基于K线数据将其转化为便于向量化计算的时间序列数据结构,并在内部支持使用talib库来计算相应的技术指标。
-
- - ArrayManager的默认长度为100,如需调整ArrayManager的长度,可传入size参数进行调整(size不能小于计算指标的周期长度)。
-
-3. 对价差算法交易模式进行配置:
-
- - AlgoType
- | 枚举值 | 值
- | ------ | --------
- | TAKER | "taker" |
- | MAKER | "maker" |
- | EXCHANGE | "exchange" |
-
- - AlgoOffset
- | 枚举值 | 值
- | ------ | --------
- | LOCK | "锁仓" |
- | NET | "净仓" |
- | OPEN | "开仓" |
- | CLOSE | "平仓" |
-
-完成上述组件初始化后,再调用load_bar函数加载历史数据,如下方代码所示:
-
-```python 3
- def on_init(self):
- """
- Callback when strategy is inited.
- """
- self.bg = BarGenerator(self.on_spread_bar)
- self.am = ArrayManager(self.ma_window + 10)
-
- # 价差算法交易模式配置
- self.algo_type: AlgoType = AlgoType.TAKER
- self.algo_offset: AlgoOffset = AlgoOffset.NET
-
- self.write_log("策略初始化")
- self.load_bar(10)
-```
-
-请注意,如果是基于Tick数据回测,请在此处调用load_tick函数。
-
-策略初始化时,策略的inited和trading状态都为【False】,此时只是调用ArrayManager计算并缓存相关的计算指标,不能发出交易信号。调用完on_init函数之后,策略的inited状态才变为【True】,策略初始化才完成。
-
-**on_start**
-
-* 入参:无
-
-* 出参:无
-
-启动策略时on_start函数会被调用,默认写法是调用write_log函数输出“策略启动”日志,如下方代码所示:
-
-```python 3
- def on_start(self):
- """
- Callback when strategy is started.
- """
- self.write_log("策略启动")
-```
-
-调用策略的on_start函数启动策略后,策略的trading状态变为【True】,此时策略才能够启动价差交易算法。
-
-**on_stop**
-
-* 入参:无
-
-* 出参:无
-
-停止策略时on_stop函数会被调用,默认写法是调用write_log函数输出“策略停止”日志,如下方代码所示:
-
-```python 3
- def on_stop(self):
- """
- Callback when strategy is stopped.
- """
- self.write_log("策略停止")
- self.put_event()
-```
-调用策略的on_stop函数停止策略后,策略的trading状态变为【False】,此时策略就不再允许启动价差交易算法了。
-
-#### 接收数据、计算指标、发出交易信号
-
-**on_spread_data**
-
-* 入参:无
-
-* 出参:无
-
-当价差数据更新的时候on_spread_data函数会被调用(因本次示例策略类MeanReversionStrategy不是基于on_spread_data交易,故不作示例讲解)。MeanReversionStrategy的写法是先调用get_spread_tick获取价差Tick数据,然后推进on_spread_tick函数中,如下方代码所示:
-
-```python 3
- def on_spread_data(self):
- """
- Callback when spread price is updated.
- """
- tick = self.get_spread_tick()
- self.on_spread_tick(tick)
-```
-
-**on_spread_tick**
-
-* 入参:tick: TickData
-
-* 出参:无
-
-on_spread_tick函数通常由用户在on_spread_data下发起调用,通常的用法是通过BarGenerator的update_tick函数把收到的Tick数据推进前面创建的bg实例中以便合成1分钟的K线,如下方代码所示:
-
-```python 3
- def on_spread_tick(self, tick: TickData):
- """
- Callback when new spread tick data is generated.
- """
- self.bg.update_tick(tick)
-```
-
-**on_spread_bar**
-
-* 入参:bar: BarData
-
-* 出参:无
-
-当BarGenerator完成1分钟K线合成时(实盘时默认推进来的是基于Tick合成的一分钟的K线,回测时则取决于选择参数时填入的K线数据频率),on_spread_bar函数就会被调用。
-
-如果策略基于on_spread_bar推进来的K线交易,那么请把交易请求类函数都写在on_spread_bar函数下。示例策略类MeanReversionStrategy是通过1分钟K线数据回报来生成CTA信号的。一共有三部分,如下方代码所示:
-
-```python 3
- def on_spread_bar(self, bar: BarData):
- """
- Callback when spread bar data is generated.
- """
- self.stop_all_algos()
-
- self.am.update_bar(bar)
- if not self.am.inited:
- return
-
- self.ma_value = self.am.sma(self.ma_window)
-
- if not self.spread_pos:
- if bar.close_price >= self.ma_value + self.entry_range:
- self.start_short_algo(
- bar.close_price - 10,
- self.fixed_volume,
- payup=self.payup,
- interval=self.interval,
- algo_type=self.algo_type,
- algo_offset=self.algo_offset
- )
- elif bar.close_price <= self.ma_value - self.entry_range:
- self.start_long_algo(
- bar.close_price + 10,
- self.fixed_volume,
- payup=self.payup,
- interval=self.interval,
- algo_type=self.algo_type,
- algo_offset=self.algo_offset
- )
- elif self.spread_pos < 0:
- if bar.close_price <= self.ma_value:
- self.start_long_algo(
- bar.close_price + 10,
- abs(self.spread_pos),
- payup=self.payup,
- interval=self.interval,
- algo_type=self.algo_type,
- algo_offset=self.algo_offset
- )
- else:
- if bar.close_price >= self.ma_value:
- self.start_short_algo(
- bar.close_price - 10,
- abs(self.spread_pos),
- payup=self.payup,
- interval=self.interval,
- algo_type=self.algo_type,
- algo_offset=self.algo_offset
- )
-
- self.put_event()
-```
-
-- 清空未成交委托:为了防止之前下的单子在上1分钟没有成交,但是下1分钟可能已经调整了价格,就用stop_all_algos()方法立刻撤销之前未成交的所有委托,保证策略在当前这1分钟开始时的整个状态是清晰和唯一的;
-
-- 计算策略信号指标:基于最新的1分钟价差K线数据来计算相应的技术指标,如均线等。首先获取ArrayManager对象,然后将收到的K线推送进去,检查ArrayManager的初始化状态,如果还没初始化成功就直接返回,没有必要去进行后续的交易相关的逻辑判断。因为很多技术指标计算对最少K线数量有要求,如果数量不够的话计算出来的指标会出现错误或无意义。反之,如果没有return,就可以开始计算技术指标了;
-
-- 启动价差执行算法:通过持仓的判断以及结合均线指标挂出委托,同时设置离场点。
-
- 请注意:
-
- 1. 启动算法时,如果不传algo_type和algo_offset,则分别默认为“taker”和“净仓”;
-
- 2. 启动Maker算法时,不要忘记传入active_quote_range和active_max_volume参数;
-
- 3. 只有启动Exchange算法时,algoOffset才在AlgoOffset.OPEN和AlgoOffset.CLOSE中选择;
-
- 4. 如果需要在图形界面刷新显示的策略状态数值,请不要忘记调用put_event()函数。
-
-#### 委托状态更新
-
-以下函数在策略中几乎都可以直接pass,其具体逻辑应用交给回测/实盘引擎负责。
-
-**on_spread_pos**
-
-* 入参:无
-
-* 出参:无
-
-收到持有仓位更新时on_spread_pos函数会被调用。与CTA策略模块访问策略逻辑持仓不同,价差交易模块访问的是账户底层持仓。所以默认写法是通过调用get_spread_pos函数获取价差持仓,以供策略进行逻辑判断,如下方代码所示:
-
-```python 3
- def on_spread_pos(self):
- """
- Callback when spread position is updated.
- """
- self.spread_pos = self.get_spread_pos()
- self.put_event()
-```
-
-**on_spread_algo**
-
-* 入参:algo: SpreadAlgoTemplate
-
-* 出参:无
-
-收到算法状态更新时on_spread_algo函数会被调用。
-
-**on_order**
-
-* 入参:order: OrderData
-
-* 出参:无
-
-收到策略委托回报时on_order函数会被调用(只有通过策略发出委托才能收到该函数回调,通过策略启动算法进行委托收不到该函数回调)。
-
-**on_trade**
-
-* 入参:trade: TradeData
-
-* 出参:无
-
-收到策略成交回报时on_trade函数会被调用(只有通过策略发出委托才能收到该函数回调,通过策略启动算法进行委托收不到该函数回调)。
-
-### 主动函数
-
-**start_long_algo**
-
-* 入参:price: float, volume: float, payup: int = None, interval: int = None, algo_type: AlgoType = AlgoType.TAKER, algo_offset: AlgoOffset = AlgoOffset.NET, active_quote_range: int = None, active_max_volume: int = None
-
-* 出参:algoid: str
-
-**start_short_algo**
-
-* 入参:price: float, volume: float, payup: int = None, interval: int = None, algo_type: AlgoType = AlgoType.TAKER, algo_offset: AlgoOffset = AlgoOffset.NET, active_quote_range: int = None, active_max_volume: int = None
-
-* 出参:algoid: str
-
-与CTA策略模块不同,价差交易的示例策略都是通过调用star_long_algo/start_short_algo函数(针对价差组合)而不是buy/sell/short/cover函数(针对单一合约)来发出委托的。在价差交易模块中,算法负责价差交易的执行,策略负责价差算法的调度。价差算法将价差交易简化为了普通委托,封装掉了所有主动腿下单和被动腿对冲的细节。
-
-以下方star_long_algo函数的代码为例,可以看到,价格和数量是必填的参数,超价的数值、时间间隔、算法类型、算法开平、maker挂单范围阈值、maker单笔委托量最大值等参数都是选填。也可以看到,函数内部收到传进来的参数之后就调用了SpreadStrategyTemplate里的start_algo函数来发单(因为是long指令,则自动把方向填成了LONG)
-
-```python 3
- def start_long_algo(
- self,
- price: float,
- volume: float,
- payup: int = None,
- interval: int = None,
- algo_type: AlgoType = AlgoType.TAKER,
- algo_offset: AlgoOffset = AlgoOffset.NET,
- active_quote_range: int = None,
- active_max_volume: int = None
- ) -> str:
- """"""
- return self.start_algo(
- Direction.LONG,
- price,
- volume,
- payup,
- interval,
- algo_type,
- algo_offset,
- active_quote_range,
- active_max_volume
- )
-```
-
-**start_algo**
-
-* 入参:direction: Direction, price: float, volume: float, payup: int = None, interval: int = None, algo_type: AlgoType = AlgoType.TAKER, algo_offset: AlgoOffset = AlgoOffset.NET, active_quote_range: int = None, active_max_volume: int = None
-
-* 出参:algoid: str
-
-start_algo函数是价差策略引擎调用的启动新的价差交易算法的函数。一般在策略编写的时候不需要单独调用,通过start_long_algo/start_short_algo函数发送委托即可。
-
-请注意:
-
- 1. 要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回"";
-
- 2. 若启动算法时少传参或传错参,算法会启动失败并输出相关日志信息。
-
-**stop_algo**
-
-* 入参:algoid: str
-
-* 出参:无
-
-**stop_all_algos**
-
-* 入参:无
-
-* 出参:无
-
-stop_algo和stop_all_algos都是负责停止价差算法的交易请求类函数。stop_algo是停止策略内指定的价差算法,stop_all_algos是停止策略所有的活动价差算法。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-**buy**:买入开仓(Direction:LONG,Offset:OPEN)
-
-**sell**:卖出平仓(Direction:SHORT,Offset:CLOSE)
-
-**short**:卖出开仓(Direction:SHORT,Offset:OPEN)
-
-**cover**:买入平仓(Direction:LONG,Offset:CLOSE)
-
-* 入参:vt_symbol: str, price: float, volume: float, lock: bool = False
-
-* 出参:vt_orderids: List[vt_orderid] / 无
-
-buy/sell/short/cover都是策略内部的负责针对特定的单一合约发出底层交易委托的请求类函数。策略可以通过这些函数给价差策略引擎发送交易信号来达到下单的目的。
-
-以下方buy函数的代码为例,可以看到,本地代码、价格和数量是必填的参数,锁仓转换则默认为False。也可以看到,函数内部收到传进来的参数之后就调用了SpreadStrategyTemplate里的send_order函数来发单(因为是buy指令,则自动把方向填成了LONG,开平填成了OPEN)
-
-如果lock设置为True,那么该笔订单则会进行锁仓委托转换(在有今仓的情况下,如果想平仓,则会先平掉所有的昨仓,然后剩下的部分都进行反向开仓来代替平今仓,以避免平今的手续费惩罚)。
-
-```python 3
- def buy(self, vt_symbol: str, price: float, volume: float, lock: bool = False) -> List[str]:
- """"""
- return self.send_order(vt_symbol, price, volume, Direction.LONG, Offset.OPEN, lock)
-```
-
-**send_order**
-
-* 入参:vt_symbol: str, price: float, volume: float, direction: Direction, offset: Offset, lock: bool = False
-
-* 出参:vt_orderids / []
-
-send_order函数是价差策略引擎调用的针对特定合约(**而不是价差**)发送委托的函数。一般在策略编写的时候不需要单独调用,通过buy/sell/short/cover函数发送委托即可。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能发出交易委托。如果策略的Trading状态为【False】时调用了该函数,只会返回[]。
-
-**cancel_order**
-
-* 入参:vt_orderid: str
-
-* 出参:无
-
-**cancel_all**
-
-* 入参:无
-
-* 出参:无
-
-cancel_order和cancel_all都是负责撤单的交易请求类函数。cancel_order是撤掉策略内指定的活动委托,cancel_all是撤掉策略所有的活动委托。
-
-请注意,要在策略启动之后,也就是策略的trading状态变为【True】之后,才能撤单。
-
-### 功能函数
-
-以下为委托交易以外的功能函数:
-
-**put_event**
-
-* 入参:无
-
-* 出参:无
-
-在策略中调用put_event函数,可以通知图形界面刷新策略状态相关显示。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能刷新界面。
-
-**write_log**
-
-* 入参:msg: str
-
-* 出参:无
-
-在策略中调用write_log函数,可以进行指定内容的日志输出。
-
-**get_engine_type**
-
-* 入参:无
-
-* 出参:engine_type: EngineType
-
-在策略里调用get_engine_type函数,可以获取策略引擎类型。
-
-**get_spread_tick**
-
-* 入参:无
-
-* 出参:tick: TickData
-
-在策略里调用get_spread_tick函数,可以获取价差Tick数据。
-
-**get_spread_pos**
-
-* 入参:无
-
-* 出参:spread_pos: float
-
-在策略里调用get_spread_pos函数,可以获取价差净持仓数据。
-
-**get_leg_tick**
-
-* 入参:vt_symbol: str
-
-* 出参:leg.tick: TickData / None
-
-在策略里调用get_leg_tick函数,可以获取特定合约的Tick数据。
-
-**get_leg_pos**
-
-* 入参:vt_symbol: str, direction: Direction = Direction.NET
-
-* 出参:leg.net_pos: float / leg.long_pos: float /leg.short_pos: float / None
-
-在策略里调用get_leg_pos函数,可以获取特定合约的持仓数据,用于处理瘸腿后的细粒度调整。
-
-**send_email**
-
-* 入参:msg: str
-
-* 出参:无
-
-配置好邮箱相关信息之后(配置方法详见基本使用篇的全局配置部分),在策略中调用send_email函数,可以发送指定内容的邮件到自己的邮箱。
-
-请注意,要策略初始化完成,inited状态变为【True】之后,才能发送邮件。
-
-**load_bar**
-
-* 入参:days: int, interval: Interval = Interval.MINUTE, callback: Callable = None
-
-* 出参:无
-
-在策略中调用load_bar函数,可以在策略初始化时加载价差K线数据。
-
-如下方代码所示,load_bar函数调用时,默认加载的天数是10,频率是一分钟,对应也就是加载10天的1分钟K线数据,建议加载的天数宁可多一些也不要太少。加载时会先依次尝试通过交易接口、数据服务、数据库获取历史数据,直到获取历史数据或返回空。
-
-请注意,回测期内每条腿的K线数据(1分钟最佳),若有某条腿缺失一段,则所有腿的这一段数据都会被弃用。
-
-```python 3
- def load_bar(
- self,
- days: int,
- interval: Interval = Interval.MINUTE,
- callback: Callable = None,
- ):
- """
- Load historical bar data for initializing strategy.
- """
- if not callback:
- callback = self.on_spread_bar
-
- self.strategy_engine.load_bar(self.spread, days, interval, callback)
-```
-
-**load_tick**
-
-* 入参:days: int
-
-* 出参:无
-
-价差Tick数据来源:
-首先需要在SpreadTrading模块中创建配置好价差后,通过DataRecorder模块来进行Tick录制,本地代码填入xx-spread.LOCAL,其中xx-spread为用户定义的价差名称,LOCAL为固定交易所后缀(代表本地生成)。
-
-在策略中调用load_tick函数,可以在策略初始化时去数据库加载录制好的价差Tick盘口数据。
-
-
-## 算法介绍
-
-
-
-价差套利模块都是通过价差算法来执行价差交易,从而将相对复杂的多条腿交易执行简化为面向价差组合的普通委托,封装掉所有主动腿下单和被动腿对冲的细节。
-
-### 算法检查函数
-
- - is_active:检查算法是否结束
- - is_order_finished:检查委托是否全部结束
- - is_hedge_finished:检查被动腿和主动腿是否匹配
- - check_algo_cancelled:检查算法是否被停止
- - calculate_traded_volume:计算已成交价差数量
- - calculate_traded_price:计算已成交价差均价
-
-### SpreadTakerAlgo(见价下单算法)
-
-#### 算法原理
-
- - 见价下单:主动腿以对价先行下单;被动腿以对价立即对冲
-
- - 算法收到tick数据推送:先检查委托是否结束,再检查对冲是否结束,若未结束则发起被动腿对冲。最后检查盘口是否满足条件,满足条件后发出主动腿委托
-
- - 算法收到委托回报:若收到主动腿已结束的委托,则发起被动腿对冲
-
- - 超时限制:到达计时时间执行委托全撤
-
-#### 算法优势
-
- - 灵活且不占用过多撤单次数
-
-#### 不足
-
- - 所有腿均需要付出盘口买卖价差的滑点成本
- - 等待主动腿对价满足条件,需要比Maker更长的时间
-
-### SpreadMakerAlgo(报价做市算法)
-
-#### 算法原理
-
- - 报价做市:基于被动腿盘口,计算主动腿最差成交价
-
- - 算法收到tick数据推送:先检查委托是否结束,再检查对冲是否结束,若未结束则发起被动腿对冲。然后检查新的挂单价格与当前已挂价格的差值是否超过设定的阈值,如果未超过则发出主动腿委托,如果超过则重挂
-
- - 算法收到委托回报:遭遇拒单则停止策略;若收到主动腿已结束的委托,则清空挂单价格记录
-
- - 算法收到成交回报:只关心主动腿委托,若对冲未结束则发起被动腿对冲
-
- - 计时时间到达:到达计时时间执行委托全撤
-
-#### 算法优势
-
- - 主动腿报价挂单做市,目标是赚得盘口价差的同时提高成交概率
-
-#### 不足
-
- - 虽然有设定挂单阈值限制,但撤单行为比Taker更频繁,需要仔细监控委托流量费成本
-
-### SpreadExchangeAlgo(交易所价差算法)
-
-#### 算法原理
-
- - 基于交易所提供的价差组合来创建价差,采用各条腿的行情盘口计算价差盘口,最终采用交易所的价差合约进行交易执行
-
- - 算法收到tick数据推送:检查是否已发出了委托,若已发出则返回。再检查价差套利合约是否生成成功,并查询价差套利合约的合约信息,然后发出交易所价差委托,缓存委托号和价差关系,最后输出日志并记录委托已经发出的状态
-
-#### 算法优势
-
- - 体验上类似单合约,且免去了主动腿撤单
-
-#### 不足
-
- - 缺乏灵活性,可选择合约范围有限
-
-
diff --git a/docs/elite/strategy/index.rst b/docs/elite/strategy/index.rst
deleted file mode 100644
index 6c54e88..0000000
--- a/docs/elite/strategy/index.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-量化策略
-~~~~~~~~~
-
-.. toctree::
- :maxdepth: 2
-
- elite_ctastrategy.md
- elite_function.md
- elite_filter.md
-
- elite_portfoliostrategy.md
- elite_spreadtrading.md
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644
index 08f959d..0000000
--- a/docs/index.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VeighNa用户文档
-~~~~~~~~~
-
-
-.. toctree::
- :maxdepth: 3
-
- community/index
-
- elite/index