量化工具整体介绍

开源量化软件

  • 无论是中低频交易策略套利策略还是期权策略,都可以通过定制化模块来实现
  • 由于用户掌控这软件的源代码,可以了解软件里面的每一个角落,所以更为可靠安全

商业量化软件

  • 发明者量化工具
    • 实盘交易收费 0.125 元/小时
    • 登陆发明者量化工具的官方网站,注册并登陆
    • 量化工具登录后开始设计自己的量化交易策略
    • 量化工具编程会有一个集中的功能区,功能区主要包括左上角的控制中心,是该量化工具的核心功能,点击之后,就可以
      • 编写交易策略和策略回测
      • 设置交易品种的交易所
      • 创建管理策略机器人的托管者
      • 创建具体的量化交易机器人
    • 策略广场中聚合了上千个官方和第三方免费开放的交易策略,方便复制学习
    • 策略编辑界面,配置了经典策略样例,点击可直接使用策略代码,轻松体验整个量化交易的核心流程
    • 该工具的仿真交易符合交易所规则,完全免费,仿真包括的时间、价格、订单量等与真实行情实时撮合,高度吻合实盘交易。大大提高策略验证效率

如何配置发明者量化交易系统

  • 入门学习模拟仿真交易配置
  • 实盘交易配置

添加交易所

  • 打开浏览器,搜索发明者量化官网,注册并登录
  • 打开控制中心,点击交易所,点击添加交易所
    • 由于发明者量化工具支持多种交易市场,所以配置商品期货,一定要先在第①步中选择“传统期货”
    • 在第②步中,需要填写所开户的期货公司给你的期货账户和密码
  • 实盘的量化交易主要以国内期货交易品种为主,目前发明者量化的主要服务对象也是国内期货交易所
  • 对于外汇交易,发明者量化可以作为一个学习的平台,因为外汇量化交易在 mt5 等平台已有出现,只是更为专业
  • 推荐用 SimNow 仿真交易
    • 该产品仿真各家交易所的交易及结算规则研发
    • 目前已经支持国内各家期货交易所的商品期货业务

策略编写

  • 策略库就是存放代码的地方,它相当于我们的量化交易策略仓库
    • 策略编写
    • 模拟回测
  • 策略编写区是开发策略主要的工作区域
  • 模拟回测区可以在开发策略过程中调试策略,以及策略开发完毕后检验策略
    1. 在控制台页面,点击“策略库”点击“新建策略”
    2. 点击下拉菜单,选择“麦语言”给策略起名
    3. 在代码编写区写代码
    4. 点击创建策略

创建量化交易机器人

  • 创建一个机器人,它就可以自动帮你执行策略代码中的每一个交易逻辑,以及开仓、平仓、撤单等买卖操作
    1. 第①步:在控制中心页面,点击“机器人”,点击“创建机器人”
    2. 第②步:给机器人自定义一个名字
    3. 第③步:点击“+”号,添加交易平台
    4. 第④步:点击“创建机器人”

常用的API讲解

  • 假如你需要获取当前品种今天的开盘价是多少,不需要知道具体是怎么获取到的。你只需要在代码编辑器中写入“OPEN”,直接使用就行了,“OPEN”就是麦语言中开盘价的 API

