输入/搜索内容
1
关注
280
关注者
商品期货交易类库之CTA策略框架
商品期货
创建于 2017-10-11 19:06:12  更新于 2019-07-31 18:14:49
 1
 5608

商品期货交易类库之CTA策略框架

2017年的** 优宽量化 **高速运转,本次更新的是“商品期货交易类库”中的CTA策略框架。该策略框架后台自动提供数据和基础服务,借助该策略框架可以大幅提高策略编写效率,正常几百行的策略,用CTA策略框架几十行就能实现一个并发稳定可实盘的多品种策略。另外,配合专门的程序化交易数据结构和丰富的金融统计函数库,同样支持复杂的逻辑应用,简单又不失灵活。

一、如何使用CTA策略框架

1、如下图,在策略广场找到“商品期货交易类库”,复制到自己账户的控制中心。

2、如下图,写策略时勾选“商品期货交易类库”。

二、如何用CTA策略框架编写一个均线策略模型

  • 原始需求
  • 策略设计

  • 策略编写

  • 策略回测

  • 原始需求
    价格包含了一切,并且最能贴近趋势,灵敏度高,但是会有很多噪音,产生虚假信号;长期均线在判断趋势上一般比较准确,但是长期均线有着严重的滞后问题。在这里我们用短期均线代替价格,过滤日常杂波,具体为使用短期均线与长期均线的相对位置关系,形成买卖依据。

  • 策略A设计(持续持仓策略)
    持多单。短期均线与长期均线至少有2个周期的金叉。
    持空单。短期均线与长期均线至少有2个周期的死叉。

  • 策略B设计(非持续持仓策略)
    开多单。多头无持仓,并且短期均线与长期均线至少有3个周期的金叉。
    开空单。空头无持仓,并且短期均线与长期均线至少有3个周期的死叉。
    平多单。多头有持仓,并且短期均线与长期均线至少有1个周期的死叉。
    平空单。空头有持仓,并且短期均线与长期均线至少有1个周期的金叉。

  • 策略A编写

javascript
function main() { /* 直接使用商品期货类库的CTA策略框架,该框架一共有3个参数: 1、参数1是字符串类型,单个或多个合约代码。 ···例如:rb1801或rb1801,MA801,ru1801 2、参数2是一个函数,用来写交易逻辑。 ···该函数参数1为K线,参数2为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则无持仓,参数3为合约名称 ···用户可以指定该函数的返回值为n ···n = 0 : 指全部平仓(不管当前是多仓还是空仓) ···n > 0 : 如果当前无持仓则开n个多单,如果当前持多仓则加n个多单, 如果当前为空仓则平n个空单 ···n < 0 : 如果当前无持仓则开n个空单,如果当前持空仓则加n个空单, 如果当前为多仓则平n个多单 ···无返回值表示什么也不做 3、第3个参数是数字类型,等待时间间隔,单位是毫秒,可以不写,默认是500毫秒 */ $.CTA("RB000,RU000,CF000,TA000,I000,PP000,P000,L000,J000,JM000", function(r, mp, symbol) { //K线长度过滤 if (r.length < 20) { return } //调用cross交叉函数 var cross = _Cross(TA.EMA(r, 5), TA.EMA(r, 20)); //如果当前没有持仓,并且短期均线与长期均线至少有3个周期的金叉,就开Lots个多单 //如果当前持有空仓,并且短期均线与长期均线至少有3个周期的金叉,就反手开多单 if (mp <= 0 && cross > 2) { Log(symbol, "金叉周期", cross, "当前持仓", mp); return 1 * (mp < 0 ? 2 : 1) } //如果当前没有持仓,并且短期均线与长期均线至少有3个周期的死叉,就开Lots个空单 //如果当前持有多仓,并且短期均线与长期均线至少有3个周期的死叉,就反手开空单 if (mp >= 0 && cross < -2) { Log(symbol, "死叉周期", cross, "当前持仓", mp); return -1 * (mp > 0 ? 2 : 1) } }); }
  • 策略B编写
javascript
function main() { //同上 $.CTA(Symbols, function(r, mp, symbol) { //K线长度过滤 if (r.length < SlowPeriod) { return } //调用cross交叉函数 var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod)); //如果当前没有持仓,并且短期均线与长期均线至少有3个周期的金叉,就开Lots个多单 if (mp === 0 && cross > 3) { Log(symbol, "金叉周期", cross, "当前持仓", mp); return Lots } //如果当前持有多仓,并且短期均线与长期均线至少有1个周期的死叉,就平Lots个多单 if (mp > 0 && cross < -1) { Log(symbol, "死叉周期", cross, "当前持仓", mp); return -Lots } //如果当前没有持仓,并且短期均线与长期均线至少有3个周期的死叉,就开Lots个空单 if (mp === 0 && cross < -3) { Log(symbol, "死叉周期", cross, "当前持仓", mp); return -Lots } //如果当期持有空仓,并且短期均线与长期均线至少有1个周期的金叉,就平Lots个空单 if (mp < 0 && cross > 1) { Log(symbol, "金叉周期", cross, "当前持仓", mp); return Lots } }); }
  • 策略回测


** 优宽量化 量化平台,专业打造“一站式”量化交易解决方案,致力于服务机构和量化投资者。**

相关推荐
评论
全部评论 (0)
暂无数据
暂无数据
  • 1
iPhone 下载
社区
回测系统
© 2015 - ∞ YouQuant 豫ICP备19046564号