LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > FMZ股票实盘、模拟盘程序化交易实战--股票版DualThrust策略

FMZ股票实盘、模拟盘程序化交易实战--股票版DualThrust策略

2021-04-01 sky110 来源:区块链网络

最近发明者量化交易平台支持了富途证券,进一步增加了一个可以实战程序化交易、量化交易的市场。有很多古老的策略可以拿出来玩一玩,最起码可以测试一下模拟盘交易,毕竟国内股票市场程序化、量化这些技术还都是大机构、大庄家的工具。我们小散能体验一把股票市场的自动化交易还是很令人兴奋的~!

注册富途证券,开户后即可使用模拟盘,点击发明者量化文档链接可以直达富途官网:

股票版Dual Thrust策略

接下来就要讲一下非常经典的策略了Dual Thrust,这个策略是小编我在FMZ.COM学习程序化交易交易入门的第一个策略。在FMZ.COM上这个策略有很多版本,例如:商品期货版本,数字货币版本等,以及各种不同编程语言的版本。为什么这个策略比较适合入门呢?因为这个策略涵盖了策略开发的很多方面,诸如策略图表,实时状态信息显示,数据处理,交易逻辑设计等等。并且策略并不复杂,代码也不难懂。本文讲解的这个「股票版Dual Thrust策略」移植自商品期货版的DualThrust策略。

虽然策略逻辑很简单,但是从期货市场移植到股票市场,还是有很多差别的。

下面我就讲讲移植策略时积累的一些经验

期货市场T+0,股票市场T+1。

这个区别很重要,这一点就导致我们在设计策略时,需要在开仓、平仓检测时增加一些额外的判断。因为期货市场是T+0,所以开仓之后持仓数据中的FrozenAmount字段是0,仓位并不处于冻结状态,就是想平仓随时可以平仓。但是股票市场这点就有差别了,当天开仓后,持仓数据中的FrozenAmount字段是和开仓数量相同的数值,表示开仓后仓位数量全部冻结,当天不能平仓交易。平仓时需要额外注意的就是需要计算可平仓数量,因为有可能有部分持仓是冻结的(通常用持仓数据中的Amount减去FrozenAmount算出可平仓数量)。

下单前设置的交易方向。

和期货市场一样下单前要设置交易方向,不过方向只能设置开多,也就是调用exchange.SetContractType("buy")。因为股票市场是属于现货交易,并没有开空头仓位的概念。所以是不能调用exchange.SetContractType("swap")。所以原版商品期货策略中的做空相关的代码都可以剔除。

最小下单数量、下单价格精度

在GetTicker函数返回的数据中Info是券商接口的原始应答数据,其中LotSize字段就是当前品种(某只股票)的最小下单量。

这个数值通常是100,如果下单数量不能被这个数值整除,下单会报错。

下单价格精度同样也需要控制,和商品期货一样,股票信息中也有priceTick。在GetTicker函数返回的数据Info中PriceSpread字段即为价格一跳数据。

涨跌停、停牌等

股票市场的涨跌停还是比较常见的,所以策略需要检测这种情况,尤其是程序化交易多只股票的时候,不能让一个涨跌停的股票,调用接口失败导致一直卡着。涨跌停时,深度接口GetDepth()返回的数据中第一档订单量为0,以此识别。

depth.Bids[0].Amount == 0表示跌停。

depth.Asks[0].Amount == 0表示涨停。

除了要检测涨跌停,还需要检测当前股票交易状态,是否停牌等等。这些信息可以通过GetTicker、SetContractType函数返回的数据中检测。

交易时段差别

股票市场和期货市场交易时段有一定的差别,策略可以根据要交易的板块、市场,具体定制交易时间,让策略在非交易时段休眠。

例如,对于国内A股,可以写一个函数(IsTrading)判断交易时段。

需要注意接口访问频率限制。

和商品期货不同,股票限制接口访问频率更加严格,需要在每次访问接口后增加一定的间隔时间,并且间隔时间还需要设置挺大(几秒),否则会触发报错(超过限制频率)。所以在股票策略中需要注意使用_C接口,避免卡死。

测试

使用富途牛牛模拟盘测试。

使用的是一分钟K线测试,只为了测试交易下单、图表显示、数据显示等功能。

测试源码

JavaScript策略

小编是新手菜鸟,策略代码仅供分享、学习、探讨、研究,如有BUG感谢提出,如果感觉不错感谢推广一下平台(FMZ.COM)。

—-

编译者/作者:sky110

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

LOADING...
LOADING...