常用的麦语言

  • 紫色的 AA 是变量,变量就是可以变的量,就跟我们初中学的代数是一样的
    • 如果把开盘价赋值给 AA,那么 AA 就是开盘价
    • 如果把最高价赋值给 AA,那么 AA 就是最高价
    • 当然 AA 只是自定义的名字,你也可以定义为 BB
  • 绿色的“:=”是赋值的意思,也就是将“:=”右边的数值给左边的变量
  • 橘色的代码就是发明者量化工具的麦语言 API
    • 第一行中的 OPEN 是获取收盘价的 API,直接使用就可以了
    • 第二行中的 MA 是获取均线的 API
      • 它需要传入 2 个参数,也就是说你需要告诉发明者量化工具,你需要什么样的均线
        • 如果你希望获取以开盘价计算的 50 周期均线,那么可以写为:MA(OPEN,50)
        • 注意两个参数之间有个英文逗号
  • 其他麦语言API
    • OPEN
      • 获取最新 K 线的开盘价
      • 例:AA:=OPEN; 获取最新 K 线的开盘价,并把结果赋值给 AA
    • HIGH
      • 获取最新 K 线的最高价
      • 例:AA:=HIGH; 获取最新 K 线的最高价,并把结果赋值给 AA
    • LOW
      • 获取最新 K 线的最低价
      • 例:AA:=LOW; 获取最新 K 线的最低价,并把结果赋值给 AA
    • CLOSE
      • 获取最新 K 线的收盘价,当盘中 k 线没有走完的时候,取得最新价
      • 例:AA:=CLOSE; 获取最新 K 线的收盘价,并把结果赋值给 AA
    • VOL
      • 获取最新 K 线的成交量
      • 例:AA:=VOL; 获取最新 K 线的成交量,并把结果赋值给 AA
    • REF(X,N)
      • 引用 X 在 N 个周期前的值。
      • 例:REF(CLOSE,1); 获取上根 K 线的开盘价
    • MA(X,N)
      • 求 X 在 N 个周期内的简单移动平均
      • 例:MA(CLOSE,10); //获取最新 K 线的 10 周期均线
    • CROSSUP(A,B)
      • 表示当 A 从下方向上穿过 B,成立返回 1(Yes),否则返回 0(No)
      • 例:CROSSUP(CLOSE,MA(C,10)) //收盘价上穿 10 周期均价
    • CROSSDOWN(A,B)
      • 表示当 A 从上方向下穿 B,成立返回 1(Yes),否则返回 0(No)
      • 例:CROSSDOWN(CLOSE,MA(C,10)) //收盘价下穿 10 周期均价
    • BK
      • 买入开仓
      • 例:CLOSE>MA(CLOSE,5),BK; //收盘价大于 5 周期均线,买入开仓
    • SP
      • 卖出平仓
      • 例:CLOSE<MA(CLOSE,5),SP; //收盘价小于 5 周期均线,卖出平仓
    • SK
      • 卖出开仓
      • 例:CLOSE<MA(CLOSE,5),SK; //收盘价小于 5 周期均线,卖出开仓
    • BP
      • 买入平仓
      • 例:CLOSE>MA(CLOSE,5),BP; //收盘价大于 5 周期均线,买入平仓
    • BPK
      • 买入平仓,并买入开仓(反手做多)
      • 例:CLOSE>MA(CLOSE,5),BPK; //收盘价大于 5 周期均线,平掉空仓,再买开仓。
    • SPK
      • 卖出平仓,并卖出开仓(反手做空)
      • 例:CLOSE<MA(CLOSE,5),SPK; //收盘价小于 5 周期均线,平掉多仓,再卖开仓。
    • CLOSEOUT
      • 平掉所有持仓,建议在加减仓模型中使用。
      • 例:CLOSEOUT; 平掉所有方向的仓位。

