返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

策略结构要素

发布于 2024-06-22 12:53:28 字数 5913 浏览 0 评论 0 收藏 0

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

全局变量

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

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

说明:

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

初始化事件

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

原型

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

参数说明

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

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

设置滑窗标的序列

set_symbols(symbols);

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

设置驱动事件

原型

set_event( event_name ,bool);

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

定时运行函数和定时事件

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

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

参数说明

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

示例

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

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

订阅数据滑窗和数据事件

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

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

订阅行情数据 函数原型:

% 设置数据滑窗的标的列表
set_symbols(symbols)
% 订阅函数
subscribe(symbols, frequency, count,is_event)
% 接收函数
if  Event.Bar.flag==1%

end

参数说明

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

示例

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

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

交易事件驱动

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

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

交易事件类型

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

函数原型

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

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

其他事件驱动

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

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

其他事件类型

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

函数原型

% 开启回报事件
 set_event({'BacktestFinished','Error','MarketDataConnected','TradeDataConnected',...
 'MarketDataDisconnected','TradeDataDisconnected'})
% 回测结束事件
if Event.BacktestFinished.flag ==1
% 回测结束事件
data =  Event.BacktestFinished.data
end
% 错误事件
if Event.Error.flag ==1

end
% 行情连接事件
if Event.MarketDataConnected.flag ==1

end

存储自定义全局变量

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

% 本次保存
Context.userdata = user_data;
% 下次使用
user_data = Context.userdata;

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

策略停止函数stop_strategy

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

stop_strategy()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文