通过订阅,将需要的数据申明
通过 on_bar 函数接收 bar数据事件,并在该函数中求均值
名称 | 类型 | 说明 |
---|---|---|
run | 函数 | 策略启动入口函数 |
main | 函数 | 用于策略编写的主文件名,可通过 run 函数中的 filename 指定 |
strategy_id | 参数 | 策略id,用于终端识别策略身份的唯一标识 |
token | 参数 | 登录身份信息的标识,服务器通过该标识识别账户 |
mode | 参数 | 策略运行参数,通过在 run 函数指定 mode:MODE_LIVE(实时)=1,MODE_BACKTEST(回测) =2 |
init | 函数 | 策略初始化函数 |
context | 全局变量 | 系统默认的全局变量名,可用于:获取订阅的时序数据、系统参数、自定义全局变量 |
log | 函数 | 实时运行时可以将日志输出到终端监控页面 |
on_xxx | 函数 | xxx表示事件名,系统提供多种常用的决策事件共策略调用:数据事件、定时事件、交易事件、异常事件等 |
symbol | 参数 | 标的参数,标的格式为:交易所.代码,如深交所平安银行,‘SZSE.000001’ |
frequence | 参数 | 数据频率,支持格式为:‘60s’,‘300s’,‘900s’,‘1d’ |
fields | 参数 | 数据字段,用于选定返回数据的字段 |
adjust | 参数 | 复权模式,用于指定历史行情数据的复权模式 |
bar | 数据结构 | 对应K线的 Bar (一根蜡烛节点,是该段时间内 tick 的统计),其中包含开高低收量等统计信息 |
tick | 数据结构 | 对应交易所的 tick 数据(推送频率取决于交易所),不同交易所的 tick 数据流解析为相同规格的数据 |
cl_ord_id | 参数 | 订单数据的主键,通过该主键撤单和识别订单,在下单函数调用成功时自动生成 |
参数 | 作用 |
---|---|
strategy_id | 策略id,用于终端识别策略身份的唯一标识 |
filename | 指定策略主函数的名称 |
mode | 策略运行模式,MODE_LIVE(实时)=1,MODE_BACKTEST(回测) =2 |
token | 登录身份信息的标识,服务器通过该标识识别账户 |
backtest_start_time | 回测开始时间 |
backtest_end_time | 回测结束时间 |
backtest_initial_cash | 回测初始资金 |
backtest_transaction_ratio | 成交比率,最大成交量占比,用于防止不切实际的成交量 |
backtest_commission_ratio | 回测交易手续费,仿真的在终端设置 |
backtest_slippage_ratio | 回测滑点,用于模拟冲击成本 |
backtest_adjust | 复权方式,采用复权撮合可以不用盘后结算,速度更快,但是价格和当时价格不一致,ADJUST_NONE(不复权),ADJUST_PREV(前复权),ADJUST_POST(后复权) |
backtest_check_cache | 回测缓存,回测一次后数据就会被缓存起来,重复回测更快 |
serv_addr | 终端地址,默认情况下无需设置,SDK运行无法脱离终端(很多动态资源是终端在管),需要指定一个登陆状态的终端 |
description | |
---|---|
- | 1. %% main 函数作为默认的策略编辑函数 |
- | 2. function [Context] = main(Context,Event) |
- | 4. %% 首行注释一般用于说明该段策略代码的功能、逻辑等 |
- | 5. % 策略名:均线突破策略 |
- | 6. % 第一步:设定交易股票池,订阅股票池数据,分别针对个股做以下决策 |
- | 7. % 第二步:60分钟均线突破3日均线作为指标 |
- | 8. % 如果向上突破,且无持仓,则按一定资金比例买入 |
- | 9. % 如果向下突破,且有持仓,则卖出所有持仓 |
- | 10. % 第三步:止损指标,判断持仓时间,如果超过两天,就平仓了结 |
- | 12. if Event.初始化 % 初始化操作 |
- | 13. 股票池 = 'xxxxx' % 设定股票池 |
- | 14. subscribe(symbols, '1分钟数据',长度20); % 订阅数据 |
- | 15. subscribe(symbols, '1天数据',长度10); |
- | 16. Context.周期1 = 20; % 设定均线周期 |
- | 17. Context.周期2 = 10; |
- | 18. end |
- | 20. 周期1=Context.周期1; |
- | 21. 周期2=Context.周期2; |
- | 22. 1分钟时序数据 = Context.data.1分钟数据.收盘价(周期1); |
- | 23. 1天时序数据 = Context.data.1天数据.收盘价(周期2); |
- | 25. if Event.1分钟数据更新时 |
- | 26. % 计算突破因子 |
- | 27. 突破因子 = mean(1分钟时序数据)-mean(1天时序数据 ); |
- | 28. 资金= get_cash(); |
- | 29. 仓位 = get_position(); |
- | 30. for i = 所有股票循环 |
- | 31. % 60分钟均线突破3日均线作为指标 |
- | 32. if 突破因子(i)>0 |
- | 33. if 持仓.数量==0 %没有仓位则开仓 |
- | 34. 订单对象=order_value(标的, 资金*0.1, 买入, 市价,开仓,价格); |
- | 35. end |
- | 36. else |
- | 37. if 持仓.数量~=0 % 有仓位则平仓 |
- | 38. 订单对象=order_value(标的, 持仓.数量, 卖出, 市价,平仓,价格); |
- | 39. end |
- | 40. end |
- | 41. % 止损指标 |
- | 42. if Context.now-仓位.时间>2天 且 持仓.数量~=0 |
- | 43. 订单对象=order_value(标的, 持仓.数量, 卖出, 市价,平仓,价格); |
- | 44. end |
- | 45. end |
- | 47. end |