常用的 JavaScript 语言 API

  • 在 JavaScript 语言中创建变量通常称为“声明”变量
    • 红色代码,我们使用 var 关键词来声明变量,变量名是橘色代码:“aa”
  • 在 JavaScript 语言中,用等号赋值,也就是将“=”右边的数值给左边的变量
    • 青色代码“exchange”是交易所对象
      • 这里的交易所指的就是你所设置的期货公司
      • 这是一个固定的格式
      • 也就是你在调用 JavaScript 语言的 API 时,必须指定交易所对象
    • 绿色代码就是 JavaScript 语言的 API
      • 当我们调用它的时候,其实是调用交易所对象中的函数
      • 注意蓝色代码后面的点,也是一个固定格式
      • 这里的函数与我们中学时学的函数是一个意思
      • 如果该函数不需要指定参数,就以空括号表示
      • 如果该函数必须传入参数,就把参数写到括号里面
  • 其他 JavaScript 语言 API
    • SetContractType(“品种代码”)
      • 设置合约类型,也就是你要交易哪个品种
      • 例:exchange.SetContractType("rb1905"); //设置交易的品种为“螺纹钢 1905合约”
    • GetTicker()
      • 获取 Tick 数据
      • 例:exchange.GetTicker(); //获取 Tick 数据
    • GetRecords()
      • 获取 K 线数据
      • 例:exchange.GetRecords(); //获取 K 线数据
    • Buy()
      • 买入
      • 例:exchange.Buy(5000, 1); //以 5000 元的价格买一手
    • Sell()
      • 买入
      • 例:exchange.Sell(5000, 1); //以 5000 元的价格卖一手
    • GetAccount()
      • 获取账户信息
      • 例:exchange.GetAccount(); //获取账户信息
    • GetPosition()
      • 获取持仓信息
      • 例:exchange.GetPosition(); //获取持仓信息
    • SetDirection()
      • 设置做多做空下单类型
      • 例:
      • exchange.SetDirection("buy"); //设置下单类型为买入开多仓
      • exchange.SetDirection("closebuy"); //设置下单类型为卖出平多仓
      • exchange.SetDirection("sell"); //设置下单类型为卖出开空仓
      • exchange.SetDirection("closesell"); //设置下单类型为买入平空仓
    • Log()
      • 在日志中输出一条信息
      • 例:Log(“hello, worle”); //在日志中输出”hello world”
    • Sleep()
      • 使程序暂停一段时间
      • 例:Sleep(1000); //使程序暂停 1 秒

如何在发明者量化系统上编写策略

准备

  • 打开发明者量化工具的官网,依次点击“策略库”、“新建策略”
  • 在编程语言下拉菜单中,选择麦语言或者JavaScript 语言
  • 该平台也支持 Python、C++以及可视化语言

策略想法

  • 一个价格突破均线的策略
    • 如果价格高于最近10 天的平均价格就买入
    • 如果价格低于最近 10 天的平均价格就卖出
  • 但是价格虽然能直观的反映出市场状态,却会有很多假突破信号
  • 所以需要对这个策略升级改进
    • 首先,选择一个较大周期均线,来判断趋势走向
      • 这至少已经过滤将近一半假突破信号
      • 大周期均线虽然迟钝,但是会更加稳定
    • 然后,为了再次提高入场的成功率,再增加一个条件,这条大周期均线至少是向上的
    • 最后,使用价格、短期均线、长期均线的相对位置关系形成一个完整的交易策略

策略逻辑

  • 把文字版的策略逻辑转换成代码,它将包括三个步骤:
    • 获取行情
    • 计算指标
    • 下单买卖
  • 多头开仓
    • 如果当前没有仓位
    • 并且收盘价大于短期均线
    • 并且收盘价大于长期均线
    • 并且短期均线大于长期均线
    • 并且长期均线是上升的
  • 空头开仓
    • 如果当前没有仓位
    • 并且收盘价小于短期均线
    • 并且收盘价小于长期均线
    • 并且短期均线小于长期均线
    • 并且长期均线是下降的
  • 多头平仓
    • 如果当前持有多单
    • 并且收盘价小于长期均线
    • 或者短期均线小于长期均线
    • 或者长期均线是下降的
  • 空头平仓
    • 如果当前持有空单
    • 并且收盘价大于长期均线
    • 或者短期均线大于长期均线
    • 或者长期均线是上升的

麦语言策略

  • 获取收盘价的 API 就是:CLOSE
  • 假设短期均线为 10 周期均线,长期均线为 50 周期均线
    • MA(CLOSE,10)
    • MA(CLOSE,50)
  • 判断均线上升
    • 当前 K 线的 50 周期均线数值比上根 K 线的 50 周期均线值大
    • 并且上根 K 线的 50 周期均线数值比上上根 K 线的 50 周期均线值大
  • 反之就是判断均线下降