开源量化软件¶
- 无论是中低频交易策略、套利策略还是期权策略,都可以通过定制化模块来实现
- 由于用户掌控这软件的源代码,可以了解软件里面的每一个角落,所以更为可靠安全
商业量化软件¶
- 发明者量化工具
- 实盘交易收费 0.125 元/小时
- 登陆发明者量化工具的官方网站,注册并登陆
- 量化工具登录后开始设计自己的量化交易策略
- 量化工具编程会有一个集中的功能区,功能区主要包括左上角的控制中心,是该量化工具的核心功能,点击之后,就可以
- 编写交易策略和策略回测
- 设置交易品种的交易所
- 创建管理策略机器人的托管者
- 创建具体的量化交易机器人
- 策略广场中聚合了上千个官方和第三方免费开放的交易策略,方便复制学习
- 策略编辑界面,配置了经典策略样例,点击可直接使用策略代码,轻松体验整个量化交易的核心流程
- 该工具的仿真交易符合交易所规则,完全免费,仿真包括的时间、价格、订单量等与真实行情实时撮合,高度吻合实盘交易。大大提高策略验证效率
添加交易所¶
- 打开浏览器,搜索发明者量化官网,注册并登录
- 打开控制中心,点击交易所,点击添加交易所
- 由于发明者量化工具支持多种交易市场,所以配置商品期货,一定要先在第①步中选择“传统期货”
- 在第②步中,需要填写所开户的期货公司给你的期货账户和密码
- 实盘的量化交易主要以国内期货交易品种为主,目前发明者量化的主要服务对象也是国内期货交易所
- 对于外汇交易,发明者量化可以作为一个学习的平台,因为外汇量化交易在 mt5 等平台已有出现,只是更为专业
- 推荐用 SimNow 仿真交易
- 该产品仿真各家交易所的交易及结算规则研发
- 目前已经支持国内各家期货交易所的商品期货业务
策略编写¶
- 策略库就是存放代码的地方,它相当于我们的量化交易策略仓库
- 策略编写区是开发策略主要的工作区域
- 模拟回测区可以在开发策略过程中调试策略,以及策略开发完毕后检验策略
- 在控制台页面,点击“策略库”点击“新建策略”
- 点击下拉菜单,选择“麦语言”给策略起名
- 在代码编写区写代码
- 点击创建策略
创建量化交易机器人¶
- 创建一个机器人,它就可以自动帮你执行策略代码中的每一个交易逻辑,以及开仓、平仓、撤单等买卖操作
- 第①步:在控制中心页面,点击“机器人”,点击“创建机器人”
- 第②步:给机器人自定义一个名字
- 第③步:点击“+”号,添加交易平台
- 第④步:点击“创建机器人”
- 假如你需要获取当前品种今天的开盘价是多少,不需要知道具体是怎么获取到的。你只需要在代码编辑器中写入“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 周期均线值大
- 反之就是判断均线下降