典型策略场景
阅读 31395
更新 2022-12-20 13:19:26
定时事件驱动
- 初始化策略时设定策略的执行时间
- 到达设定时间时,自动执行策略
- 可以指定多个定时任务,通过任务名进行区分
function [Context] = main(Context,Event)% 初始化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);endif Event.algo02.flag==1 disp (Context.now);endend
订阅数据驱动
function [Context] = main(Context,Event)% 初始化if Event.Init.flag==1 set_symbols({'SZSE.000001','SHSE.600000'}); subscribe({}, '900s',60); return endif 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
成交回报事件驱动
- 委托执行后,当委托状态发生变化,如,部分成交或者委托被拒绝时,会触发委托事件
function [Context] = main(Context,Event)%% 编写策略% 初始化操作if Event.Init.flag==1%第一次启动仅执行初始化部分 % 设置股票池和订阅的数据,如果订阅数据不指定,默认订阅股票池的所有数据 set_symbols({'SZSE.000001','SZSE.000009'}); subscribe({}, '900s',10); %设置启用的事件,启用委托状态变更事件 set_event({'OrderStatus'}) returnend% 定时任务处理逻辑if Event.Bar.frequency_900s.flag==1[order]=order_volume('SZSE.000001', 100, OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0); %标的,委托量,买入,市价,开仓,价格end% 委托状态变化事件if Event.OrderStatus.flag ==1 disp(Event.OrderStatus.data)endend
指定账户交易
- 在多账户场景下交易,用指定账户的ID来进行不同账户的下单
- 如果策略是单账户则不需要指定账户ID
function [Context] = main(Context,Event)% 初始化if Event.Init.flag==1 schedule('algo01', '1d', '09:30:00'); return end%% 定时任务处理逻辑if Event.algo01.flag==1 %标的,资金,买入,市价,开仓,价格,仅在实盘可以指定账户 [order]=order_volume({'SHSE.600000'}, 100, OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0,'account1');endendend
获取资金持仓信息交易策略
- 获取资金和持仓信息
- 在定时任务中使用资金和持仓信息决策,并进行交易
function [Context] = main(Context,Event)%% 编写策略% 开盘如果没有持仓,则买入0.8倍可用资金的平安银行股票% 收盘检查可用持仓,如果有可用仓,则全部卖出% 初始化操作if Event.Init.flag==1 schedule('algo01', '1d', '09:30:00'); schedule('algo02', '1d', '14:55:00'); Context.userdata.symbol = 'SZSE.000001'; %userdata,设定用户自定义的全局变量 return end%% 定时任务处理逻辑symbol = Context.userdata.symbol;[position] = get_position(); %position字段和info说明一一对应ind = strcmp(position(:,3),symbol);if Event.algo01.flag==1 % 查询资金,买入当前资金的0.1的平安银行股票 [cash]= get_cash(); %cash字段和info说明一一对应 if sum(ind)==0 %没有仓位则开仓 [order]=order_value(symbol, 0.1*cash{2,9}, 1, 2,1,0); %标的,资金,买入,市价,开仓,价格 endendif Event.algo02.flag==1 % 查询持仓,持有平安银行,且为亏损的则清仓 if sum(ind)>0&&position{ind,15}==0 [order]=order_volume(symbol, position{ind,14}, 2, 2,2,0); %标的,数量,卖出,市价,平仓,价格 endendend
设定策略运行参数
- 策略运行必要参数:登录身份信息(token),策略身份信息(strategy_id)为必填信息,可由终端自动生成
- 回测参数用于控制回测方式运行的起止时间、复权方式、资金、交易信息、缓存等,有默认值
- 服务器地址默认本机地址,需要分机器部署时才需要指定填写
%% 设置策略运行参数strategy_set.strategy_id = '';strategy_set.token = '';strategy_set.mode = 'MODE_BACKTEST'; % MODE_LIVE(实时)=1,MODE_BACKTEST(回测) =2strategy_set.backtest_start_time = '2018-08-01 10:40:00';strategy_set.backtest_end_time = '2018-08-10 10:50:00'; % 默认最近一个月strategy_set.backtest_initial_cash = 1000000; % 默认资金一百万% strategy_set.backtest_transaction_ratio = 0; % 默认成交比例1% strategy_set.backtest_commission_ratio = 0.001; % 默认手续费千一1% strategy_set.backtest_slippage_ratio = 0; % 默认滑点比率% strategy_set.backtest_adjust = ADJUST_NONE; % 默认复权方式不复权,ADJUST_NONE(不复权)=0,ADJUST_PREV(前复权)=1,ADJUST_POST(后复权)=2% strategy_set.backtest_check_cache = 1; % 默认使用缓存,1 - 使用, 0 - 不使用% strategy_set.serv_addr = ''; % 服务器地址可不填%% 运行策略run_strategy(strategy_set)global context
仅提取数据
- 设置token信息,用于登录身份认证
- 使用提数接口提取数据
set_token('xxxxx')% 获取财务数据(表名,标的名,开始时间,结束时间,表字段)get_fundamentals('trading_derivative_indicator',{ 'SHSE.600000','SZSE.000001'}, '2018-04-01', '2018-08-01', {'TCLOSE','NEGOTIABLEMV','TOTMKTCAP','TURNRATE'})