PDF下载 下载

策略结构要素

阅读 21780

main函数内主要由事件驱动、全局变量、数据接口和交易接口组成的策略编基本接口,用户根据这些基本接口来组织策略的结构

全局变量

全局变量存放了系统变量,包括订阅数据滑窗、策略运行时间、标的、事件等
也用于存放用户自定义的全局变量
函数原型:

  1. % 全局变量直接赋值即可
  2. symbols = Context.symbols;
  3. nowtime = Context.now;
  4. data_15close = Context.data.frequency_900s.close;

说明:

变量名 类型 描述
symbols cell 滑窗数据的标的列表,通过set_symbols进行设定,必须在订阅数据前设定,否则可能导致数据滑窗数据缺失
now cell 字符格式的当前时间点
data struct 订阅数据滑窗,按照频率、字段、数据矩阵结构存储,如Context.data.frequency_900s.close, 行索引为symbols,列索引eob
event struct 存放系统使用事件的标识和参数
userdata struct 用户保存的全局变量,可在后续周期中调用

初始化事件

初始化事件是策略逻辑启动前,初始化策略运行条件
策略的运行方式采用事件触发的方式,当检测到事件发生时则启动对应的事件逻辑,初始化一般用于设定策略需要的驱动方式,如定时驱动,订阅滑窗数据驱动,成交回报驱动等

原型

  1. if Event.Init.flag==1
  2. % 编写初始化内容
  3. end

参数说明

变量名 类型 描述
Event.Init.flag mat 初始化事件的标识,当初始化调用main时,Event.Init.flag==1

注意
Init事件是启动策略必须执行事件,一般执行一次,在其条件内进行数据订阅、定时任务的启动

设置滑窗标的序列

  1. set_symbols(symbols);

说明:symbols集合用于生成统一的滑窗数据,保证滑窗数据矩阵行索引和symbols对齐,便于数据的矩阵运算

设置驱动事件

原型

  1. set_event( event_name ,bool);

说明:具体事件名称查看后续事件说明内容

定时运行函数和定时事件

定时功能的使用由两部分组成

  • 定时任务设置函数
  • 定时任务接收函数
  1. % 定时任务设置函数
  2. schedule(schedule_func, date_rule, time_rule);
  3. % 定时任务接收函数
  4. if Event.schedule_func.flag==1
  5. % 定时任务处理逻辑
  6. end

参数说明

变量名 类型 描述
schedule_func char 策略定时执行的事件名称
date_rule char 定时日期,格式为’n’+’d/w/m’,目前仅支持数字1,字母分别代表日,周,月
time_rule char 定时事件,格式为’hh:mm:ss’

示例

  1. % 每个交易日定时启动两个不同的定时任务,在任务中查看任务启动的时间点
  2. if Event.Init.flag==1
  3. schedule('algo01', '1d', '09:30:00');
  4. schedule('algo02', '1d', '14:55:00');
  5. return
  6. end
  7. %% 定时任务处理逻辑
  8. if Event.algo01.flag==1
  9. disp (Context.now);
  10. end
  11. if Event.algo02.flag==1
  12. disp (Context.now);
  13. end

注意
在使用定时函数schedule定时成功后,会在Event事件集中自动生成定时函数中的同名标识;
定时任务可以启动多个

订阅数据滑窗和数据事件

数据事件驱动的使用由两部分组成

  • 订阅数据函数
  • 数据事件接收函数

订阅行情数据
函数原型:

  1. % 设置数据滑窗的标的列表
  2. set_symbols(symbols)
  3. % 订阅函数
  4. subscribe(symbols, frequency, countis_event)
  5. % 接收函数
  6. if Event.Bar.flag==1%
  7. end

参数说明

变量名 类型 描述
symbols cell 策略定时执行的事件名称
frequency mat 订阅数据的频率,支持支持 ‘tick’, ‘1d’, ‘Ns’
count mat 订阅的滑窗数据的长度
is_event mat 是否作为事件方式进行驱动,1表示数据到达时驱动,0表示不驱动(暂只针对tick数据订阅生效)

示例

  1. function [Context] = main(Context,Event)
  2. % 初始化
  3. if Event.Init.flag==1
  4. set_symbols({'SZSE.000001','SHSE.600000'});
  5. subscribe({}, '900s',60,1,{});
  6. return
  7. end
  8. if Event.Bar.frequency_900s.flag==1
  9. disp(Context.data.frequency_900s.eob); %打印滑窗数据
  10. disp(Context.data.frequency_900s.symbols);
  11. disp(Context.data.frequency_900s.close);
  12. end

说明
滑窗标的列表设置的作用是规定滑窗数据的以相同的标的行进行数据对齐
订阅函数subscribe中,symbols不填默认使用滑窗标的列表的全部标的进行订阅
行情字段参数暂时不生效
数据滑窗时间判断表示为Event.Bar.flag,支持独立的频率时间驱动,使用Event.Bar.frequency_900s.flag

交易事件驱动

交易事件的使用由三部分组成

  • 使用set_event启动交易事件类型
  • 接收交易事件驱动
  • 获取交易事件信息

交易事件类型

交易事件 说明
OrderStatus 委托状态更新事件,响应委托状态更新事情,下单后及委托状态更新时被触发。
ExecutionReport 委托执行回报事件,响应委托被执行事件,委托成交后被触发。
AccountStatus 交易账户状态更新事件

函数原型

  1. %设置启用的事件,启用委托状态变更事件
  2. set_event({'OrderStatus'})
  3. % 委托状态变化事件
  4. if Event.OrderStatus.flag ==1
  5. disp(Event.OrderStatus.data); %打印事件内容
  6. end

说明:
事件数据格式参照交易对象说明
在回测模式下,交易事件和下单执行函数是同步生效的,即下单后会立刻获取交易事件

其他事件驱动

其他需要策略处理的事件使用方式

  • 使用set_event启动事件类型
  • 接收事件驱动
  • 获取事件内容

其他事件类型

事件名称 说明
BacktestFinished 回测结束事件
Error 错误事件
MarketDataConnected 实时行情网络连接成功事件
MarketDataDisconnected 实时行情网络连接断开事件
TradeDataConnected 交易通道网络连接成功事件
TradeDataDisconnected 交易通道网络连接断开事件

函数原型

  1. % 开启回报事件
  2. set_event({'BacktestFinished','Error','MarketDataConnected','TradeDataConnected',...
  3. 'MarketDataDisconnected','TradeDataDisconnected'})
  4. % 回测结束事件
  5. if Event.BacktestFinished.flag ==1
  6. % 回测结束事件
  7. data = Event.BacktestFinished.data
  8. end
  9. % 错误事件
  10. if Event.Error.flag ==1
  11. end
  12. % 行情连接事件
  13. if Event.MarketDataConnected.flag ==1
  14. end

存储自定义全局变量

策略中用于下次决策使用或多周期使用的数据可以保存在自定义全局变量中
函数原型

  1. % 本次保存
  2. Context.userdata = user_data;
  3. % 下次使用
  4. user_data = Context.userdata

说明
Context.userdata 可以用作结构体存储多个变量

策略停止函数—stop_strategy

用于停止策略,可用在仿真的断点调试,连续回测是无法停止策略,需要关闭matlab程序
函数原型

  1. stop_strategy()
0 篇笔记