MATLAB-掘金量化
1.33 MB
50 页
0 下载
19 浏览
0 评论
0 收藏
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pdf | 3 |
概览 | ||
目 录 matlab策略SDK概述 概述 matlab策略 SDK的安装 matlab策略运行 注意事项 典型策略场景 定时事件驱动 订阅数据驱动 成交回报事件驱动 指定账户交易 获取资金持仓信息交易策略 设定策略运行参数 仅提取数据 典型应用场景 策略组成文件 策略编写m文件-main.m 策略运行文件—run.m 策略结构要素 全局变量 初始化事件 设置滑窗标的序列 定时运行函数和定时事件 订阅数据滑窗和数据事件 交易事件驱动 其他事件驱动 存储自定义全局变量 策略停止函数—stop_strategy 获取数据 bar 数据结构说明 tick 数据结构说明 财务数据及其他业务数据结构 subscribe—订阅方式获取决策数据 current - 查询当前行情快照 history - 查询固定时间历史行情 history_n - 查询固定长度历史行情 get_fundamentals - 查询固定时间基本面数据 - 1 - 本文档使用 掘金量化 构建 get_fundamentals_n - 查询固定长度基本面数据 get_instruments - 查询最新交易标的最新基本信息 get_history_instruments - 查询交易标的历史基本信息 get_instrumentinfos - 查询交易标的基本信息 get_constituents - 查询指数成份股信息 get_industry - 查询行业板块成分股 get_trading_dates - 查询交易日历表 get_previous_trading_date - 查询上一个交易日 get_next_trading_date - 查询下一个交易日 get_dividend - 查询分红送配信息 get_continuous_contracts - 获取主力连续合约 策略交易 订单数据结构说明 回报数据结构说明 持仓数据结构说明 资金数据结构说明 order_volume - 按指定量委托 order_value - 按指定价值委托 order_percent - 按总资产指定比例委托 order_target_volume - 调仓到目标持仓量 order_target_value - 调仓到目标持仓额 order_target_percent - 调仓到目标持仓比例(总资产的比例) order_batch - 批量委托 order_cancel -撤销指定委托 order_cancel_all - 撤销所有委托 order_close_all - 平当前所有可平持仓 get_unfinished_orders - 查询日内全部未结委托 get_orders - 查询日内全部委托 get_execution_reports - 查询日内全部执行回报 get_position-持仓查询 get_cash—资金查询 枚举常量 OrderStatus - 委托状态 OrderSide - 委托方向 OrderType - 委托类型 OrderDuration - 委托时间属性 OrderQualifier - 委托成交属性 ExecType - 执行回报类型 - 2 - 本文档使用 掘金量化 构建 PositionEffect - 开平仓类型 PositionSide - 持仓方向 OrderRejectReason - 订单拒绝原因 CancelOrderRejectReason - 取消订单拒绝原因 OrderStyle - 订单类型 CashPositionChangeReason - 仓位变更原因 SecType - 标的类别 AccountStatus - 交易账户状态 错误码 - 3 - 本文档使用 掘金量化 构建 matlab策略SDK概述 概述 matlab策略 SDK的安装 matlab策略运行 注意事项 作为掘金3量化接口的一员,matlab语言SDK包含以下特点和功能: 矩阵化的数据格式,按时序、标的组成行情矩阵 采用单一函数面向过程的策略结构 支持行情滑窗和行情数据驱动 支持回测、实盘无缝切换 支持基本面和业务数据查询 支持查询持仓、资金信息 统一订单ID,支持下单、撤单和查询 支持订单查询和订单回报事件推送 matlab策略SDK作为一个matlab工具包,加载到matlab函数环境中即可,具体操作为在matlab主界面使用Set Path,Add Folder添加matlabSDK的工具包路径(SDK在终端内获取) 概述 matlab策略 SDK的安装 matlab策略SDK概述 - 4 - 本文档使用 掘金量化 构建 matlab策略SDK内部已经设置好了与掘金服务器、终端的链接,配置正确token和策略ID后,可以直接运行策略(需要终 端处于登录状态),策略运行的回测、仿真交易和实盘信息在终端查看 matlab策略回测时,出现无法暂停的情况,需要重启matlab,断点调试时,可调用stop_stragety函数停止策略 matlab策略运行 注意事项 matlab策略运行 - 5 - 本文档使用 掘金量化 构建 典型策略场景 定时事件驱动 订阅数据驱动 成交回报事件驱动 指定账户交易 获取资金持仓信息交易策略 设定策略运行参数 仅提取数据 初始化策略时设定策略的执行时间 到达设定时间时,自动执行策略 可以指定多个定时任务,通过任务名进行区分 1. function [Context] = main(Context,Event) 2. % 初始化 3. if Event.Init.flag==1 4. schedule('algo01', '1d', '09:30:00'); 5. schedule('algo02', '1d', '14:55:00'); 6. return 7. end 8. %% 定时任务处理逻辑 9. if Event.algo01.flag==1 10. disp (Context.now); 11. end 12. if Event.algo02.flag==1 13. disp (Context.now); 14. end 15. end 1. function [Context] = main(Context,Event) 2. % 初始化 3. if Event.Init.flag==1 4. set_symbols({'SZSE.000001','SHSE.600000'}); 5. subscribe({}, '900s',60); 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 定时事件驱动 订阅数据驱动 成交回报事件驱动 典型策略场景 - 6 - 本文档使用 掘金量化 构建 委托执行后,当委托状态发生变化,如,部分成交或者委托被拒绝时,会触发委托事件 1. function [Context] = main(Context,Event) 2. %% 编写策略 3. % 初始化操作 4. if Event.Init.flag==1%第一次启动仅执行初始化部分 5. % 设置股票池和订阅的数据,如果订阅数据不指定,默认订阅股票池的所有数据 6. set_symbols({'SZSE.000001','SZSE.000009'}); 7. subscribe({}, '900s',10); 8. %设置启用的事件,启用委托状态变更事件 9. set_event({'OrderStatus'}) 10. return 11. end 12. % 定时任务处理逻辑 13. if Event.Bar.frequency_900s.flag==1 14. [order]=order_volume('SZSE.000001', 100, OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0); %标的,委托量,买入,市 价,开仓,价格 15. end 16. % 委托状态变化事件 17. if Event.OrderStatus.flag ==1 18. disp(Event.OrderStatus.data) 19. end 20. end 在多账户场景下交易,用指定账户的ID来进行不同账户的下单 如果策略是单账户则不需要指定账户ID 1. function [Context] = main(Context,Event) 2. % 初始化 3. if Event.Init.flag==1 4. schedule('algo01', '1d', '09:30:00'); 5. return 6. end 7. %% 定时任务处理逻辑 8. if Event.algo01.flag==1 9. %标的,资金,买入,市价,开仓,价格,仅在实盘可以指定账户 10. [order]=order_volume({'SHSE.600000'}, 100, OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0,'account1'); 11. end 12. end 13. end 获取资金和持仓信息 在定时任务中使用资金和持仓信息决策,并进行交易 指定账户交易 获取资金持仓信息交易策略 指定账户交易 - 7 - 本文档使用 掘金量化 构建 1. function [Context] = main(Context,Event) 2. %% 编写策略 3. % 开盘如果没有持仓,则买入0.8倍可用资金的平安银行股票 4. % 收盘检查可用持仓,如果有可用仓,则全部卖出 5. % 初始化操作 6. if Event.Init.flag==1 7. schedule('algo01', '1d', '09:30:00'); 8. schedule('algo02', '1d', '14:55:00'); 9. Context.userdata.symbol = 'SZSE.000001'; %userdata,设定 用户自定义的全局变量 10. return 11. end 12. %% 定时任务处理逻辑 13. symbol = Context.userdata.symbol; 14. [position] = get_position(); %position字 段和info说明一一对应 15. ind = strcmp(position(:,3),symbol); 16. if Event.algo01.flag==1 17. % 查询资金,买入当前资金的0.1的平安银行股票 18. [cash]= get_cash(); %cash字段和 info说明一一对应 19. if sum(ind)==0 %没有仓位则开 仓 20. [order]=order_value(symbol, 0.1*cash{2,9}, 1, 2,1,0); %标的,资金, 买入,市价,开仓,价格 21. end 22. end 23. if Event.algo02.flag==1 24. % 查询持仓,持有平安银行,且为亏损的则清仓 25. if sum(ind)>0&&position{ind,15}==0 26. [order]=order_volume(symbol, position{ind,14}, 2, 2,2,0); %标的,数量, 卖出,市价,平仓,价格 27. end 28. end 29. end 策略运行必要参数:登录身份信息(token),策略身份信息(strategy_id)为必填信息,可由终端自动生成 回测参数用于控制回测方式运行的起止时间、复权方式、资金、交易信息、缓存等,有默认值 服务器地址默认本机地址,需要分机器部署时才需要指定填写 1. %% 设置策略运行参数 2. strategy_set.strategy_id = ''; 3. strategy_set.token = ''; 4. strategy_set.mode = 'MODE_BACKTEST'; % MODE_LIVE(实时)=1,MODE_BACKTEST(回测) =2 5. strategy_set.backtest_start_time = '2018-08-01 10:40:00'; 6. strategy_set.backtest_end_time = '2018-08-10 10:50:00'; % 默认最近一 个月 7. strategy_set.backtest_initial_cash = 1000000; % 默认资金一 设定策略运行参数 设定策略运行参数 - 8 - 本文档使用 掘金量化 构建 百万 8. % strategy_set.backtest_transaction_ratio = 0; % 默认成交比 例1 9. % strategy_set.backtest_commission_ratio = 0.001; % 默认手续费 千一1 10. % strategy_set.backtest_slippage_ratio = 0; % 默认滑点比 率 11. % strategy_set.backtest_adjust = ADJUST_NONE; % 默认复权方 式不复权,ADJUST_NONE(不复权)=0,ADJUST_PREV(前复权)=1,ADJUST_POST(后复权)=2 12. % strategy_set.backtest_check_cache = 1; % 默认使用缓 存,1 - 使用, 0 - 不使用 13. % strategy_set.serv_addr = ''; % 服务器地址 可不填 14. %% 运行策略 15. run_strategy(strategy_set) 16. global context 设置token信息,用于登录身份认证 使用提数接口提取数据 1. set_token('xxxxx') 2. % 获取财务数据(表名,标的名,开始时间,结束时间,表字段) 3. get_fundamentals('trading_derivative_indicator',{ 'SHSE.600000','SZSE.000001'}, '2018- 04-01', '2018-08-01', {'TCLOSE','NEGOTIABLEMV','TOTMKTCAP','TURNRATE'}) 仅提取数据 仅提取数据 - 9 - 本文档使用 掘金量化 构建 典型应用场景 参考处理代码: 1. function data01 = date_fl (data,month) 2. for i = 1:length(data.symbols) 3. date = cellstr(datestr(data.EndDate{i},'mm')); 4. ind = strcmp(date,month); 5. data01.symbols = data.symbols; 6. diff_f = setdiff(fieldnames(data),'symbols'); 7. for j = 1:length(diff_f) 8. jj = diff_f{j}; 9. eval(['data01.',jj,'{i}=data.',jj,'{i}(ind);']) 10. end 11. end 12. end 完整示例: 1. [data] = get_fundamentals('cashflow_statement',{ 'SHSE.600000','SZSE.000001'}, '2016- 01-01', '2018-08-01', {'ASSEIMPA','CASHFINALBALA','FINRELACASH'}); 2. data01 = date_fl(data,'09') 输出结果 1. data01 = 2. 3. 包含以下字段的 struct: 4. 5. symbols: {'SHSE.600000' 'SZSE.000001'} 6. ASSEIMPA: {[0 0] [0 0]} 7. CASHFINALBALA: {[0 0] [0 0]} 8.
|
下载文档到本地,方便使用
共 50 页, 还有
48 页可预览,
继续阅读
文档评分