LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 手把手教你实现一个商品期货计划委托工具

手把手教你实现一个商品期货计划委托工具

2019-12-18 发明者量化交易 来源:区块链网络

在做商品期货交易时,并非都是全自动的交易策略,有很多半自动的程序化交易工具代替人工盯盘。这类工具虽然算不上完整的策略,但是也是基于使用者的交易意图,有条理的进行交易,也算是一种最简单的交易策略吧。下面我们就一起来实现一个交易工具。

对于半自动的交易工具可能会有很多需求,我们简单整理一些需求实现出来,对于更加高级、复杂的需求可以后续优化升级。

商品期货计划委托工具(教学)

计划委托:制定委托任务,由策略参数设置的价格线,下单手数,多空方向,触发方式,确定任务。

止盈计划委托订单成交以后,根据设置的止盈价格,创建计划止盈任务。

止损计划委托订单成交以后,根据设置的止损价格,创建计划止损任务。

止损反手根据止损任务触发后,制定反手任务。

有了以上需求,我们就可以逐一把功能实现,首先分析一下,止盈、止损动作是建立在开始的计划委托订单成交,有持仓以后,再产生的动作,所以止盈、止损是基于,第一个计划委托订单成交以后再创建。止损反手同样也是基于止损完成以后再产生的动作。

1722ecddf3d06a9dcd7a.png

大致是这样的一个流程。

所以这里遇到第一个问题,我们设计时,如何让一个任务完成以后,自动创建另一个后续任务呢?这个问题解决很简单,FMZ量化交易平台提供了强大的模板类库,用自带的商品期货交易类库就可以轻松解决。17a4eceedca41c6b65fc.png每个策略创建时都会在模板栏中自带这个类库,勾选上,保存策略即可引用。

回到我们的问题,如何让一个任务完成后,自动创建预先设置好的另一个任务,我们使用「商品期货交易类库」中的$.NewTaskQueue()函数创建的交易队列控制对象就可以。

策略中定义的全局变量

RWIEmWXwbiyIot7vBa4GRnP927mKMbB9IyqJOf5s.png

如何使用这个对象?q呢?很简单,如下代码。task.taskSymbol为当前任务的合约代码,task.taskDirection为当前任务的交易方向,task.taskAmount为当前任务的下单数量。最后function(tradeTask, ret) {...就是解决我们问题的回调函数。可以在当前任务完成后,触发执行这个回调函数,这样我们把后续任务的创建操作写在这个回调函数中就可以轻松实现。

tpFFqGAZPpgR1KuyeinKcqQ8H75IqR1xjNRksnIn.png

我们先看完整的策略代码:

aESru40GAYhKeFVmCW5ZVOmIYBCltViHD4hVTEKB.png

通篇看下策略代码,其实最核心的就是TaskQueueProcess这个函数,在该函数中对_TaskQueue数组中储存的任务进行逐一判断,判断任务是否生效,判断当前的行情条件结合具体的任务参数,是否达到我们的委托触发条件。达到触发条件,然后使用模板的q对象,执行任务,根据预先设置好的回调函数,在任务执行完成时,创建后续任务,从而完成委托流程。

回测测试:172be8aa224e06d77787.png

169d2ace2e3c235daeb7.png

参数设置时:16b388bc6287e6b83e6f.png参数默认为无效参数,例如「委托价格」为-1时,即为不委托。同理,止损、止盈、反手价格也一样,设置-1即不启用该功能。在代码中可以看到:16c748e46dc626532bc3.png判断,设置的参数如果是-1的话,是不会在回调函数中创建后续任务的。

教学策略链接:https://www.fmz.com/strategy/175150

策略仅用于教学,实盘慎用。

—-

编译者/作者:发明者量化交易

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...