PDF下载 下载

典型策略场景

阅读 29527

定时事件驱动

  • 初始化策略时设定策略的执行时间
  • 到达设定时间时,自动执行策略
  • 可以指定多个定时任务,通过任务名进行区分
  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

成交回报事件驱动

  • 委托执行后,当委托状态发生变化,如,部分成交或者委托被拒绝时,会触发委托事件
  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

获取资金持仓信息交易策略

  • 获取资金和持仓信息
  • 在定时任务中使用资金和持仓信息决策,并进行交易
  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. % 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(不复权)=0ADJUST_PREV(前复权)=1ADJUST_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'})
0 篇笔记